2006-08-29 [colin] 2.4.0cvs107
[claws.git] / src / folder.c
index 654488e0995a631d74e8099c48633ad5e821db09..cc2e53d65102aed1a2c0899afcf158d0cc21462d 100644 (file)
@@ -1346,6 +1346,8 @@ FolderItem *folder_get_default_inbox(void)
                        continue;
                if (folder->inbox == NULL)
                        continue;
+               if (folder->klass->type == F_UNKNOWN)
+                       continue;
 
                return folder->inbox;
        }
@@ -1364,6 +1366,8 @@ FolderItem *folder_get_default_outbox(void)
                        continue;
                if (folder->outbox == NULL)
                        continue;
+               if (folder->klass->type == F_UNKNOWN)
+                       continue;
 
                return folder->outbox;
        }
@@ -1382,6 +1386,8 @@ FolderItem *folder_get_default_draft(void)
                        continue;
                if (folder->draft == NULL)
                        continue;
+               if (folder->klass->type == F_UNKNOWN)
+                       continue;
 
                return folder->draft;
        }
@@ -1400,6 +1406,8 @@ FolderItem *folder_get_default_queue(void)
                        continue;
                if (folder->queue == NULL)
                        continue;
+               if (folder->klass->type == F_UNKNOWN)
+                       continue;
 
                return folder->queue;
        }
@@ -1418,6 +1426,8 @@ FolderItem *folder_get_default_trash(void)
                        continue;
                if (folder->trash == NULL)
                        continue;
+               if (folder->klass->type == F_UNKNOWN)
+                       continue;
 
                return folder->trash;
        }
@@ -1942,7 +1952,7 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
                            (item->stype == F_INBOX) &&
                            (item->folder->account != NULL) && 
                            (item->folder->account->filter_on_recv) &&
-                           procmsg_msginfo_filter(msginfo))
+                           procmsg_msginfo_filter(msginfo,  item->folder->account))
                                to_filter = g_slist_prepend(to_filter, msginfo);
                        else {
                                exists_list = g_slist_prepend(exists_list, msginfo);
@@ -2013,6 +2023,12 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
                g_hash_table_destroy(subject_table);
        }
        
+       if (item->new_msgs != newcnt || item->unread_msgs != unreadcnt
+       ||  item->total_msgs != totalcnt || item->marked_msgs != markedcnt
+       ||  item->unreadmarked_msgs != unreadmarkedcnt) {
+               update_flags |= F_ITEM_UPDATE_CONTENT;
+       }
+
        item->new_msgs = newcnt;
        item->unread_msgs = unreadcnt;
        item->total_msgs = totalcnt;
@@ -2248,10 +2264,17 @@ void folder_item_write_cache(FolderItem *item)
        FolderItemPrefs *prefs;
        gint filemode = 0;
        gchar *id;
+       time_t last_mtime = (time_t)0;
+       gboolean need_scan = FALSE;
        
        if (!item || !item->path || !item->cache)
                return;
 
+       if (FOLDER_TYPE(item->folder) == F_MH) {
+               last_mtime = item->mtime;
+               need_scan = item->folder->klass->scan_required(item->folder, item);
+       }
+
        id = folder_item_get_identifier(item);
        debug_print("Save cache for folder %s\n", id);
        g_free(id);
@@ -2269,6 +2292,11 @@ void folder_item_write_cache(FolderItem *item)
                }
         }
 
+       if (!need_scan && FOLDER_TYPE(item->folder) == F_MH) {
+               if (item->mtime == last_mtime)
+                       item->mtime = time(NULL);
+       }
+
        g_free(cache_file);
        g_free(mark_file);
 }
@@ -2346,7 +2374,6 @@ void msginfo_set_mime_flags(GNode *node, gpointer data)
                ||  strcmp(mimeinfo->subtype, "pgp-signature"))
                        procmsg_msginfo_set_flags(msginfo, 0, MSG_HAS_ATTACHMENT);
        } else if (mimeinfo->disposition == DISPOSITIONTYPE_INLINE &&
-               (mimeinfo->type != MIMETYPE_TEXT || strcmp(mimeinfo->subtype, "plain")) &&
                strcmp(mimeinfo->subtype, "pgp-signature") && 
                (procmime_mimeinfo_get_parameter(mimeinfo, "name") != NULL ||
                 procmime_mimeinfo_get_parameter(mimeinfo, "filename") != NULL)) {
@@ -2571,7 +2598,7 @@ static void copy_msginfo_flags(MsgInfo *source, MsgInfo *dest)
                perm_flags |= MSG_IGNORE_THREAD;
 
        /* Unset tmp flags that should not be copied */
-       tmp_flags &= ~(MSG_MOVE | MSG_COPY);
+       tmp_flags &= ~(MSG_MOVE | MSG_COPY | MSG_MOVE_DONE);
 
        /* unset flags that are set but should not */
        /* and set new flags */
@@ -2985,7 +3012,7 @@ static gint do_copy_msgs(FolderItem *dest, GSList *msglist, gboolean remove_sour
                 * copying was successfull and update folder
                 * message counts
                 */
-               if (item->folder->klass->remove_msgs) {
+               if (not_moved == NULL && item->folder->klass->remove_msgs) {
                        item->folder->klass->remove_msgs(item->folder,
                                                                msginfo->folder,
                                                                msglist,
@@ -3742,13 +3769,13 @@ void folder_item_apply_processing(FolderItem *item)
                statusbar_progress_all(curmsg++,total, 10);
 
                 /* apply pre global rules */
-               filter_message_by_msginfo(pre_global_processing, msginfo);
+               filter_message_by_msginfo(pre_global_processing, msginfo, NULL);
                
                 /* apply rules of the folder */
-               filter_message_by_msginfo(processing_list, msginfo);
+               filter_message_by_msginfo(processing_list, msginfo, NULL);
 
                 /* apply post global rules */
-               filter_message_by_msginfo(post_global_processing, msginfo);
+               filter_message_by_msginfo(post_global_processing, msginfo, NULL);
                 
        }
        if (pre_global_processing || processing_list