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);
mh_create_folder,
mh_rename_folder,
mh_remove_folder,
+ NULL,
mh_get_num_list,
NULL,
NULL,
mh_add_msg,
mh_add_msgs,
mh_copy_msg,
+ NULL,
mh_remove_msg,
mh_remove_all_msg,
mh_is_msg_changed,
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);
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)