diff options
Diffstat (limited to 'camel/providers')
-rw-r--r-- | camel/providers/imap/camel-imap-store.c | 47 | ||||
-rw-r--r-- | camel/providers/local/camel-local-store.c | 72 | ||||
-rw-r--r-- | camel/providers/local/camel-maildir-store.c | 10 | ||||
-rw-r--r-- | camel/providers/local/camel-mbox-store.c | 11 | ||||
-rw-r--r-- | camel/providers/local/camel-mh-store.c | 10 | ||||
-rw-r--r-- | camel/providers/nntp/camel-nntp-store.c | 7 | ||||
-rw-r--r-- | camel/providers/pop3/camel-pop3-store.c | 26 | ||||
-rw-r--r-- | camel/providers/vee/camel-vee-store.c | 9 |
8 files changed, 58 insertions, 134 deletions
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index cd46d56226..f19d8feb31 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -60,10 +60,9 @@ static CamelRemoteStoreClass *remote_store_class = NULL; static gboolean imap_connect (CamelService *service, CamelException *ex); static gboolean imap_disconnect (CamelService *service, gboolean clean, CamelException *ex); static GList *query_auth_types (CamelService *service, gboolean connect, CamelException *ex); +static guint hash_folder_name (gconstpointer key); +static gint compare_folder_name (gconstpointer a, gconstpointer b); static CamelFolder *get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex); -static char *get_folder_name (CamelStore *store, const char *folder_name, - CamelException *ex); -static char *get_root_folder_name (CamelStore *store, CamelException *ex); static CamelFolderInfo *get_folder_info (CamelStore *store, const char *top, gboolean fast, gboolean recursive, gboolean subscribed_only, @@ -94,9 +93,9 @@ camel_imap_store_class_init (CamelImapStoreClass *camel_imap_store_class) camel_service_class->connect = imap_connect; camel_service_class->disconnect = imap_disconnect; + camel_store_class->hash_folder_name = hash_folder_name; + camel_store_class->compare_folder_name = compare_folder_name; camel_store_class->get_folder = get_folder; - camel_store_class->get_folder_name = get_folder_name; - camel_store_class->get_root_folder_name = get_root_folder_name; camel_store_class->get_folder_info = get_folder_info; camel_store_class->free_folder_info = camel_store_free_folder_info_full; @@ -603,6 +602,27 @@ imap_create (CamelImapStore *store, const char *folder_name, return !camel_exception_is_set (ex); } +static guint +hash_folder_name (gconstpointer key) +{ + if (g_strcasecmp (key, "INBOX") == 0) + return g_str_hash ("INBOX"); + else + return g_str_hash (key); +} + +static gint +compare_folder_name (gconstpointer a, gconstpointer b) +{ + gconstpointer aname = a, bname = b; + + if (g_strcasecmp (a, "INBOX") == 0) + aname = "INBOX"; + if (g_strcasecmp (b, "INBOX") == 0) + bname = "INBOX"; + return g_str_equal (aname, bname); +} + static CamelFolder * get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex) @@ -661,23 +681,6 @@ get_folder (CamelStore *store, const char *folder_name, guint32 flags, return new_folder; } -static char * -get_folder_name (CamelStore *store, const char *folder_name, - CamelException *ex) -{ - /* INBOX is case-insensitive */ - if (g_strcasecmp (folder_name, "INBOX") == 0) - return g_strdup ("INBOX"); - else - return g_strdup (folder_name); -} - -static char * -get_root_folder_name (CamelStore *store, CamelException *ex) -{ - return g_strdup (""); -} - static CamelFolderInfo * parse_list_response_as_folder_info (CamelImapStore *imap_store, const char *response) diff --git a/camel/providers/local/camel-local-store.c b/camel/providers/local/camel-local-store.c index 9af9df2744..b6ea31a98f 100644 --- a/camel/providers/local/camel-local-store.c +++ b/camel/providers/local/camel-local-store.c @@ -39,12 +39,11 @@ #define CLOCALS_CLASS(so) CAMEL_LOCAL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so)) #define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so)) +static void construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex); static CamelFolder *get_folder(CamelStore * store, const char *folder_name, guint32 flags, CamelException * ex); static char *get_name(CamelService *service, gboolean brief); -static char *get_root_folder_name (CamelStore *store, CamelException *ex); -static char *get_default_folder_name (CamelStore *store, CamelException *ex); +static CamelFolder *get_inbox (CamelStore *store, CamelException *ex); static void rename_folder(CamelStore *store, const char *old_name, const char *new_name, CamelException *ex); -static char *get_folder_name(CamelStore *store, const char *folder_name, CamelException *ex); static CamelFolderInfo *get_folder_info (CamelStore *store, const char *top, gboolean fast, gboolean recursive, gboolean subscribed_only, @@ -52,18 +51,21 @@ static CamelFolderInfo *get_folder_info (CamelStore *store, const char *top, static void delete_folder(CamelStore *store, const char *folder_name, CamelException *ex); static void rename_folder(CamelStore *store, const char *old, const char *new, CamelException *ex); +static CamelStoreClass *parent_class = NULL; + static void camel_local_store_class_init (CamelLocalStoreClass *camel_local_store_class) { CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_local_store_class); CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS (camel_local_store_class); + parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ())); + /* virtual method overload */ + camel_service_class->construct = construct; camel_service_class->get_name = get_name; camel_store_class->get_folder = get_folder; - camel_store_class->get_root_folder_name = get_root_folder_name; - camel_store_class->get_default_folder_name = get_default_folder_name; - camel_store_class->get_folder_name = get_folder_name; + camel_store_class->get_inbox = get_inbox; camel_store_class->get_folder_info = get_folder_info; camel_store_class->free_folder_info = camel_store_free_folder_info_full; @@ -71,18 +73,6 @@ camel_local_store_class_init (CamelLocalStoreClass *camel_local_store_class) camel_store_class->rename_folder = rename_folder; } -static void -camel_local_store_init (gpointer object, gpointer klass) -{ - CamelStore *store = CAMEL_STORE (object); - - /* local names are filenames, so they are case-sensitive. */ - if (store->folders) - g_hash_table_destroy(store->folders); - - store->folders = g_hash_table_new (g_str_hash, g_str_equal); -} - CamelType camel_local_store_get_type (void) { @@ -94,13 +84,29 @@ camel_local_store_get_type (void) sizeof (CamelLocalStoreClass), (CamelObjectClassInitFunc) camel_local_store_class_init, NULL, - (CamelObjectInitFunc) camel_local_store_init, + NULL, NULL); } return camel_local_store_type; } +static void +construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex) +{ + int len; + + CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex); + if (camel_exception_is_set (ex)) + return; + + len = strlen (service->url->path); + if (service->url->path[len - 1] != '/') { + service->url->path = g_realloc (service->url->path, len + 2); + strcpy (service->url->path + len, "/"); + } +} + const char * camel_local_store_get_toplevel_dir (CamelLocalStore *store) { @@ -161,37 +167,15 @@ get_folder(CamelStore * store, const char *folder_name, guint32 flags, CamelExce return NULL; } -static char * -get_root_folder_name(CamelStore *store, CamelException *ex) -{ - camel_exception_set(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, - _("Local stores do not have a root folder")); - return NULL; -} - -static char * -get_default_folder_name(CamelStore *store, CamelException *ex) +static CamelFolder * +get_inbox(CamelStore *store, CamelException *ex) { camel_exception_set(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, - _("Local stores do not have a default folder")); + _("Local stores do not have an inbox")); return NULL; } static char * -get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex) -{ - /* For now, we don't allow hieararchy. FIXME. */ - if (strchr (folder_name + 1, '/')) { - camel_exception_set (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, - _("Local folders may not be nested.")); - return NULL; - } - - return *folder_name == '/' ? g_strdup (folder_name) : - g_strdup_printf ("/%s", folder_name); -} - -static char * get_name (CamelService *service, gboolean brief) { if (brief) diff --git a/camel/providers/local/camel-maildir-store.c b/camel/providers/local/camel-maildir-store.c index f5bd353b6f..d419095ea0 100644 --- a/camel/providers/local/camel-maildir-store.c +++ b/camel/providers/local/camel-maildir-store.c @@ -56,14 +56,6 @@ static void camel_maildir_store_class_init(CamelObjectClass * camel_maildir_stor camel_store_class->delete_folder = delete_folder; } -static void camel_maildir_store_init(CamelObject * object) -{ - CamelStore *store = CAMEL_STORE(object); - - /* maildir names are filenames, so they are case-sensitive. */ - store->folders = g_hash_table_new(g_str_hash, g_str_equal); -} - CamelType camel_maildir_store_get_type(void) { static CamelType camel_maildir_store_type = CAMEL_INVALID_TYPE; @@ -74,7 +66,7 @@ CamelType camel_maildir_store_get_type(void) sizeof(CamelMaildirStoreClass), (CamelObjectClassInitFunc) camel_maildir_store_class_init, NULL, - (CamelObjectInitFunc) camel_maildir_store_init, + NULL, NULL); } diff --git a/camel/providers/local/camel-mbox-store.c b/camel/providers/local/camel-mbox-store.c index 8ae0891b31..c6ddc7ce0a 100644 --- a/camel/providers/local/camel-mbox-store.c +++ b/camel/providers/local/camel-mbox-store.c @@ -54,15 +54,6 @@ camel_mbox_store_class_init (CamelMboxStoreClass *camel_mbox_store_class) camel_store_class->delete_folder = delete_folder; } -static void -camel_mbox_store_init (gpointer object, gpointer klass) -{ - CamelStore *store = CAMEL_STORE (object); - - /* mbox names are filenames, so they are case-sensitive. */ - store->folders = g_hash_table_new (g_str_hash, g_str_equal); -} - CamelType camel_mbox_store_get_type (void) { @@ -74,7 +65,7 @@ camel_mbox_store_get_type (void) sizeof (CamelMboxStoreClass), (CamelObjectClassInitFunc) camel_mbox_store_class_init, NULL, - (CamelObjectInitFunc) camel_mbox_store_init, + NULL, NULL); } diff --git a/camel/providers/local/camel-mh-store.c b/camel/providers/local/camel-mh-store.c index 3d637e4cad..a488a71c12 100644 --- a/camel/providers/local/camel-mh-store.c +++ b/camel/providers/local/camel-mh-store.c @@ -54,14 +54,6 @@ static void camel_mh_store_class_init(CamelObjectClass * camel_mh_store_class) camel_store_class->delete_folder = delete_folder; } -static void camel_mh_store_init(CamelObject * object) -{ - CamelStore *store = CAMEL_STORE(object); - - /* mh names are filenames, so they are case-sensitive. */ - store->folders = g_hash_table_new(g_str_hash, g_str_equal); -} - CamelType camel_mh_store_get_type(void) { static CamelType camel_mh_store_type = CAMEL_INVALID_TYPE; @@ -72,7 +64,7 @@ CamelType camel_mh_store_get_type(void) sizeof(CamelMhStoreClass), (CamelObjectClassInitFunc) camel_mh_store_class_init, NULL, - (CamelObjectInitFunc) camel_mh_store_init, + NULL, NULL); } diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c index 8edf05e099..c1e8fb81e8 100644 --- a/camel/providers/nntp/camel-nntp-store.c +++ b/camel/providers/nntp/camel-nntp-store.c @@ -543,12 +543,6 @@ nntp_store_get_folder_info (CamelStore *store, const char *top, } } -static char * -nntp_store_get_root_folder_name (CamelStore *store, CamelException *ex) -{ - return g_strdup (""); -} - static gboolean nntp_store_folder_subscribed (CamelStore *store, const char *folder_name) { @@ -601,7 +595,6 @@ camel_nntp_store_class_init (CamelNNTPStoreClass *camel_nntp_store_class) camel_service_class->get_name = nntp_store_get_name; camel_store_class->get_folder = nntp_store_get_folder; - camel_store_class->get_root_folder_name = nntp_store_get_root_folder_name; camel_store_class->get_folder_info = nntp_store_get_folder_info; camel_store_class->free_folder_info = camel_store_free_folder_info_full; diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c index f0338a8584..fac9cae931 100644 --- a/camel/providers/pop3/camel-pop3-store.c +++ b/camel/providers/pop3/camel-pop3-store.c @@ -76,9 +76,6 @@ static GList *query_auth_types (CamelService *service, gboolean connect, CamelEx static CamelFolder *get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex); -static char *get_folder_name (CamelStore *store, const char *folder_name, - CamelException *ex); -static char *get_root_folder_name (CamelStore *store, CamelException *ex); static int pop3_get_response (CamelPop3Store *store, char **ret, CamelException *ex); @@ -90,9 +87,6 @@ camel_pop3_store_class_init (CamelPop3StoreClass *camel_pop3_store_class) CAMEL_SERVICE_CLASS (camel_pop3_store_class); CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_pop3_store_class); - /*CamelRemoteStoreClass *camel_remote_store_class = - * CAMEL_STORE_CLASS (camel_pop3_store_class); - */ parent_class = CAMEL_REMOTE_STORE_CLASS(camel_type_get_global_classfuncs (camel_remote_store_get_type ())); @@ -103,8 +97,6 @@ camel_pop3_store_class_init (CamelPop3StoreClass *camel_pop3_store_class) camel_service_class->disconnect = pop3_disconnect; camel_store_class->get_folder = get_folder; - camel_store_class->get_folder_name = get_folder_name; - camel_store_class->get_root_folder_name = get_root_folder_name; } @@ -533,26 +525,12 @@ static CamelFolder * get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex) { - return camel_pop3_folder_new (store, ex); -} - -static char * -get_folder_name (CamelStore *store, const char *folder_name, - CamelException *ex) -{ - if (!g_strcasecmp (folder_name, "inbox")) - return g_strdup ("inbox"); - else { + if (g_strcasecmp (folder_name, "inbox") != 0) { camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID, _("No such folder `%s'."), folder_name); return NULL; } -} - -static char * -get_root_folder_name (CamelStore *store, CamelException *ex) -{ - return g_strdup ("inbox"); + return camel_pop3_folder_new (store, ex); } diff --git a/camel/providers/vee/camel-vee-store.c b/camel/providers/vee/camel-vee-store.c index 7acc127542..b39707e1a0 100644 --- a/camel/providers/vee/camel-vee-store.c +++ b/camel/providers/vee/camel-vee-store.c @@ -23,7 +23,6 @@ #include "camel-vee-folder.h" static CamelFolder *vee_get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex); -static char *vee_get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex); struct _CamelVeeStorePrivate { }; @@ -63,7 +62,6 @@ camel_vee_store_class_init (CamelVeeStoreClass *klass) /* virtual method overload */ store_class->get_folder = vee_get_folder; - store_class->get_folder_name = vee_get_folder_name; } static void @@ -93,10 +91,3 @@ vee_get_folder (CamelStore *store, const char *folder_name, guint32 flags, Camel { return camel_vee_folder_new (store, folder_name, ex); } - -static char * -vee_get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex) -{ - return g_strdup(folder_name); -} - |