0.8.11claws3
authorChristoph Hohmann <reboot@gmx.ch>
Wed, 12 Mar 2003 22:23:54 +0000 (22:23 +0000)
committerChristoph Hohmann <reboot@gmx.ch>
Wed, 12 Mar 2003 22:23:54 +0000 (22:23 +0000)
* src/folder.[ch]
* src/imap.[ch]
* src/main.c
* src/mbox_folder.[ch]
* src/mh.[ch]
* src/news.[ch]
        o create a list of known folder classes in the folder system
        o use folder class id strings for folder item identifiers

13 files changed:
ChangeLog.claws
configure.ac
src/folder.c
src/folder.h
src/imap.c
src/imap.h
src/main.c
src/mbox_folder.c
src/mbox_folder.h
src/mh.c
src/mh.h
src/news.c
src/news.h

index ae96282be5c85de19639291863de3c3e8b3b980d..65872045c878277e17ce26f13a63b5d5e969a93a 100644 (file)
@@ -1,3 +1,14 @@
+2003-03-12 [christoph] 0.8.11claws3
+
+       * src/folder.[ch]
+       * src/imap.[ch]
+       * src/main.c
+       * src/mbox_folder.[ch]
+       * src/mh.[ch]
+       * src/news.[ch]
+               o create a list of known folder classes in the folder system
+               o use folder class id strings for folder item identifiers
+
 2003-03-12 [christoph] 0.8.11claws2
 
        * src/imap.c
index 5e7884c551c95c2ad40b8e6c2e32e4d31b3996d1..65ebcce8e81bd3c70bac0f4780aced68db030e46 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=8
 MICRO_VERSION=11
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws2
+EXTRA_VERSION=claws3
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index 40f5916ef1f0c3f544e84caad42f04f259a8482a..a5abed05290f80bc6939e30fba74121621496e44 100644 (file)
@@ -74,6 +74,27 @@ static gboolean persist_prefs_free   (gpointer key, gpointer val, gpointer data);
 void folder_item_read_cache            (FolderItem *item);
 void folder_item_free_cache            (FolderItem *item);
 
+static GSList *classlist;
+
+void folder_system_init()
+{
+       folder_register_class(mh_get_class());
+       folder_register_class(imap_get_class());
+       folder_register_class(news_get_class());
+       folder_register_class(mbox_get_class());
+}
+
+GSList *folder_get_class_list()
+{
+       return classlist;
+}
+
+void folder_register_class(FolderClass *class)
+{
+       debug_print("registering folder class %s\n", class->idstr);
+       classlist = g_slist_append(classlist, class);
+}
+
 Folder *folder_new(FolderType type, const gchar *name, const gchar *path)
 {
        Folder *folder = NULL;
@@ -540,14 +561,14 @@ Folder *folder_find_from_path(const gchar *path)
        return NULL;
 }
 
-Folder *folder_find_from_name(const gchar *name, FolderType type)
+Folder *folder_find_from_name(const gchar *name, FolderClass *class)
 {
        GList *list;
        Folder *folder;
 
        for (list = folder_list; list != NULL; list = list->next) {
                folder = list->data;
-               if (FOLDER_TYPE(folder) == type && strcmp2(name, folder->name) == 0)
+               if (folder->class == class && strcmp2(name, folder->name) == 0)
                        return folder;
        }
 
@@ -583,51 +604,28 @@ FolderItem *folder_find_item_from_path(const gchar *path)
        return d[1];
 }
 
-static const struct {
-       gchar *str;
-       FolderType type;
-} type_str_table[] = {
-       {"#mh"     , F_MH},
-       {"#mbox"   , F_MBOX},
-       {"#maildir", F_MAILDIR},
-       {"#imap"   , F_IMAP},
-       {"#news"   , F_NEWS}
-};
-
-static gchar *folder_get_type_string(FolderType type)
+static FolderClass *folder_get_class_from_string(const gchar *str)
 {
-       gint i;
+       GSList *classlist;
 
-       for (i = 0; i < sizeof(type_str_table) / sizeof(type_str_table[0]);
-            i++) {
-               if (type_str_table[i].type == type)
-                       return type_str_table[i].str;
+       classlist = folder_get_class_list();
+       for (; classlist != NULL; classlist = g_slist_next(classlist)) {
+               FolderClass *class = (FolderClass *) classlist->data;
+               if (g_strcasecmp(class->idstr, &str[1]) == 0)
+                       return class;
        }
 
        return NULL;
 }
 
-static FolderType folder_get_type_from_string(const gchar *str)
-{
-       gint i;
-
-       for (i = 0; i < sizeof(type_str_table) / sizeof(type_str_table[0]);
-            i++) {
-               if (g_strcasecmp(type_str_table[i].str, str) == 0)
-                       return type_str_table[i].type;
-       }
-
-       return F_UNKNOWN;
-}
-
 gchar *folder_get_identifier(Folder *folder)
 {
        gchar *type_str;
 
        g_return_val_if_fail(folder != NULL, NULL);
 
-       type_str = folder_get_type_string(FOLDER_TYPE(folder));
-       return g_strconcat(type_str, "/", folder->name, NULL);
+       type_str = folder->class->idstr;
+       return g_strconcat("#", type_str, "/", folder->name, NULL);
 }
 
 gchar *folder_item_get_identifier(FolderItem *item)
@@ -653,7 +651,7 @@ FolderItem *folder_find_item_from_identifier(const gchar *identifier)
        gchar *p;
        gchar *name;
        gchar *path;
-       FolderType type;
+       FolderClass *class;
 
        g_return_val_if_fail(identifier != NULL, NULL);
 
@@ -667,8 +665,8 @@ FolderItem *folder_find_item_from_identifier(const gchar *identifier)
                return folder_find_item_from_path(identifier);
        *p = '\0';
        p++;
-       type = folder_get_type_from_string(str);
-       if (type == F_UNKNOWN)
+       class = folder_get_class_from_string(str);
+       if (class == NULL)
                return folder_find_item_from_path(identifier);
 
        name = p;
@@ -678,7 +676,7 @@ FolderItem *folder_find_item_from_identifier(const gchar *identifier)
        *p = '\0';
        p++;
 
-       folder = folder_find_from_name(name, type);
+       folder = folder_find_from_name(name, class);
        if (!folder)
                return folder_find_item_from_path(identifier);
 
index ba8369b790ccdbc4728305a8bd3937aae1290c9f..bdde535c22891c8f91db7c4d033023efa6c2c006 100644 (file)
@@ -311,6 +311,8 @@ struct _FolderItemUpdateData
        FolderItemUpdateFlags    update_flags;
 };
 
+void       folder_system_init          ();
+void       folder_register_class       (FolderClass    *class);
 Folder     *folder_new                 (FolderType      type,
                                         const gchar    *name,
                                         const gchar    *path);
@@ -357,7 +359,7 @@ void   folder_count_total_msgs      (guint          *new,
 
 Folder     *folder_find_from_path              (const gchar    *path);
 Folder     *folder_find_from_name              (const gchar    *name,
-                                                FolderType      type);
+                                                FolderClass    *class);
 FolderItem *folder_find_item_from_path         (const gchar    *path);
 gchar      *folder_get_identifier              (Folder         *folder);
 gchar      *folder_item_get_identifier         (FolderItem     *item);
index d77b3f7d648b19c3cd7cd4b81d5055f4d61a262a..4a72d8817927569266dcd350e0ab9731127ff60c 100644 (file)
@@ -328,6 +328,11 @@ FolderClass imap_class =
        imap_check_msgnum_validity,
 };
 
+FolderClass *imap_get_class()
+{
+       return &imap_class;
+}
+
 Folder *imap_folder_new(const gchar *name, const gchar *path)
 {
        Folder *folder;
index 4229f296be36f1056680871c92cb1f31bdb0fff8..f8c0412da1499809e9ea7955d1e6e6c1bddad46a 100644 (file)
@@ -95,6 +95,7 @@ typedef enum
 #define IMAP_IS_DELETED(flags) ((flags & IMAP_FLAG_DELETED) != 0)
 #define IMAP_IS_DRAFT(flags)   ((flags & IMAP_FLAG_DRAFT) != 0)
 
+FolderClass *imap_get_class            ();
 Folder *imap_folder_new                (const gchar    *name,
                                         const gchar    *path);
 void    imap_folder_destroy            (Folder         *folder);
index a2465c98492a064d2fbfdfd8dcad52e66287b514..b0e127f9740c38e5a00a42874b6b3d64f4f10ba2 100644 (file)
@@ -242,6 +242,7 @@ int main(int argc, char *argv[])
 
        set_log_file(RC_DIR G_DIR_SEPARATOR_S "sylpheed.log");
 
+       folder_system_init();
        prefs_common_init();
        prefs_common_read_config();
 
index 3864fddc3ad17346e5e87a521eb574f54da9a745..6ba80369cc5889a494b3f3e10ce50ec29206f9ed 100644 (file)
@@ -84,6 +84,11 @@ FolderClass mbox_class =
        mbox_check_msgnum_validity,
 };
 
+FolderClass *mbox_get_class()
+{
+       return &mbox_class;
+}
+
 Folder *mbox_folder_new(const gchar *name, const gchar *path)
 {
        Folder *folder;
index f401c2083a81b74b7e954b6af1301e6b0c0e9f10..7f2a54a9016d46b254a33d151e4f0aaf86015e23 100644 (file)
@@ -40,6 +40,7 @@ struct _MBOXFolder
        LocalFolder lfolder;
 };
 
+FolderClass *mbox_get_class    ();
 Folder *mbox_folder_new        (const gchar    *name,
                                 const gchar    *path);
 void     mbox_folder_destroy   (Folder         *folder);
index eb83b9b98721830b5de5ee1700c81e93349f6f2b..3c0cf049c28c7fabf7bf2e0deaa962d884a3dfc7 100644 (file)
--- a/src/mh.c
+++ b/src/mh.c
@@ -142,6 +142,11 @@ FolderClass mh_class =
        NULL,
 };
 
+FolderClass *mh_get_class()
+{
+       return &mh_class;
+}
+
 Folder *mh_folder_new(const gchar *name, const gchar *path)
 {
        Folder *folder;
index 8f5cdb9f7ed74c78f4db0759d7775d39809bf46a..7f03f50529754a08bb11b5055cc0e95a307905a7 100644 (file)
--- a/src/mh.h
+++ b/src/mh.h
@@ -34,6 +34,7 @@ struct _MHFolder
        LocalFolder lfolder;
 };
 
+FolderClass *mh_get_class      ();
 Folder *mh_folder_new          (const gchar    *name,
                                 const gchar    *path);
 void     mh_folder_destroy     (Folder         *folder);
index 7ec2929c4a5bc83ea32a8d4b40bc52964472306b..eca20fca8b5d7e259fa1206f44b1d8f57b8b9279 100644 (file)
@@ -140,6 +140,11 @@ FolderClass news_class =
        NULL,
 };
 
+FolderClass *news_get_class()
+{
+       return &news_class;
+}
+
 Folder *news_folder_new(const gchar *name, const gchar *path)
 {
        Folder *folder;
index c3c2884947e5ce9cb884317e9e644df6d3aaf91b..1b0b2b800e675ad7a8d43bf989b4e2077a0c52ef 100644 (file)
@@ -59,6 +59,7 @@ struct _NewsGroupInfo
        gchar type;
 };
 
+FolderClass *news_get_class            ();
 Folder *news_folder_new                (const gchar    *name,
                                         const gchar    *folder);
 void    news_folder_destroy            (Folder         *folder);