static void search_results_exec (SearchResultsMsg *msg, GCancellable *cancellable, GError **error) { GList *folders = NULL, *link; for (link = msg->stores_list; link != NULL; link = link->next) { CamelStore *store = CAMEL_STORE (link->data); if (g_cancellable_is_cancelled (cancellable)) break; add_folders_from_store (&folders, store, cancellable, error); } if (!g_cancellable_is_cancelled (cancellable)) { CamelVeeFolder *vfolder = CAMEL_VEE_FOLDER (msg->folder); folders = g_list_reverse (folders); camel_vee_folder_set_folders (vfolder, folders, cancellable); } g_list_free_full (folders, g_object_unref); }
static void vfolder_adduri_exec (struct _adduri_msg *m, GCancellable *cancellable, GError **error) { GList *l; EMailSession *session; CamelFolder *folder = NULL; MailFolderCache *folder_cache; if (vfolder_shutdown) return; session = e_mail_backend_get_session (m->backend); folder_cache = e_mail_session_get_folder_cache (session); /* we dont try lookup the cache if we are removing it, its no longer there */ if (!m->remove && !mail_folder_cache_get_folder_from_uri (folder_cache, m->uri, &folder)) { g_warning ( "Folder '%s' disappeared while I was " "adding/removing it to/from my vfolder", m->uri); return; } if (folder == NULL) folder = e_mail_session_uri_to_folder_sync ( session, m->uri, 0, cancellable, error); if (folder != NULL) { l = m->folders; while (l && !vfolder_shutdown) { if (m->remove) camel_vee_folder_remove_folder ( CAMEL_VEE_FOLDER (l->data), folder); else camel_vee_folder_add_folder ((CamelVeeFolder *) l->data, folder); l = l->next; } g_object_unref (folder); } }
static ESource * guess_mail_account_from_folder (ESourceRegistry *registry, CamelFolder *folder, const gchar *message_uid) { ESource *source; CamelStore *store; const gchar *uid; /* Lookup an ESource by CamelStore UID. */ store = camel_folder_get_parent_store (folder); if (message_uid && folder && CAMEL_IS_VEE_STORE (store)) { CamelMessageInfo *mi = camel_folder_get_message_info (folder, message_uid); if (mi) { CamelFolder *location; location = camel_vee_folder_get_location (CAMEL_VEE_FOLDER (folder), (CamelVeeMessageInfo *) mi, NULL); if (location) store = camel_folder_get_parent_store (location); camel_folder_free_message_info (folder, mi); } } uid = camel_service_get_uid (CAMEL_SERVICE (store)); source = e_source_registry_ref_source (registry, uid); /* If we found an ESource, make sure it's a mail account. */ if (source != NULL) { const gchar *extension_name; extension_name = E_SOURCE_EXTENSION_MAIL_ACCOUNT; if (!e_source_has_extension (source, extension_name)) { g_object_unref (source); source = NULL; } } return source; }
static gboolean vee_info_set_flags (CamelMessageInfo *mi, guint32 flags, guint32 set) { gint res = FALSE; CamelVeeFolder *vf = CAMEL_VEE_FOLDER (camel_folder_summary_get_folder (mi->summary)); if (camel_debug("vfolderexp")) printf ( "Expression for vfolder '%s' is '%s'\n", camel_folder_get_full_name (CAMEL_FOLDER (vf)), g_strescape (vf->expression, "")); /* first update original message info... */ if (mi->uid) { CamelMessageInfo *rmi = camel_folder_summary_get (((CamelVeeMessageInfo *) mi)->orig_summary, mi->uid + 8); HANDLE_NULL_INFO (FALSE); /* ignore changes done in the folder itself, * unless it's a vTrash or vJunk folder */ if (!CAMEL_IS_VTRASH_FOLDER (vf)) camel_vee_folder_ignore_next_changed_event (vf, camel_folder_summary_get_folder (rmi->summary)); camel_folder_freeze (camel_folder_summary_get_folder (rmi->summary)); res = camel_message_info_set_flags (rmi, flags, set); ((CamelVeeMessageInfo *) mi)->old_flags = camel_message_info_flags (rmi); camel_folder_thaw (camel_folder_summary_get_folder (rmi->summary)); camel_message_info_free (rmi); } if (res) CAMEL_FOLDER_SUMMARY_CLASS (camel_vee_summary_parent_class)->info_set_flags (mi, flags, set); return res; }