0.9.3claws68
[claws.git] / src / mh.c
index 5db3c3cce7d9d733579177460f2e2f101284f983..b7b95da0555be206bf5cf022ba0b23ff6d1bf1f5 100644 (file)
--- a/src/mh.c
+++ b/src/mh.c
@@ -53,12 +53,10 @@ static MsgInfo *mh_get_msginfo(Folder * folder,
                               FolderItem * item, gint num);
 static gint mh_add_msg(Folder * folder,
                       FolderItem * dest,
-                      const gchar * file, gboolean remove_source);
-gint     mh_add_msgs           (Folder         *folder,
-                                FolderItem     *dest,
-                                GSList         *file_list,
-                                gboolean        remove_source,
-                                gint           *first);
+                      const gchar * file,
+                      MsgFlags * flags);
+static gint mh_add_msgs(Folder * folder,
+                FolderItem * dest, GSList * file_list, GRelation *relation);
 static gint mh_copy_msg(Folder * folder,
                        FolderItem * dest, MsgInfo * msginfo);
 static gint mh_remove_msg(Folder * folder, FolderItem * item, gint num);
@@ -105,6 +103,7 @@ FolderClass mh_class =
        mh_create_folder,
        mh_rename_folder,
        mh_remove_folder,
+       NULL,
        mh_get_num_list,
        NULL,
        NULL,
@@ -118,6 +117,7 @@ FolderClass mh_class =
        mh_add_msg,
        mh_add_msgs,
        mh_copy_msg,
+       NULL,
        mh_remove_msg,
        mh_remove_all_msg,
        mh_is_msg_changed,
@@ -311,26 +311,30 @@ gchar *mh_get_new_msg_filename(FolderItem *dest)
        procmsg_write_flags(&newmsginfo, fp); \
 }
 
-gint mh_add_msg(Folder *folder, FolderItem *dest, const gchar *file,
-               gboolean remove_source)
+gint mh_add_msg(Folder *folder, FolderItem *dest, const gchar *file, MsgFlags *flags)
 {
-        GSList file_list; 
-  
-        g_return_val_if_fail(file != NULL, -1); 
-  
-        file_list.data = (gpointer) file; 
-        file_list.next = NULL; 
-  
-        return mh_add_msgs(folder, dest, &file_list, remove_source, NULL); 
+       gint ret;
+       GSList file_list;
+       MsgFileInfo fileinfo;
+
+       g_return_val_if_fail(file != NULL, -1);
+
+       fileinfo.msginfo = NULL;
+       fileinfo.file = (gchar *)file;
+       fileinfo.flags = flags;
+       file_list.data = &fileinfo;
+       file_list.next = NULL;
+
+        ret = mh_add_msgs(folder, dest, &file_list, NULL);
+       return ret;
 } 
  
 gint mh_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list, 
-                gboolean remove_source, gint *first) 
+                 GRelation *relation)
 { 
        gchar *destfile;
-        GSList *cur; 
-        gchar *file; 
-        gint first_ = 0; 
+       GSList *cur;
+       MsgFileInfo *fileinfo;
 
        g_return_val_if_fail(dest != NULL, -1);
        g_return_val_if_fail(file_list != NULL, -1);
@@ -340,39 +344,27 @@ gint mh_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list,
                if (dest->last_num < 0) return -1;
        }
 
-        for (cur = file_list; cur != NULL; cur = cur->next) { 
-                file = (gchar *)cur->data; 
-
-                destfile = mh_get_new_msg_filename(dest); 
-                if (destfile == NULL) return -1; 
-                if (first_ == 0 || first_ > dest->last_num + 1) 
-                        first_ = dest->last_num + 1; 
-  
-                if (link(file, destfile) < 0) { 
-                        if (copy_file(file, destfile, TRUE) < 0) { 
-                                g_warning(_("can't copy message %s to %s\n"), 
-                                          file, destfile); 
-                                g_free(destfile); 
-                                return -1; 
-                        } 
-               }
+       for (cur = file_list; cur != NULL; cur = cur->next) {
+               fileinfo = (MsgFileInfo *)cur->data;
 
+               destfile = mh_get_new_msg_filename(dest);
+               if (destfile == NULL) return -1;
+
+               if (link(fileinfo->file, destfile) < 0) {
+                       if (copy_file(fileinfo->file, destfile, TRUE) < 0) {
+                               g_warning(_("can't copy message %s to %s\n"),
+                                         fileinfo->file, destfile);
+                               g_free(destfile);
+                               return -1;
+                       }
+               }
+               if (relation != NULL)
+                       g_relation_insert(relation, fileinfo, GINT_TO_POINTER(dest->last_num + 1));
                g_free(destfile);
                dest->last_num++;
        }
 
-       if (first)
-               *first = first_;
-
-       if (remove_source) {
-               for (cur = file_list; cur != NULL; cur = cur->next) {
-                       file = (gchar *)cur->data;
-                       if (unlink(file) < 0)
-                               FILE_OP_ERROR(file, "unlink");
-               }
-       }
-
-       return dest->last_num; 
+       return dest->last_num;
 }
 
 gint mh_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)