static void sync_deleted_folders (CamelEwsStore *store, GSList *deleted_folders) { CamelEwsStoreSummary *ews_summary = store->summary; GSList *l; for (l = deleted_folders; l != NULL; l = g_slist_next (l)) { const gchar *fid = l->data; EEwsFolderType ftype; CamelFolderInfo *fi; GError *error = NULL; if (!camel_ews_store_summary_has_folder (ews_summary, fid)) continue; ftype = camel_ews_store_summary_get_folder_type ( ews_summary, fid, NULL); if (ftype == E_EWS_FOLDER_TYPE_MAILBOX) { fi = camel_ews_utils_build_folder_info (store, fid); if (!camel_ews_store_summary_remove_folder (ews_summary, fid, &error)) { if (error != NULL) { g_warning ("%s: %s", G_STRFUNC, error->message); g_clear_error (&error); } continue; } camel_subscribable_folder_unsubscribed (CAMEL_SUBSCRIBABLE (store), fi); camel_store_folder_deleted (CAMEL_STORE (store), fi); } } }
gboolean e_mail_store_create_folder_sync (CamelStore *store, const gchar *full_name, GCancellable *cancellable, GError **error) { CamelFolderInfo *folder_info; gchar *copied_full_name; gchar *display_name; const gchar *parent; gboolean success = TRUE; g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE); g_return_val_if_fail (full_name != NULL, FALSE); copied_full_name = g_strdup (full_name); display_name = strrchr (copied_full_name, '/'); if (display_name == NULL) { display_name = copied_full_name; parent = ""; } else { *display_name++ = '\0'; parent = copied_full_name; } folder_info = camel_store_create_folder_sync ( store, parent, display_name, cancellable, error); g_free (copied_full_name); if (folder_info == NULL) return FALSE; if (CAMEL_IS_SUBSCRIBABLE (store)) success = camel_subscribable_subscribe_folder_sync ( CAMEL_SUBSCRIBABLE (store), full_name, cancellable, error); camel_store_free_folder_info (store, folder_info); return success; }
gboolean e_mail_session_unsubscribe_folder_sync (EMailSession *session, const gchar *folder_uri, GCancellable *cancellable, GError **error) { CamelStore *store = NULL; gchar *folder_name = NULL; const gchar *message; gboolean success = FALSE; g_return_val_if_fail (E_IS_MAIL_SESSION (session), FALSE); g_return_val_if_fail (folder_uri != NULL, FALSE); success = e_mail_folder_uri_parse ( CAMEL_SESSION (session), folder_uri, &store, &folder_name, error); if (!success) return FALSE; message = _("Unsubscribing from folder '%s'"); camel_operation_push_message (cancellable, message, folder_name); /* FIXME This should take our GCancellable. */ success = em_utils_connect_service_sync ( CAMEL_SERVICE (store), cancellable, error) && camel_subscribable_unsubscribe_folder_sync ( CAMEL_SUBSCRIBABLE (store), folder_name, cancellable, error); camel_operation_pop_message (cancellable); g_object_unref (store); g_free (folder_name); return success; }
static void sync_created_folders (CamelEwsStore *ews_store, GSList *created_folders, GSList **created_folder_ids) { GSList *l; for (l = created_folders; l != NULL; l = g_slist_next (l)) { EEwsFolder *folder = (EEwsFolder *) l->data; EEwsFolderType ftype; CamelFolderInfo *fi; const EwsFolderId *fid; ftype = e_ews_folder_get_folder_type (folder); if (ftype != E_EWS_FOLDER_TYPE_MAILBOX) continue; fid = e_ews_folder_get_id (folder); /* FIXME: Sort folders so that a child is always added *after* * its parent. But since the old code was already completely * broken and would just go into an endless loop if the server * didn't return the folders in the 'right' order for that, * let's worry about that in a later commit. */ add_folder_to_summary (ews_store, folder); if (created_folder_ids) { *created_folder_ids = g_slist_append (*created_folder_ids, g_strdup (fid->id)); } else { fi = camel_ews_utils_build_folder_info ( ews_store, fid->id); camel_store_folder_created ( CAMEL_STORE (ews_store), fi); camel_subscribable_folder_subscribed ( CAMEL_SUBSCRIBABLE (ews_store), fi); camel_folder_info_free (fi); } } }
gboolean camel_ews_utils_delete_folders_from_summary_recursive (CamelEwsStore *ews_store, CamelFolderInfo *folder_info, gboolean send_signals, GError **error) { gboolean success = TRUE; while (folder_info != NULL) { gchar *fid; if (folder_info->child != NULL) { success = camel_ews_utils_delete_folders_from_summary_recursive ( ews_store, folder_info->child, send_signals, error); if (!success) break; } fid = camel_ews_store_summary_get_folder_id_from_name (ews_store->summary, folder_info->full_name); success = camel_ews_store_summary_remove_folder (ews_store->summary, fid, error); g_free (fid); if (!success) break; if (send_signals) { camel_subscribable_folder_unsubscribed (CAMEL_SUBSCRIBABLE (ews_store), folder_info); camel_store_folder_deleted (CAMEL_STORE (ews_store), folder_info); } folder_info = folder_info->next; } return success; }