From d131983ad0be46b2170ab266e41d27b0000af79f Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 25 Oct 2000 15:27:17 +0000 Subject: [PATCH] Add a "parent" field to CamelFolderInfo. * camel-store.h: Add a "parent" field to CamelFolderInfo. * camel-store.c (camel_folder_info_build): Deal with "parent" (camel_store_folder_subscribed, camel_store_subscribe_folder, camel_store_unsubscribe_folder): Add g_return_if_fails checking that the folder supports subscriptions. * providers/imap/camel-imap-store.c (folder_subscribed, subscribe_folder, unsubscribe_folder): Remove "+ 1"s since the mail subscribe UI won't prepend / to the folder names now. (get_folder_info): Clear the "parent" field of the folderinfos when removing an empty top level. * providers/nntp/camel-nntp-store.c (nntp_store_folder_subscribed, nntp_store_subscribe_folder, nntp_store_unsubscribe_folder): Remove "+ 1"s since the mail subscribe UI won't prepend / to the folder names now. --- camel/ChangeLog | 20 ++++++++++++++++++++ camel/camel-store.c | 5 +++++ camel/camel-store.h | 2 +- camel/providers/imap/camel-imap-store.c | 31 ++++++++++++++++++------------- camel/providers/nntp/camel-nntp-store.c | 6 +++--- 5 files changed, 47 insertions(+), 17 deletions(-) diff --git a/camel/ChangeLog b/camel/ChangeLog index a4e9575..822cea9 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,23 @@ +2000-10-25 Dan Winship + + * camel-store.h: Add a "parent" field to CamelFolderInfo. + + * camel-store.c (camel_folder_info_build): Deal with "parent" + (camel_store_folder_subscribed, camel_store_subscribe_folder, + camel_store_unsubscribe_folder): Add g_return_if_fails checking + that the folder supports subscriptions. + + * providers/imap/camel-imap-store.c (folder_subscribed, + subscribe_folder, unsubscribe_folder): Remove "+ 1"s since the + mail subscribe UI won't prepend / to the folder names now. + (get_folder_info): Clear the "parent" field of the folderinfos + when removing an empty top level. + + * providers/nntp/camel-nntp-store.c (nntp_store_folder_subscribed, + nntp_store_subscribe_folder, nntp_store_unsubscribe_folder): + Remove "+ 1"s since the mail subscribe UI won't prepend / to the + folder names now. + 2000-10-24 Chris Toshok * providers/imap/camel-imap-store.h: add subscribed_folders. diff --git a/camel/camel-store.c b/camel/camel-store.c index 706ade9..ac6337a 100644 --- a/camel/camel-store.c +++ b/camel/camel-store.c @@ -557,9 +557,11 @@ camel_folder_info_build (GPtrArray *folders, CamelFolderInfo *top, g_ptr_array_add (folders, pfi); } fi->sibling = pfi->child; + fi->parent = pfi; pfi->child = fi; } else { fi->sibling = top->child; + fi->parent = top; top->child = fi; } } @@ -591,6 +593,7 @@ camel_store_folder_subscribed (CamelStore *store, const char *folder_name) { g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE); + g_return_val_if_fail (store->flags & CAMEL_STORE_SUBSCRIPTIONS, FALSE); return CS_CLASS (store)->folder_subscribed (store, folder_name); } @@ -613,6 +616,7 @@ camel_store_subscribe_folder (CamelStore *store, CamelException *ex) { g_return_if_fail (CAMEL_IS_STORE (store)); + g_return_if_fail (store->flags & CAMEL_STORE_SUBSCRIPTIONS); CS_CLASS (store)->subscribe_folder (store, folder_name, ex); } @@ -636,6 +640,7 @@ camel_store_unsubscribe_folder (CamelStore *store, CamelException *ex) { g_return_if_fail (CAMEL_IS_STORE (store)); + g_return_if_fail (store->flags & CAMEL_STORE_SUBSCRIPTIONS); CS_CLASS (store)->unsubscribe_folder (store, folder_name, ex); } diff --git a/camel/camel-store.h b/camel/camel-store.h index 2be350b..7558c0e 100644 --- a/camel/camel-store.h +++ b/camel/camel-store.h @@ -39,7 +39,7 @@ extern "C" { typedef struct _CamelFolderInfo { - struct _CamelFolderInfo *sibling, *child; + struct _CamelFolderInfo *parent, *sibling, *child; char *url, *full_name, *name; int message_count, unread_message_count; } CamelFolderInfo; diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index 8e38160..f0ea3c0 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -675,6 +675,8 @@ get_folder_info (CamelStore *store, const char *top, gboolean fast, topfi = topfi->child; fi->child = NULL; camel_folder_info_free (fi); + for (fi = topfi; fi; fi->sibling) + fi->parent = NULL; } g_free (namespace); @@ -688,9 +690,10 @@ folder_subscribed (CamelStore *store, const char *folder_name) CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); char *folder_path; - folder_path = camel_imap_store_folder_path (imap_store, folder_name + 1 /* bump past the '/' */); + folder_path = camel_imap_store_folder_path (imap_store, folder_name); - return (g_hash_table_lookup (imap_store->subscribed_folders, folder_path) != NULL); + return g_hash_table_lookup (imap_store->subscribed_folders, + folder_path) != NULL; } static void @@ -701,14 +704,16 @@ subscribe_folder (CamelStore *store, const char *folder_name, CamelImapResponse *response; char *folder_path; - folder_path = camel_imap_store_folder_path (imap_store, folder_name + 1 /* bump past the '/' */); + folder_path = camel_imap_store_folder_path (imap_store, folder_name); response = camel_imap_command (imap_store, NULL, ex, "SUBSCRIBE \"%s\"", folder_path); - - if (response) - g_hash_table_insert (imap_store->subscribed_folders, folder_path, folder_path); + if (response) { + g_hash_table_insert (imap_store->subscribed_folders, + folder_path, folder_path); + } else + g_free (folder_path); camel_imap_response_free (response); } @@ -719,22 +724,22 @@ unsubscribe_folder (CamelStore *store, const char *folder_name, CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); CamelImapResponse *response; char *folder_path; - char *key, *value; + gpointer key, value; - folder_path = camel_imap_store_folder_path (imap_store, folder_name + 1 /* bump past the '/' */); + folder_path = camel_imap_store_folder_path (imap_store, folder_name); response = camel_imap_command (imap_store, NULL, ex, "UNSUBSCRIBE \"%s\"", folder_path); - if (response) { - g_hash_table_lookup_extended (imap_store->subscribed_folders, folder_path, - (gpointer)&key, (gpointer)&value); - g_hash_table_remove (imap_store->subscribed_folders, folder_path); + g_hash_table_lookup_extended (imap_store->subscribed_folders, + folder_path, key, value); + g_hash_table_remove (imap_store->subscribed_folders, + folder_path); + g_free (key); } camel_imap_response_free (response); g_free (folder_path); - g_free (key); } static void diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c index 9bc59e7..dbba435 100644 --- a/camel/providers/nntp/camel-nntp-store.c +++ b/camel/providers/nntp/camel-nntp-store.c @@ -563,7 +563,7 @@ nntp_store_folder_subscribed (CamelStore *store, const char *folder_name) { CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (store); - return camel_nntp_newsrc_group_is_subscribed (nntp_store->newsrc, folder_name + 1); + return camel_nntp_newsrc_group_is_subscribed (nntp_store->newsrc, folder_name); } static void @@ -572,7 +572,7 @@ nntp_store_subscribe_folder (CamelStore *store, const char *folder_name, { CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (store); - camel_nntp_newsrc_subscribe_group (nntp_store->newsrc, folder_name + 1); + camel_nntp_newsrc_subscribe_group (nntp_store->newsrc, folder_name); } static void @@ -581,7 +581,7 @@ nntp_store_unsubscribe_folder (CamelStore *store, const char *folder_name, { CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (store); - camel_nntp_newsrc_unsubscribe_group (nntp_store->newsrc, folder_name + 1); + camel_nntp_newsrc_unsubscribe_group (nntp_store->newsrc, folder_name); } static void -- 2.7.4