diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2011-06-08 09:19:53 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2011-06-08 09:19:53 +0000 |
commit | 90254cf37ace4c6cfbf77051e3e3d5e1dea75781 (patch) | |
tree | 417b46d2bf85a475a5f8228128f3e42874ce0995 /libsylph/folder.c | |
parent | 1795b4e93920d0ab38ecc8011c8c0756e18df8dd (diff) |
remove queue headers when moving messages from a queue folder (fixes Debian BTS #493546).
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2888 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph/folder.c')
-rw-r--r-- | libsylph/folder.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/libsylph/folder.c b/libsylph/folder.c index 33d0356e..3d29740f 100644 --- a/libsylph/folder.c +++ b/libsylph/folder.c @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2010 Hiroyuki Yamamoto + * Copyright (C) 1999-2011 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -1319,6 +1319,10 @@ gint folder_item_add_msgs_msginfo(FolderItem *dest, GSList *msglist, remove_source, first); } +#define IS_FROM_QUEUE(m, d) \ + (m->folder && m->folder->stype == F_QUEUE && \ + MSG_IS_QUEUED(m->flags) && d->stype != F_QUEUE) + gint folder_item_move_msg(FolderItem *dest, MsgInfo *msginfo) { Folder *folder; @@ -1329,12 +1333,21 @@ gint folder_item_move_msg(FolderItem *dest, MsgInfo *msginfo) folder = dest->folder; + if (IS_FROM_QUEUE(msginfo, dest)) { + GSList msglist; + + msglist.data = msginfo; + msglist.next = NULL; + return procmsg_add_messages_from_queue(dest, &msglist, TRUE); + } + return folder->klass->move_msg(folder, dest, msginfo); } gint folder_item_move_msgs(FolderItem *dest, GSList *msglist) { Folder *folder; + MsgInfo *msginfo; g_return_val_if_fail(dest != NULL, -1); g_return_val_if_fail(msglist != NULL, -1); @@ -1342,6 +1355,10 @@ gint folder_item_move_msgs(FolderItem *dest, GSList *msglist) folder = dest->folder; + msginfo = (MsgInfo *)msglist->data; + if (IS_FROM_QUEUE(msginfo, dest)) + return procmsg_add_messages_from_queue(dest, msglist, TRUE); + return folder->klass->move_msgs(folder, dest, msglist); } @@ -1355,12 +1372,21 @@ gint folder_item_copy_msg(FolderItem *dest, MsgInfo *msginfo) folder = dest->folder; + if (IS_FROM_QUEUE(msginfo, dest)) { + GSList msglist; + + msglist.data = msginfo; + msglist.next = NULL; + return procmsg_add_messages_from_queue(dest, &msglist, FALSE); + } + return folder->klass->copy_msg(folder, dest, msginfo); } gint folder_item_copy_msgs(FolderItem *dest, GSList *msglist) { Folder *folder; + MsgInfo *msginfo; g_return_val_if_fail(dest != NULL, -1); g_return_val_if_fail(msglist != NULL, -1); @@ -1368,9 +1394,15 @@ gint folder_item_copy_msgs(FolderItem *dest, GSList *msglist) folder = dest->folder; + msginfo = (MsgInfo *)msglist->data; + if (IS_FROM_QUEUE(msginfo, dest)) + return procmsg_add_messages_from_queue(dest, msglist, FALSE); + return folder->klass->copy_msgs(folder, dest, msglist); } +#undef IS_FROM_QUEUE + gint folder_item_remove_msg(FolderItem *item, MsgInfo *msginfo) { Folder *folder; |