diff options
Diffstat (limited to 'camel/camel-vee-store.c')
-rw-r--r-- | camel/camel-vee-store.c | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/camel/camel-vee-store.c b/camel/camel-vee-store.c index 38d535dbee..5a9d79d8b2 100644 --- a/camel/camel-vee-store.c +++ b/camel/camel-vee-store.c @@ -22,17 +22,21 @@ #include "camel-vee-store.h" #include "camel-vee-folder.h" +#include <string.h> + static CamelFolder *vee_get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex); static void vee_init_trash (CamelStore *store); static CamelFolder *vee_get_trash (CamelStore *store, CamelException *ex); struct _CamelVeeStorePrivate { + CamelFolderInfo *folder_info; }; #define _PRIVATE(o) (((CamelVeeStore *)(o))->priv) static void camel_vee_store_class_init (CamelVeeStoreClass *klass); static void camel_vee_store_init (CamelVeeStore *obj); +static void camel_vee_store_finalise (CamelObject *obj); static CamelStoreClass *camel_vee_store_parent; @@ -48,14 +52,13 @@ camel_vee_store_get_type (void) (CamelObjectClassInitFunc) camel_vee_store_class_init, NULL, (CamelObjectInitFunc) camel_vee_store_init, - NULL); + (CamelObjectFinalizeFunc) camel_vee_store_finalise); } return type; } static void - camel_vee_store_class_init (CamelVeeStoreClass *klass) { CamelStoreClass *store_class = (CamelStoreClass *) klass; @@ -76,6 +79,14 @@ camel_vee_store_init (CamelVeeStore *obj) p = _PRIVATE(obj) = g_malloc0(sizeof(*p)); } +static void +camel_vee_store_finalise (CamelObject *obj) +{ + CamelVeeStore *vs = (CamelVeeStore *)obj; + + g_free(vs->priv); +} + /** * camel_vee_store_new: * @@ -86,14 +97,33 @@ camel_vee_store_init (CamelVeeStore *obj) CamelVeeStore * camel_vee_store_new (void) { - CamelVeeStore *new = CAMEL_VEE_STORE ( camel_object_new (camel_vee_store_get_type ())); + CamelVeeStore *new = CAMEL_VEE_STORE(camel_object_new(camel_vee_store_get_type ())); return new; } static CamelFolder * vee_get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex) { - return camel_vee_folder_new(store, folder_name, flags, ex); + CamelFolderInfo *fi; + CamelVeeFolder *vf; + char *name; + + vf = (CamelVeeFolder *)camel_vee_folder_new(store, folder_name, flags); + if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) { + fi = g_malloc0(sizeof(*fi)); + fi->full_name = g_strdup(vf->vname); + name = strrchr(vf->vname, '/'); + if (name == NULL) + name = vf->vname; + fi->name = g_strdup(name); + fi->url = g_strdup_printf("vfolder:%s", vf->vname); + fi->unread_message_count = -1; + + camel_object_trigger_event(CAMEL_OBJECT(store), "folder_created", fi); + camel_folder_info_free(fi); + } + + return (CamelFolder *)vf; } static void |