static gint do_perf (gint argc, gchar **argv) { CamelIndex *idx; DIR *dir; const gchar *path = "/home/notzed/evolution/local/Inbox/mbox/cur"; struct dirent *d; CamelStream *null, *filter, *stream; CamelMimeFilter *filter_index; gchar *name; CamelIndexName *idn; dir = opendir (path); if (dir == NULL) { perror("open dir"); return 1; } idx = (CamelIndex *) camel_text_index_new ( "/tmp/index", O_TRUNC|O_CREAT|O_RDWR); if (idx == NULL) { perror("open index"); closedir (dir); return 1; } null = camel_stream_null_new (); filter = camel_stream_filter_new (null); g_object_unref (null); filter_index = camel_mime_filter_index_new (idx); camel_stream_filter_add ((CamelStreamFilter *)filter, filter_index); while ((d = readdir (dir))) { printf("indexing '%s'\n", d->d_name); idn = camel_index_add_name (idx, d->d_name); camel_mime_filter_index_set_name ( CAMEL_MIME_FILTER_INDEX (filter_index), idn); name = g_strdup_printf("%s/%s", path, d->d_name); stream = camel_stream_fs_new_with_name (name, O_RDONLY, 0, NULL); camel_stream_write_to_stream (stream, filter, NULL, NULL); g_object_unref (stream); g_free (name); camel_index_write_name (idx, idn); g_object_unref (idn); camel_mime_filter_index_set_name ( CAMEL_MIME_FILTER_INDEX (filter_index), NULL); } closedir (dir); camel_index_sync (idx); g_object_unref (idx); g_object_unref (filter); g_object_unref (filter_index); return 0; }
static guint32 get_message_size (CamelMimeMessage *message, GCancellable *cancellable) { CamelStream *null; guint32 size; null = camel_stream_null_new (); camel_data_wrapper_write_to_stream_sync ( CAMEL_DATA_WRAPPER (message), null, cancellable, NULL); size = CAMEL_STREAM_NULL (null)->written; g_object_unref (null); return size; }
static gboolean empe_mp_alternative_parse (EMailParserExtension *extension, EMailParser *parser, CamelMimePart *part, GString *part_id, GCancellable *cancellable, GQueue *out_mail_parts) { CamelMultipart *mp; gint i, nparts, bestid = 0; CamelMimePart *best = NULL; EMailExtensionRegistry *reg; reg = e_mail_parser_get_extension_registry (parser); mp = (CamelMultipart *) camel_medium_get_content ((CamelMedium *) part); if (!CAMEL_IS_MULTIPART (mp)) return e_mail_parser_parse_part_as ( parser, part, part_id, "application/vnd.evolution.source", cancellable, out_mail_parts); /* as per rfc, find the last part we know how to display */ nparts = camel_multipart_get_number (mp); for (i = 0; i < nparts; i++) { CamelMimePart *mpart; CamelDataWrapper *data_wrapper; CamelContentType *type; CamelStream *null_stream; gchar *mime_type; gsize content_size; if (g_cancellable_is_cancelled (cancellable)) return TRUE; /* is it correct to use the passed in *part here? */ mpart = camel_multipart_get_part (mp, i); if (mpart == NULL) continue; /* This may block even though the stream does not. * XXX Pretty inefficient way to test if the MIME part * is empty. Surely there's a quicker way? */ null_stream = camel_stream_null_new (); data_wrapper = camel_medium_get_content (CAMEL_MEDIUM (mpart)); camel_data_wrapper_decode_to_stream_sync ( data_wrapper, null_stream, cancellable, NULL); content_size = CAMEL_STREAM_NULL (null_stream)->written; g_object_unref (null_stream); if (content_size == 0) continue; type = camel_mime_part_get_content_type (mpart); mime_type = camel_content_type_simple (type); camel_strdown (mime_type); if (!e_mail_part_is_attachment (mpart) && ((camel_content_type_is (type, "multipart", "related") == 0) || !related_display_part_is_attachment (mpart)) && (e_mail_extension_registry_get_for_mime_type (reg, mime_type) || ((best == NULL) && (e_mail_extension_registry_get_fallback (reg, mime_type))))) { best = mpart; bestid = i; } g_free (mime_type); } if (best) { gint len = part_id->len; g_string_append_printf (part_id, ".alternative.%d", bestid); e_mail_parser_parse_part ( parser, best, part_id, cancellable, out_mail_parts); g_string_truncate (part_id, len); } else { e_mail_parser_parse_part_as ( parser, part, part_id, "multipart/mixed", cancellable, out_mail_parts); } return TRUE; }