2008-04-01 [colin] 3.3.1cvs48
[claws.git] / src / imap_gtk.c
index 6202c8aa5534aa16966b52785ce4f1ab6238315e..228936c1cab27ff7e0655a8c158990f56eb276e4 100644 (file)
@@ -128,7 +128,10 @@ static void set_sensitivity(GtkItemFactory *factory, FolderItem *item)
        
        SET_SENS("/Subscriptions/Unsubscribe...",    item->stype == F_NORMAL && folder_item_parent(item) != NULL);
        SET_SENS("/Subscriptions/Subscribe...",    TRUE);
-       menu_set_active(factory, "/Subscriptions/Show only subscribed folders", item->folder->account->imap_subsonly);
+       if (item->folder && item->folder->account)
+               menu_set_active(factory, 
+                       "/Subscriptions/Show only subscribed folders", 
+                       item->folder->account->imap_subsonly);
 
 #undef SET_SENS
 }
@@ -155,7 +158,7 @@ static void new_folder_cb(FolderView *folderview, guint action,
                (_("New folder"),
                 _("Input the name of new folder:\n"
                   "(if you want to create a folder to store subfolders\n"
-                  "and no mails, append '/' at the end of the name)"),
+                  "only and no mail, append '/' to the folder name)"),
                 _("NewFolder"));
        if (!new_folder) return;
        AUTORELEASE_STR(new_folder, {g_free(new_folder); return;});
@@ -257,7 +260,7 @@ static void rename_folder_cb(FolderView *folderview, guint action,
        g_free(old_id);
        g_free(new_id);
 
-       folder_item_prefs_save_config(item);
+       folder_item_prefs_save_config_recursive(item);
        folder_write_list();
 }
 
@@ -269,7 +272,7 @@ static void move_folder_cb(FolderView *folderview, guint action, GtkWidget *widg
        if (!from_folder || from_folder->folder->klass != imap_get_class())
                return;
 
-       to_folder = foldersel_folder_sel(from_folder->folder, FOLDER_SEL_MOVE, NULL);
+       to_folder = foldersel_folder_sel(from_folder->folder, FOLDER_SEL_MOVE, NULL, TRUE);
        if (!to_folder)
                return;
        
@@ -295,7 +298,7 @@ static void delete_folder_cb(FolderView *folderview, guint action,
 
        name = trim_string(item->name, 32);
        AUTORELEASE_STR(name, {g_free(name); return;});
-       message = g_strdup_printf
+       message = g_markup_printf_escaped
                (_("All folders and messages under '%s' will be permanently deleted. "
                   "Recovery will not be possible.\n\n"
                   "Do you really want to delete?"), name);
@@ -360,7 +363,7 @@ static void sync_cb(FolderView *folderview, guint action,
        folder_synchronise(item->folder);
 }
 
-void imap_gtk_synchronise(FolderItem *item)
+void imap_gtk_synchronise(FolderItem *item, gint days)
 {
        MainWindow *mainwin = mainwindow_get_mainwindow();
        FolderView *folderview = mainwin->folderview;
@@ -379,11 +382,14 @@ void imap_gtk_synchronise(FolderItem *item)
                GSList *cur;
                gint num = 0;
                gint total = item->total_msgs;
+               time_t t = time(NULL);
 
                mlist = folder_item_get_msg_list(item);
                for (cur = mlist; cur != NULL; cur = cur->next) {
                        MsgInfo *msginfo = (MsgInfo *)cur->data;
-                       imap_cache_msg(msginfo->folder, msginfo->msgnum);
+                       gint age = (t - msginfo->date_t) / (60*60*24);
+                       if (days == 0 || age <= days)
+                               imap_cache_msg(msginfo->folder, msginfo->msgnum);
                        statusbar_progress_all(num++,total, 100);
                        if (num % 100 == 0)
                                GTK_EVENTS_FLUSH();
@@ -399,7 +405,6 @@ void imap_gtk_synchronise(FolderItem *item)
        main_window_unlock(mainwin);
        inc_unlock();
        main_window_cursor_normal(mainwin);
-
 }
 
 static void chk_update_val(GtkWidget *widget, gpointer data)
@@ -440,8 +445,9 @@ static void subscribe_cb(FolderView *folderview, guint action,
        
        if (action && item->folder->account->imap_subsonly) {
                GList *child_list = NULL;
-               
-               message = g_strdup_printf
+               GList *transc_list = NULL;
+
+               message = g_markup_printf_escaped
                        (_("Do you want to search for unsubscribed subfolders of '%s'?"),
                         name);
 
@@ -457,17 +463,27 @@ static void subscribe_cb(FolderView *folderview, guint action,
                if (avalue != G_ALERTALTERNATE) return;
                
                child_list = imap_scan_subtree(item->folder, item, TRUE, recurse);
+               
                if (child_list) {
                        GList *cur;
                        int r = -1;
                        gchar *msg = g_strdup_printf(_("Choose a subfolder of %s to subscribe to: "),
                                        item->name); 
-                       gchar *child_folder = input_dialog_combo(_("Subscribe"), 
+                       gchar *child_folder = NULL;
+                       
+                       for (cur = child_list; cur; cur = cur->next) {
+                               transc_list = g_list_append(transc_list, 
+                                       imap_modified_utf7_to_utf8(cur->data, FALSE));
+                       }
+
+                       child_folder = input_dialog_combo(_("Subscribe"), 
                                        msg,
-                                       child_list->next?_("All of them"):child_list->data, child_list, TRUE);
+                                       transc_list->next?_("All of them"):transc_list->data, transc_list);
                        g_free(msg);
                        if (child_folder && strcmp(child_folder, _("All of them"))) {
-                               r = imap_subscribe(item->folder, NULL, child_folder, TRUE);
+                               gchar *transc_folder = imap_utf8_to_modified_utf7(child_folder, FALSE);
+                               r = imap_subscribe(item->folder, NULL, transc_folder, TRUE);
+                               g_free(transc_folder);
                        } else if (child_folder) {
                                for (cur = child_list; cur; cur = cur->next) 
                                        r = imap_subscribe(item->folder, NULL, (gchar *)cur->data, TRUE);
@@ -475,6 +491,8 @@ static void subscribe_cb(FolderView *folderview, guint action,
                        g_free(child_folder);
                        for (cur = child_list; cur; cur = cur->next) 
                                g_free((gchar *)cur->data);
+                       for (cur = transc_list; cur; cur = cur->next) 
+                               g_free((gchar *)cur->data);
                        if (r == 0)
                                folderview_fast_rescan_tree(item->folder);
                } else {
@@ -486,7 +504,7 @@ static void subscribe_cb(FolderView *folderview, guint action,
                g_list_free(child_list);
                return;
        }
-       message = g_strdup_printf
+       message = g_markup_printf_escaped
                (_("Do you want to %s the '%s' folder?"),
                   action?_("subscribe"):_("unsubscribe"), name);
        
@@ -534,6 +552,14 @@ static void subscribed_cb(FolderView *folderview, guint action,
        if (item->folder->account->imap_subsonly == GTK_CHECK_MENU_ITEM(widget)->active)
                return;
 
+       if (folderview->opened == folderview->selected ||
+           gtk_ctree_is_ancestor(ctree,
+                                 folderview->selected,
+                                 folderview->opened)) {
+               summary_clear_all(folderview->summaryview);
+               folderview->opened = NULL;
+       }
+
        item->folder->account->imap_subsonly = GTK_CHECK_MENU_ITEM(widget)->active;
        folderview_fast_rescan_tree(item->folder);
 }
@@ -547,5 +573,5 @@ static void download_cb(FolderView *folderview, guint action,
        if (!folderview->selected) return;
 
        item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
-       imap_gtk_synchronise(item);
+       imap_gtk_synchronise(item, 0);
 }