implementation of mbox folder with unique messages numbers
[claws.git] / src / folder.c
index 21689241000b454daee7b710f76eebb5b70ed4f5..c027d1e96515fe6625eefec3a0b1849ae83452fd 100644 (file)
@@ -37,7 +37,7 @@
 #include "imap.h"
 #include "news.h"
 #include "mh.h"
-#include "mbox_folder.h"
+#include "mailmbox_folder.h"
 #include "utils.h"
 #include "xml.h"
 #include "codeconv.h"
@@ -81,7 +81,7 @@ void folder_system_init(void)
        folder_register_class(mh_get_class());
        folder_register_class(imap_get_class());
        folder_register_class(news_get_class());
-       folder_register_class(mbox_get_class());
+       folder_register_class(mailmbox_get_class());
 }
 
 GSList *folder_get_class_list(void)
@@ -700,7 +700,8 @@ Folder *folder_find_from_path(const gchar *path)
 
        for (list = folder_list; list != NULL; list = list->next) {
                folder = list->data;
-               if ((FOLDER_TYPE(folder) == F_MH || FOLDER_TYPE(folder) == F_MBOX) &&
+               if ((FOLDER_TYPE(folder) == F_MH || 
+                    FOLDER_TYPE(folder) == F_MBOX) &&
                    !path_cmp(LOCAL_FOLDER(folder)->rootpath, path))
                        return folder;
        }
@@ -715,7 +716,8 @@ Folder *folder_find_from_name(const gchar *name, FolderClass *klass)
 
        for (list = folder_list; list != NULL; list = list->next) {
                folder = list->data;
-               if (folder->klass == klass && strcmp2(name, folder->name) == 0)
+               if (folder->klass == klass && 
+                   strcmp2(name, folder->name) == 0)
                        return folder;
        }
 
@@ -1573,6 +1575,7 @@ MsgInfo *folder_item_get_msginfo_by_msgid(FolderItem *item, const gchar *msgid)
        MsgInfo *msginfo;
        
        g_return_val_if_fail(item != NULL, NULL);
+       g_return_val_if_fail(msgid != NULL, NULL);
        
        folder = item->folder;
        if (!item->cache)
@@ -2031,14 +2034,20 @@ static gint do_copy_msgs(FolderItem *dest, GSList *msglist, gboolean remove_sour
                        MsgInfo *newmsginfo;
 
                        if (folderscan) {
-                               newmsginfo = folder_item_get_msginfo_by_msgid(dest, msginfo->msgid);
-                               copy_msginfo_flags(msginfo, newmsginfo);
-                               num = newmsginfo->msgnum;
-                               procmsg_msginfo_free(newmsginfo);                               
+                               if (msginfo->msgid != NULL) {
+                                       newmsginfo = folder_item_get_msginfo_by_msgid(dest, msginfo->msgid);
+                                       if (newmsginfo != NULL) {
+                                               copy_msginfo_flags(msginfo, newmsginfo);
+                                               num = newmsginfo->msgnum;
+                                               procmsg_msginfo_free(newmsginfo);
+                                       }
+                               }
                        } else {
                                newmsginfo = folder->klass->get_msginfo(folder, dest, num);
-                               add_msginfo_to_cache(dest, newmsginfo, msginfo);
-                               procmsg_msginfo_free(newmsginfo);
+                               if (newmsginfo != NULL) {
+                                       add_msginfo_to_cache(dest, newmsginfo, msginfo);
+                                       procmsg_msginfo_free(newmsginfo);
+                               }
                        }
 
                        if (num > lastnum)
@@ -2549,7 +2558,9 @@ static void folder_write_list_recursive(GNode *node, gpointer data)
                fprintf(fp, "<folder type=\"%s\"", folder->klass->idstr);
                if (folder->name)
                        PUT_ESCAPE_STR(fp, "name", folder->name);
-               if (FOLDER_TYPE(folder) == F_MH || FOLDER_TYPE(folder) == F_MBOX || FOLDER_TYPE(folder) == F_MAILDIR)
+               if (FOLDER_TYPE(folder) == F_MH || 
+                   FOLDER_TYPE(folder) == F_MBOX || 
+                   FOLDER_TYPE(folder) == F_MAILDIR)
                        PUT_ESCAPE_STR(fp, "path",
                                       LOCAL_FOLDER(folder)->rootpath);
                if (item->collapsed && node->children)