aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/local
diff options
context:
space:
mode:
Diffstat (limited to 'camel/providers/local')
-rw-r--r--camel/providers/local/camel-local-store.c72
-rw-r--r--camel/providers/local/camel-maildir-store.c10
-rw-r--r--camel/providers/local/camel-mbox-store.c11
-rw-r--r--camel/providers/local/camel-mh-store.c10
4 files changed, 31 insertions, 72 deletions
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);
}