* src/folder.c
[claws.git] / src / folderview.c
index 8c73a2a1e3d1d8eb7ed4df2f780b127dc6577c2e..efb5661cdb454a2fd1732a21587a72648d9e16d1 100644 (file)
@@ -61,6 +61,7 @@
 #include "account.h"
 #include "folder.h"
 #include "inc.h"
+#include "statusbar.h"
 
 typedef enum
 {
@@ -74,19 +75,6 @@ typedef enum
 #define COL_FOLDER_WIDTH       150
 #define COL_NUM_WIDTH          32
 
-#define STATUSBAR_PUSH(mainwin, str) \
-{ \
-       gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \
-                          mainwin->folderview_cid, str); \
-       gtkut_widget_wait_for_draw(mainwin->hbox_stat); \
-}
-
-#define STATUSBAR_POP(mainwin) \
-{ \
-       gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), \
-                         mainwin->folderview_cid); \
-}
-
 static GList *folderview_list = NULL;
 
 static GdkFont *normalfont;
@@ -806,7 +794,7 @@ void folderview_rescan_tree(Folder *folder)
        window = label_window_create(_("Rescanning folder tree..."));
 
        folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
-       folder->scan_tree(folder);
+       folder_scan_tree(folder);
        folder_set_ui_func(folder, NULL, NULL);
 
        folder_write_list();
@@ -830,8 +818,9 @@ void folderview_rescan_all(void)
        for (; list != NULL; list = list->next) {
                Folder *folder = list->data;
 
+               if (!folder->scan_tree) continue;
                folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
-               folder->scan_tree(folder);
+               folder_scan_tree(folder);
                folder_set_ui_func(folder, NULL, NULL);
        }
 
@@ -1214,8 +1203,7 @@ void folderview_update_item(FolderItem *item, gboolean update_summary)
                if (node) {
                        folderview_update_node(folderview, node);
                        if (update_summary && folderview->opened == node)
-                               summary_show(folderview->summaryview,
-                                            item, FALSE);
+                               summary_show(folderview->summaryview, item);
                }
        }
 }
@@ -1291,7 +1279,7 @@ static void folderview_sort_folders(FolderView *folderview, GtkCTreeNode *root,
        GtkCTree *ctree = GTK_CTREE(folderview->ctree);
        GtkCTreeNode *prev = NULL;
 
-       gtk_ctree_sort_recursive(ctree, root);
+       gtk_sctree_sort_recursive(ctree, root);
 
        if (GTK_CTREE_ROW(root)->parent) return;
 
@@ -1618,6 +1606,15 @@ static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
 
        can_select = FALSE;
 
+       /* Save cache for old folder */
+       /* We don't want to lose all caches if sylpheed crashed */
+       if(folderview->opened) {
+               FolderItem *olditem;
+               
+               olditem = gtk_ctree_node_get_row_data(ctree, folderview->opened);
+               folder_item_write_cache(olditem);
+       }
+
        /* CLAWS: set compose button type: news folder items 
         * always have a news folder as parent */
        if (item->folder) 
@@ -1642,14 +1639,33 @@ static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
                        gdk_pointer_ungrab(GDK_CURRENT_TIME);
        }
 
-       if((item->folder->type == F_IMAP) || (item->folder->type == F_NEWS)) {
+       if(((item->folder->type == F_IMAP) && !item->no_select) || (item->folder->type == F_NEWS)) {
                folder_item_scan(item);
        }
 
-       opened = summary_show(folderview->summaryview, item, FALSE);
+       /* Processing */
+       if(item->prefs->processing != NULL) {
+               gchar *buf;
+               
+               buf = g_strdup_printf(_("Processing (%s)..."), item->path);
+               debug_print("%s\n", buf);
+               STATUSBAR_PUSH(folderview->mainwin, buf);
+               g_free(buf);
+       
+               main_window_cursor_wait(folderview->mainwin);
+       
+               folder_item_apply_processing(item);
+
+               debug_print(_("done.\n"));
+               STATUSBAR_POP(folderview->mainwin);
+               main_window_cursor_normal(folderview->mainwin);
+       }
+               
+       /* Show messages */
+       opened = summary_show(folderview->summaryview, item);
 
        folder_clean_cache_memory();
-       
+
        if (!opened) {
                gtkut_ctree_set_focus_row(ctree, folderview->opened);
                gtk_ctree_select(ctree, folderview->opened);
@@ -1748,7 +1764,7 @@ static void folderview_update_tree_cb(FolderView *folderview, guint action,
 
        if (!folderview->selected) return;
 
-       summary_show(folderview->summaryview, NULL, FALSE);
+       summary_show(folderview->summaryview, NULL);
 
        item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
        g_return_if_fail(item != NULL);
@@ -2013,7 +2029,7 @@ static void folderview_rename_mbox_folder_cb(FolderView *folderview,
        if (folderview->opened == folderview->selected) {
                if (!GTK_CTREE_ROW(folderview->opened)->children)
                        gtk_ctree_expand(ctree, folderview->opened);
-               summary_show(folderview->summaryview, item, FALSE);
+               summary_show(folderview->summaryview, item);
        }
 
        gtk_clist_thaw(GTK_CLIST(ctree));
@@ -2056,8 +2072,7 @@ static void folderview_delete_folder_cb(FolderView *folderview, guint action,
                alertpanel_error(_("Can't remove the folder `%s'."), name);
                if (folderview->opened == folderview->selected)
                        summary_show(folderview->summaryview,
-                                    folderview->summaryview->folder_item,
-                                    FALSE);
+                                    folderview->summaryview->folder_item);
                g_free(old_id);
                return;
        }
@@ -2312,7 +2327,7 @@ static void folderview_new_news_group_cb(FolderView *folderview, guint action,
                                             FALSE, FALSE);
                gtk_ctree_expand(ctree, servernode);
 
-               newitem = folder_item_new(name, name);
+               newitem = folder_item_new(folder, name, name);
                folder_item_append(rootitem, newitem);
                gtk_ctree_node_set_row_data(ctree, node, newitem);
        }