extern "C" MimeObjectClass * MIME_VCardCreateContentTypeHandlerClass(const char *content_type, contentTypeHandlerInitStruct *initStruct) { MimeObjectClass *clazz = (MimeObjectClass *)&mimeInlineTextVCardClass; /* * Must set the superclass by hand. */ if (!COM_GetmimeInlineTextClass()) return NULL; clazz->superclass = (MimeObjectClass *)COM_GetmimeInlineTextClass(); initStruct->force_inline_display = true; return clazz; }
static int MimeInlineTextSMIMEStub_parse_eof (MimeObject *obj, bool abort_p) { if (obj->closed_p) return 0; /* Run parent method first, to flush out any buffered data. */ int status = ((MimeObjectClass*)COM_GetmimeInlineTextClass())->parse_eof(obj, abort_p); if (status < 0) return status; if ( (obj->options) && ((obj->options->format_out == nsMimeOutput::nsMimeMessageQuoting) || (obj->options->format_out == nsMimeOutput::nsMimeMessageBodyQuoting)) ) return 0; char* html = NULL; status = GenerateMessage(&html); if (status < 0) return status; status = COM_MimeObject_write(obj, html, PL_strlen(html), true); PR_FREEIF(html); if (status < 0) return status; return 0; }
static int MimeInlineTextVCard_parse_eof (MimeObject *obj, bool abort_p) { nsCOMPtr<nsIMsgVCardService> vCardService = do_GetService(MSGVCARDSERVICE_CONTRACT_ID); if (!vCardService) return -1; int status = 0; MimeInlineTextVCardClass *clazz = ((MimeInlineTextVCardClass *) obj->clazz); VObject *t, *v; if (obj->closed_p) return 0; /* Run parent method first, to flush out any buffered data. */ // status = ((MimeObjectClass*)&MIME_SUPERCLASS)->parse_eof(obj, abort_p); status = ((MimeObjectClass*)COM_GetmimeInlineTextClass())->parse_eof(obj, abort_p); if (status < 0) return status; // Don't quote vCards... if ( (obj->options) && ((obj->options->format_out == nsMimeOutput::nsMimeMessageQuoting) || (obj->options->format_out == nsMimeOutput::nsMimeMessageBodyQuoting)) ) return 0; if (!clazz->vCardString) return 0; v = vCardService->Parse_MIME(clazz->vCardString, strlen(clazz->vCardString)); NS_ASSERTION(v, "parse of vCard failed"); if (clazz->vCardString) { PR_Free ((char*) clazz->vCardString); clazz->vCardString = NULL; } if (obj->output_p && obj->options && obj->options->write_html_p && obj->options->headers != MimeHeadersCitation) { /* This is a fine place to write any closing HTML. In fact, you may want all the writing to be here, and all of the above would just collect data into datastructures, though that isn't very "streaming". */ t = v; while (v && status >= 0) { /* write out html */ status = WriteOutVCard (obj, v); /* parse next vcard incase they're embedded */ v = vCardService->NextVObjectInList(v); } (void)vCardService->CleanVObject(t); } if (status < 0) return status; return 0; }