static void refresh_folders_exec (struct _refresh_folders_msg *m, GCancellable *cancellable, GError **error) { CamelFolder *folder; EMailSession *session; gint i; GError *local_error = NULL; gulong handler_id = 0; if (cancellable) handler_id = g_signal_connect ( m->info->cancellable, "cancelled", G_CALLBACK (main_op_cancelled_cb), cancellable); get_folders (m->store, m->folders, m->finfo); camel_operation_push_message (m->info->cancellable, _("Updating...")); session = m->info->session; for (i = 0; i < m->folders->len; i++) { folder = e_mail_session_uri_to_folder_sync ( session, m->folders->pdata[i], 0, cancellable, &local_error); if (folder) { /* FIXME Not passing a GError here. */ camel_folder_synchronize_sync ( folder, FALSE, cancellable, NULL); camel_folder_refresh_info_sync (folder, cancellable, NULL); g_object_unref (folder); } else if (local_error != NULL) { g_warning ("Failed to refresh folders: %s", local_error->message); g_clear_error (&local_error); } if (g_cancellable_is_cancelled (m->info->cancellable)) break; if (m->info->state != SEND_CANCELLED) camel_operation_progress ( m->info->cancellable, 100 * i / m->folders->len); } camel_operation_pop_message (m->info->cancellable); if (cancellable) g_signal_handler_disconnect (m->info->cancellable, handler_id); }
/* NB: duplicated in maildir store */ static void fill_fi (CamelStore *store, CamelFolderInfo *fi, guint32 flags) { CamelFolder *folder; fi->unread = -1; fi->total = -1; folder = camel_object_bag_peek (store->folders, fi->full_name); if (folder) { if ((flags & CAMEL_STORE_FOLDER_INFO_FAST) == 0) camel_folder_refresh_info_sync (folder, NULL, NULL); fi->unread = camel_folder_get_unread_message_count (folder); fi->total = camel_folder_get_message_count (folder); g_object_unref (folder); } else { CamelLocalStore *local_store; gchar *folderpath; CamelMboxSummary *mbs; local_store = CAMEL_LOCAL_STORE (store); /* This should be fast enough not * to have to test for INFO_FAST. */ folderpath = camel_local_store_get_full_path ( local_store, fi->full_name); mbs = (CamelMboxSummary *) camel_mbox_summary_new ( NULL, folderpath, NULL); /* FIXME[disk-summary] track exception */ if (camel_folder_summary_header_load_from_db ((CamelFolderSummary *) mbs, store, fi->full_name, NULL)) { fi->unread = camel_folder_summary_get_unread_count ( (CamelFolderSummary *) mbs); fi->total = camel_folder_summary_get_saved_count ( (CamelFolderSummary *) mbs); } g_object_unref (mbs); g_free (folderpath); } if (camel_local_store_is_main_store (CAMEL_LOCAL_STORE (store)) && fi->full_name && (fi->flags & CAMEL_FOLDER_TYPE_MASK) == CAMEL_FOLDER_TYPE_NORMAL) fi->flags = (fi->flags & ~CAMEL_FOLDER_TYPE_MASK) | camel_local_store_get_folder_type_by_full_name ( CAMEL_LOCAL_STORE (store), fi->full_name); }
gint main (gint argc, gchar *argv[]) { CamelSession *session; CamelService *service; ESourceRegistry *registry; GList *list, *link; const gchar *extension_name; g_type_init (); system ("rm -rf /tmp/test-map"); camel_init ("/tmp/test-map", TRUE); e_source_camel_register_types (); session = g_object_new ( CAMEL_TYPE_SESSION, "user-data-dir", "/tmp/test-map", "user-cache-dir", "/tmp/test-map/cache", NULL); /* Browse through the ESource registry to find out the MAP account */ registry = e_source_registry_new_sync (NULL, NULL); extension_name = E_SOURCE_EXTENSION_MAIL_ACCOUNT; list = e_source_registry_list_sources (registry, extension_name); for (link = list; link != NULL; link = g_list_next (link)) { ESource *source = E_SOURCE (link->data); const gchar *uid; const gchar *backend_name = "INVALID"; const gchar *display_name; ESourceBackend *extension; if (!e_source_get_enabled (source)) continue; uid = e_source_get_uid (source); display_name = e_source_get_display_name (source); printf("Looking for: %s\n", display_name); extension = e_source_get_extension (source, extension_name); backend_name = e_source_backend_get_backend_name (extension); if (strcmp (backend_name, "map") == 0) { /* Lets add just map backend to the session. */ CamelFolderInfo *info; CamelFolder *folder; GPtrArray *uids; int i; GError *error=NULL; service = camel_session_add_service ( CAMEL_SESSION (session), uid, backend_name, CAMEL_PROVIDER_STORE, NULL); e_source_camel_configure_service (source, service); camel_service_connect_sync (service, NULL, NULL); info = camel_store_get_folder_info_sync ( CAMEL_STORE (service), "", 0, NULL, NULL); print_folder_info (info, 0); folder = camel_store_get_folder_sync ( CAMEL_STORE (service), "inbox", 0, NULL, NULL); camel_folder_refresh_info_sync (folder, NULL, &error); if (error) printf("Refresh info failed: %s\n", error->message); uids = camel_folder_get_uids (folder); printf("Length of messages: %p %d\n", folder, uids->len); for (i=0; i<uids->len; i++) printf("UID: %s\n", (char *)uids->pdata[i]); } } return 0; }