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); }
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 add_folders_from_store (GList **folders, CamelStore *store, GCancellable *cancellable, GError **error) { CamelFolderInfo *root, *fi; g_return_if_fail (folders != NULL); g_return_if_fail (store != NULL); if (CAMEL_IS_VEE_STORE (store)) return; root = camel_store_get_folder_info_sync ( store, NULL, CAMEL_STORE_FOLDER_INFO_RECURSIVE, cancellable, error); fi = root; while (fi && !g_cancellable_is_cancelled (cancellable)) { CamelFolderInfo *next; if ((fi->flags & CAMEL_FOLDER_NOSELECT) == 0) { CamelFolder *fldr; fldr = camel_store_get_folder_sync ( store, fi->full_name, 0, cancellable, error); if (fldr) { if (CAMEL_IS_VEE_FOLDER (fldr)) { g_object_unref (fldr); } else { *folders = g_list_prepend (*folders, fldr); } } } /* pick the next */ next = fi->child; if (!next) next = fi->next; if (!next) { next = fi->parent; while (next) { if (next->next) { next = next->next; break; } next = next->parent; } } fi = next; } camel_folder_info_free (root); }
CamelFolderInfo * camel_ews_utils_build_folder_info (CamelEwsStore *store, const gchar *fid) { CamelEwsStoreSummary *ews_summary = store->summary; CamelFolderInfo *fi; gchar *folder_name; fi = camel_folder_info_new (); fi->full_name = camel_ews_store_summary_get_folder_full_name ( ews_summary, fid, NULL); if (!fi->full_name) { camel_folder_info_free (fi); g_warn_if_reached (); return NULL; } folder_name = camel_ews_store_summary_get_folder_name (ews_summary, fid, NULL); fi->display_name = e_ews_folder_utils_unescape_name (folder_name); fi->flags = camel_ews_store_summary_get_folder_flags (ews_summary, fid, NULL); fi->unread = camel_ews_store_summary_get_folder_unread (ews_summary, fid, NULL); fi->total = camel_ews_store_summary_get_folder_total (ews_summary, fid, NULL); g_free (folder_name); if (!(fi->flags & CAMEL_FOLDER_TYPE_MASK)) { switch (camel_ews_store_summary_get_folder_type (ews_summary, fid, NULL)) { case E_EWS_FOLDER_TYPE_CALENDAR: fi->flags |= CAMEL_FOLDER_TYPE_EVENTS; break; case E_EWS_FOLDER_TYPE_CONTACTS: fi->flags |= CAMEL_FOLDER_TYPE_CONTACTS; break; case E_EWS_FOLDER_TYPE_TASKS: fi->flags |= CAMEL_FOLDER_TYPE_TASKS; break; case E_EWS_FOLDER_TYPE_MEMOS: fi->flags |= CAMEL_FOLDER_TYPE_MEMOS; break; default: break; } } return fi; }
static void groupwise_forget_folder (CamelGroupwiseStore *gw_store, const char *folder_name, CamelException *ex) { CamelFolderSummary *summary; CamelGroupwiseStorePrivate *priv = gw_store->priv; char *summary_file, *state_file; char *folder_dir, *storage_path; CamelFolderInfo *fi; const char *name; name = folder_name; 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; } summary_file = g_strdup_printf ("%s/summary", folder_dir); summary = camel_groupwise_summary_new(NULL,summary_file); if(!summary) { g_free(summary_file); g_free(folder_dir); return; } camel_object_unref (summary); g_unlink (summary_file); g_free (summary_file); 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_object_trigger_event (CAMEL_OBJECT (gw_store), "folder_deleted", fi); camel_folder_info_free (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_folder_info_free (folder_info); 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); } } }