switch (item->stype) {
case F_INBOX:
- name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
- !strcmp2(item->name, INBOX_DIR) ? _("Inbox") :
+ name = g_strdup(!strcmp2(item->name, INBOX_DIR) ? _("Inbox") :
item->name);
break;
case F_OUTBOX:
- name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
- !strcmp2(item->name, OUTBOX_DIR) ? _("Sent") :
+ name = g_strdup(!strcmp2(item->name, OUTBOX_DIR) ? _("Sent") :
item->name);
break;
case F_QUEUE:
- name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
- !strcmp2(item->name, QUEUE_DIR) ? _("Queue") :
+ name = g_strdup(!strcmp2(item->name, QUEUE_DIR) ? _("Queue") :
item->name);
break;
case F_TRASH:
- name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
- !strcmp2(item->name, TRASH_DIR) ? _("Trash") :
+ name = g_strdup(!strcmp2(item->name, TRASH_DIR) ? _("Trash") :
item->name);
break;
case F_DRAFT:
- name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
- !strcmp2(item->name, DRAFT_DIR) ? _("Drafts") :
+ name = g_strdup(!strcmp2(item->name, DRAFT_DIR) ? _("Drafts") :
item->name);
break;
default:
static void copy_msginfo_flags(MsgInfo *source, MsgInfo *dest)
{
- MsgPermFlags newflags = 0;
+ MsgPermFlags perm_flags = 0;
+ MsgTmpFlags tmp_flags = 0;
/* create new flags */
if (source != NULL) {
/* copy original flags */
- newflags = source->flags.perm_flags;
+ perm_flags = source->flags.perm_flags;
+ tmp_flags = source->flags.tmp_flags;
} else {
- newflags = dest->flags.perm_flags;
+ perm_flags = dest->flags.perm_flags;
+ tmp_flags = dest->flags.tmp_flags;
}
/* remove new, unread and deleted in special folders */
dest->folder->stype == F_QUEUE ||
dest->folder->stype == F_DRAFT ||
dest->folder->stype == F_TRASH)
- newflags &= ~(MSG_NEW | MSG_UNREAD | MSG_DELETED);
+ perm_flags &= ~(MSG_NEW | MSG_UNREAD | MSG_DELETED);
/* set ignore flag of ignored parent exists */
if (procmsg_msg_has_flagged_parent(dest, MSG_IGNORE_THREAD))
- newflags |= MSG_IGNORE_THREAD;
+ perm_flags |= MSG_IGNORE_THREAD;
+
+ /* Unset tmp flags that should not be copied */
+ tmp_flags &= ~(MSG_MOVE | MSG_COPY);
+
/* unset flags that are set but should not */
- procmsg_msginfo_unset_flags(dest, dest->flags.perm_flags & ~newflags, ~0);
+ procmsg_msginfo_unset_flags(dest,
+ dest->flags.perm_flags & ~perm_flags,
+ dest->flags.tmp_flags & ~tmp_flags);
/* set new flags */
- procmsg_msginfo_set_flags(dest, ~dest->flags.perm_flags & newflags, 0);
+ procmsg_msginfo_set_flags(dest,
+ ~dest->flags.perm_flags & perm_flags,
+ ~dest->flags.tmp_flags & tmp_flags);
folder_item_update(dest->folder, F_ITEM_UPDATE_MSGCNT | F_ITEM_UPDATE_CONTENT);
}
*/
/* CLAWS: temporary local folder for filtering */
-static Folder *processing_folder;
+#define TEMP_FOLDER "TEMP_FOLDER"
+#define PROCESSING_FOLDER_ITEM "processing"
+
static FolderItem *processing_folder_item;
static void folder_create_processing_folder(void)
{
-#define PROCESSING_FOLDER ".processing"
- Folder *tmpparent;
+ Folder *processing_folder;
gchar *tmpname;
- tmpparent = folder_get_default_folder();
- g_assert(tmpparent);
- debug_print("tmpparentroot %s\n", LOCAL_FOLDER(tmpparent)->rootpath);
- if (LOCAL_FOLDER(tmpparent)->rootpath[0] == '/')
- tmpname = g_strconcat(LOCAL_FOLDER(tmpparent)->rootpath,
- G_DIR_SEPARATOR_S, PROCESSING_FOLDER,
+ if ((processing_folder = folder_find_from_name(TEMP_FOLDER, mh_get_class())) == NULL) {
+ gchar *tmppath;
+
+ tmppath =
+ g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ "tempfolder", NULL);
+ processing_folder =
+ folder_new(mh_get_class(), TEMP_FOLDER, tmppath);
+ g_free(tmppath);
+ }
+ g_assert(processing_folder != NULL);
+
+ debug_print("tmpparentroot %s\n", LOCAL_FOLDER(processing_folder)->rootpath);
+ if (LOCAL_FOLDER(processing_folder)->rootpath[0] == '/')
+ tmpname = g_strconcat(LOCAL_FOLDER(processing_folder)->rootpath,
+ G_DIR_SEPARATOR_S, PROCESSING_FOLDER_ITEM,
NULL);
else
tmpname = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S,
- LOCAL_FOLDER(tmpparent)->rootpath,
- G_DIR_SEPARATOR_S, PROCESSING_FOLDER,
+ LOCAL_FOLDER(processing_folder)->rootpath,
+ G_DIR_SEPARATOR_S, PROCESSING_FOLDER_ITEM,
NULL);
- processing_folder = folder_new(mh_get_class(), "PROCESSING", LOCAL_FOLDER(tmpparent)->rootpath);
- g_assert(processing_folder);
-
if (!is_dir_exist(tmpname)) {
debug_print("*TMP* creating %s\n", tmpname);
processing_folder_item = processing_folder->class->create_folder(processing_folder,
processing_folder->node->data,
- PROCESSING_FOLDER);
- g_assert(processing_folder_item);
- }
- else {
+ PROCESSING_FOLDER_ITEM);
+ } else {
debug_print("*TMP* already created\n");
processing_folder_item = folder_item_new(processing_folder, ".processing", ".processing");
g_assert(processing_folder_item);
folder_item_append(processing_folder->node->data, processing_folder_item);
}
+ g_assert(processing_folder_item != NULL);
g_free(tmpname);
}