diff options
author | Dan Winship <danw@src.gnome.org> | 2000-09-20 01:27:09 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2000-09-20 01:27:09 +0800 |
commit | 7dcc0325454ed6c71c2532befbb6aadb32391766 (patch) | |
tree | 744535557a2ab1e23278778ac464dcab718e03c1 /camel/providers/imap | |
parent | 053af645da6e5f74474d13c19ce73d236d9b76a9 (diff) | |
download | gsoc2013-evolution-7dcc0325454ed6c71c2532befbb6aadb32391766.tar gsoc2013-evolution-7dcc0325454ed6c71c2532befbb6aadb32391766.tar.gz gsoc2013-evolution-7dcc0325454ed6c71c2532befbb6aadb32391766.tar.bz2 gsoc2013-evolution-7dcc0325454ed6c71c2532befbb6aadb32391766.tar.lz gsoc2013-evolution-7dcc0325454ed6c71c2532befbb6aadb32391766.tar.xz gsoc2013-evolution-7dcc0325454ed6c71c2532befbb6aadb32391766.tar.zst gsoc2013-evolution-7dcc0325454ed6c71c2532befbb6aadb32391766.zip |
Removed (camel_folder_init, camel_folder_construct): New object init
* camel-folder.c: (init): Removed
(camel_folder_init, camel_folder_construct): New object init
function and public object constructor to replace the old init
method in a more Gtk-like fashion.
(get_parent_folder, camel_folder_get_parent_folder): Removed. No
CamelFolder subclass was ever setting the parent_folder member, no
code has ever needed to look at it, and fixing it would actually
be pretty hard.
(get_subfolder_info, camel_folder_get_subfolder_info): Renamed
from ..._names. Deals in CamelFolderInfo now.
(free_subfolder_info, camel_folder_free_subfolder_info): Likewise.
(get_subfolder, camel_folder_get_subfolder): Removed.
CamelFolderInfo contains the subfolder's full name, so this is
unnecessary now, and removing it lets us get rid of the
CamelFolder separator member, which is needed for the default
implementation of this function, but not otherwise needed for most
providers.
Also, lots of code style fixes.
* providers/*: Update CamelFolder subclasses for changes, although
none of them fill in the message counts in the CamelFolderInfo
yet.
svn path=/trunk/; revision=5503
Diffstat (limited to 'camel/providers/imap')
-rw-r--r-- | camel/providers/imap/camel-imap-folder.c | 107 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-folder.h | 3 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-store.c | 5 |
3 files changed, 41 insertions, 74 deletions
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c index 473659fb84..c6771cfd4c 100644 --- a/camel/providers/imap/camel-imap-folder.c +++ b/camel/providers/imap/camel-imap-folder.c @@ -59,10 +59,6 @@ static CamelFolderClass *parent_class = NULL; -static void imap_init (CamelFolder *folder, CamelStore *parent_store, - CamelFolder *parent_folder, const gchar *name, - gchar *separator, gboolean path_begns_with_sep, - CamelException *ex); static void imap_finalize (CamelObject *object); static void imap_refresh_info (CamelFolder *folder, CamelException *ex); static void imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex); @@ -84,8 +80,8 @@ static void imap_move_message_to (CamelFolder *source, const char *uid, CamelFolder *destination, CamelException *ex); /* subfolder listing */ -static GPtrArray *imap_get_subfolder_names_internal (CamelFolder *folder, CamelException *ex); -static GPtrArray *imap_get_subfolder_names (CamelFolder *folder); +static GPtrArray *imap_get_subfolder_info_internal (CamelFolder *folder, CamelException *ex); +static GPtrArray *imap_get_subfolder_info (CamelFolder *folder); /* summary info */ static GPtrArray *imap_get_uids (CamelFolder *folder); @@ -115,15 +111,14 @@ camel_imap_folder_class_init (CamelImapFolderClass *camel_imap_folder_class) /* virtual method definition */ /* virtual method overload */ - camel_folder_class->init = imap_init; camel_folder_class->refresh_info = imap_refresh_info; camel_folder_class->sync = imap_sync; camel_folder_class->expunge = imap_expunge; camel_folder_class->get_uids = imap_get_uids; camel_folder_class->free_uids = camel_folder_free_nop; - camel_folder_class->get_subfolder_names = imap_get_subfolder_names; - camel_folder_class->free_subfolder_names = camel_folder_free_nop; + camel_folder_class->get_subfolder_info = imap_get_subfolder_info; + camel_folder_class->free_subfolder_info = camel_folder_free_nop; camel_folder_class->get_message_count = imap_get_message_count; camel_folder_class->get_unread_message_count = imap_get_unread_message_count; @@ -159,6 +154,16 @@ camel_imap_folder_init (gpointer object, gpointer klass) imap_folder->summary = NULL; imap_folder->summary_hash = NULL; imap_folder->lsub = NULL; + + /* some IMAP daemons support user-flags * + * I would not, however, rely on this feature as * + * most IMAP daemons do not support all the features */ + folder->permanent_flags = CAMEL_MESSAGE_SEEN | + CAMEL_MESSAGE_ANSWERED | + CAMEL_MESSAGE_FLAGGED | + CAMEL_MESSAGE_DELETED | + CAMEL_MESSAGE_DRAFT | + CAMEL_MESSAGE_USER; } CamelType @@ -181,29 +186,23 @@ camel_imap_folder_get_type (void) } CamelFolder * -camel_imap_folder_new (CamelStore *parent, char *folder_name, CamelException *ex) +camel_imap_folder_new (CamelStore *parent, char *folder_name) { CamelFolder *folder = CAMEL_FOLDER (camel_object_new (camel_imap_folder_get_type ())); CamelURL *url = CAMEL_SERVICE (parent)->url; - char *dir_sep; + char *dir_sep, *short_name; dir_sep = CAMEL_IMAP_STORE (parent)->dir_sep; - - CF_CLASS (folder)->init (folder, parent, NULL, folder_name, dir_sep, FALSE, ex); - - if (camel_exception_is_set (ex)) { - camel_object_unref (CAMEL_OBJECT (folder)); - return NULL; - } + short_name = strrchr (folder_name, *dir_sep); + if (short_name) + short_name++; + else + short_name = folder_name; + camel_folder_construct (folder, parent, folder_name, short_name); if (!strcmp (folder_name, url->path + 1)) folder->can_hold_messages = FALSE; - if (camel_exception_is_set (ex)) { - camel_object_unref (CAMEL_OBJECT (folder)); - return NULL; - } - return folder; } @@ -249,60 +248,22 @@ static void imap_finalize (CamelObject *object) { CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object); - gint max, i; + gint i; imap_folder_summary_free (imap_folder); if (imap_folder->lsub) { - max = imap_folder->lsub->len; - - for (i = 0; i < max; i++) { - g_free (imap_folder->lsub->pdata[i]); - imap_folder->lsub->pdata[i] = NULL; - } + for (i = 0; i < imap_folder->lsub->len; i++) + camel_folder_info_free (imap_folder->lsub->pdata[i]); g_ptr_array_free (imap_folder->lsub, TRUE); } } -static void -imap_init (CamelFolder *folder, CamelStore *parent_store, CamelFolder *parent_folder, - const gchar *name, gchar *separator, gboolean path_begins_with_sep, CamelException *ex) -{ - CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder); - - /* call parent method */ - parent_class->init (folder, parent_store, parent_folder, name, separator, path_begins_with_sep, ex); - if (camel_exception_get_id (ex)) - return; - - /* we assume that the parent init - method checks for the existance of @folder */ - folder->can_hold_messages = TRUE; - folder->can_hold_folders = TRUE; - folder->has_summary_capability = TRUE; - folder->has_search_capability = TRUE; - - /* some IMAP daemons support user-flags * - * I would not, however, rely on this feature as * - * most IMAP daemons do not support all the features */ - folder->permanent_flags = CAMEL_MESSAGE_SEEN | - CAMEL_MESSAGE_ANSWERED | - CAMEL_MESSAGE_FLAGGED | - CAMEL_MESSAGE_DELETED | - CAMEL_MESSAGE_DRAFT | - CAMEL_MESSAGE_USER; - - imap_folder->search = NULL; - imap_folder->summary = NULL; - imap_folder->summary_hash = NULL; - imap_folder->lsub = NULL; -} - static void imap_refresh_info (CamelFolder *folder, CamelException *ex) { - imap_get_subfolder_names_internal (folder, ex); + imap_get_subfolder_info_internal (folder, ex); if (folder->can_hold_messages) imap_get_summary_internal (folder, ex); @@ -613,7 +574,7 @@ imap_get_uids (CamelFolder *folder) } static GPtrArray * -imap_get_subfolder_names_internal (CamelFolder *folder, CamelException *ex) +imap_get_subfolder_info_internal (CamelFolder *folder, CamelException *ex) { CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder); CamelStore *store = CAMEL_STORE (folder->parent_store); @@ -622,6 +583,7 @@ imap_get_subfolder_names_internal (CamelFolder *folder, CamelException *ex) gboolean found_inbox = FALSE; gint status; gchar *result, *namespace, *dir_sep; + CamelFolderInfo *fi; g_return_val_if_fail (folder != NULL, g_ptr_array_new ()); @@ -687,9 +649,18 @@ imap_get_subfolder_names_internal (CamelFolder *folder, CamelException *ex) if (*dir) { d(fprintf (stderr, "adding folder: %s\n", dir)); + fi = g_new0 (CamelFolderInfo, 1); + fi->full_name = dir; + fi->name = strrchr (dir, *sep); + if (fi->name) + fi->name = g_strdup (fi->name + 1); + else + fi->name = g_strdup (dir); + /* FIXME: read/unread msg count */ + if (!g_strcasecmp (dir, "INBOX")) found_inbox = TRUE; - g_ptr_array_add (listing, dir); + g_ptr_array_add (listing, fi); } g_free (sep); @@ -712,7 +683,7 @@ imap_get_subfolder_names_internal (CamelFolder *folder, CamelException *ex) } static GPtrArray * -imap_get_subfolder_names (CamelFolder *folder) +imap_get_subfolder_info (CamelFolder *folder) { CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder); diff --git a/camel/providers/imap/camel-imap-folder.h b/camel/providers/imap/camel-imap-folder.h index 4df50ed027..3dc10b3682 100644 --- a/camel/providers/imap/camel-imap-folder.h +++ b/camel/providers/imap/camel-imap-folder.h @@ -62,8 +62,7 @@ typedef struct { /* public methods */ -CamelFolder *camel_imap_folder_new (CamelStore *parent, char *folder_name, - CamelException *ex); +CamelFolder *camel_imap_folder_new (CamelStore *parent, char *folder_name); void camel_imap_folder_changed (CamelFolder *folder, gint recent, GPtrArray *expunged, CamelException *ex); diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index 22a89a9751..8dc82ed7e5 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -502,10 +502,7 @@ get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelEx else folder_path = g_strdup (folder_name); - new_folder = camel_imap_folder_new (store, folder_path, ex); - - if (camel_exception_is_set (ex)) - return NULL; + new_folder = camel_imap_folder_new (store, folder_path); /* this is the top-level dir, we already know it exists - it has to! */ /* Yes, we use a hard-coded "/" here - this just means top-level directory */ |