static void change_folder (CamelStore *store, const gchar *name, guint32 flags, gint count) { CamelFolderInfo *fi; const gchar *tmp; fi = camel_folder_info_new (); fi->full_name = g_strdup (name); tmp = strrchr (name, '/'); if (tmp == NULL) tmp = name; else tmp++; fi->display_name = g_strdup (tmp); fi->unread = count; fi->flags = CAMEL_FOLDER_VIRTUAL; if (!(flags & CHANGE_DELETE)) fi->flags |= CAMEL_FOLDER_NOCHILDREN; if (flags & CHANGE_NOSELECT) fi->flags |= CAMEL_FOLDER_NOSELECT; if (flags & CHANGE_DELETE) camel_store_folder_deleted (store, fi); else camel_store_folder_created (store, fi); camel_folder_info_free (fi); }
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); } } }
static void groupwise_forget_folder (CamelGroupwiseStore *gw_store, const gchar *folder_name, GError **error) { CamelGroupwiseStorePrivate *priv = gw_store->priv; gchar *state_file; gchar *folder_dir, *storage_path; CamelFolderInfo *fi; storage_path = g_strdup_printf ("%s/folders", priv->storage_path); folder_dir = e_path_to_physical (storage_path,folder_name); if (g_access (folder_dir, F_OK) != 0) { g_free (folder_dir); return; } state_file = g_strdup_printf ("%s/cmeta", folder_dir); g_unlink (state_file); g_free (state_file); g_rmdir (folder_dir); g_free (folder_dir); camel_store_summary_remove_path ( (CamelStoreSummary *)gw_store->summary, folder_name); camel_store_summary_save ( (CamelStoreSummary *)gw_store->summary); fi = groupwise_build_folder_info (gw_store, NULL, folder_name); camel_store_folder_deleted (CAMEL_STORE (gw_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; }