2005-10-26 [colin] 1.9.15cvs111
[claws.git] / src / imap_gtk.c
index de7b19dd42cf60f709bc40b1f7afc81ad210f356..636da9c869f11a133a3e24e6d0e6fe6c535f5bb4 100644 (file)
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #ifdef HAVE_CONFIG_H
 static void new_folder_cb(FolderView *folderview, guint action, GtkWidget *widget);
 static void rename_folder_cb(FolderView *folderview, guint action, GtkWidget *widget);
 static void move_folder_cb(FolderView *folderview, guint action, GtkWidget *widget);
-static void imap_settings_cb(FolderView *folderview, guint action, GtkWidget *widget);
-static void remove_server_cb(FolderView *folderview, guint action, GtkWidget *widget);
 static void delete_folder_cb(FolderView *folderview, guint action, GtkWidget *widget);
 static void update_tree_cb(FolderView *folderview, guint action, GtkWidget *widget);
 static void download_cb(FolderView *folderview, guint action, GtkWidget *widget);
+static void sync_cb(FolderView *folderview, guint action, GtkWidget *widget);
 
 static GtkItemFactoryEntry imap_popup_entries[] =
 {
        {N_("/Create _new folder..."),   NULL, new_folder_cb,    0, NULL},
        {N_("/_Rename folder..."),       NULL, rename_folder_cb, 0, NULL},
        {N_("/M_ove folder..."),         NULL, move_folder_cb,   0, NULL},
-       {N_("/_Delete folder"),          NULL, delete_folder_cb, 0, NULL},
+       {N_("/_Delete folder..."),       NULL, delete_folder_cb, 0, NULL},
        {N_("/---"),                     NULL, NULL,             0, "<Separator>"},
+       {N_("/Synchronise"),             NULL, sync_cb,         0, NULL},
        {N_("/Down_load messages"),      NULL, download_cb,      0, NULL},
        {N_("/---"),                     NULL, NULL,             0, "<Separator>"},
        {N_("/_Check for new messages"), NULL, update_tree_cb,   0, NULL},
-       {N_("/R_ebuild folder tree"),    NULL, update_tree_cb,   1, NULL},
-       {N_("/---"),                     NULL, NULL,             0, "<Separator>"},
-       {N_("/IMAP4 _account settings"), NULL, imap_settings_cb, 0, NULL},
-       {N_("/Remove _IMAP4 account"),   NULL, remove_server_cb, 0, NULL},
+       {N_("/C_heck for new folders"),  NULL, update_tree_cb,   1, NULL},
+       {N_("/R_ebuild folder tree"),    NULL, update_tree_cb,   2, NULL},
        {N_("/---"),                     NULL, NULL,             0, "<Separator>"},
 };
 
@@ -92,19 +90,25 @@ void imap_gtk_init(void)
 
 static void set_sensitivity(GtkItemFactory *factory, FolderItem *item)
 {
+       gboolean folder_is_normal = 
+                       item != NULL &&
+                       item->stype == F_NORMAL &&
+                       !folder_has_parent_of_type(item, F_OUTBOX) &&
+                       !folder_has_parent_of_type(item, F_DRAFT) &&
+                       !folder_has_parent_of_type(item, F_QUEUE) &&
+                       !folder_has_parent_of_type(item, F_TRASH);
 #define SET_SENS(name, sens) \
        menu_set_sensitive(factory, name, sens)
 
-       SET_SENS("/Create new folder...",   TRUE);
+       SET_SENS("/Create new folder...",   item->no_sub == FALSE);
        SET_SENS("/Rename folder...",       item->stype == F_NORMAL && folder_item_parent(item) != NULL);
-       SET_SENS("/Move folder...",         item->stype == F_NORMAL && folder_item_parent(item) != NULL);
-       SET_SENS("/Delete folder",          item->stype == F_NORMAL && folder_item_parent(item) != NULL);
+       SET_SENS("/Move folder...",         folder_is_normal && folder_item_parent(item) != NULL);
+       SET_SENS("/Delete folder...",       item->stype == F_NORMAL && folder_item_parent(item) != NULL);
 
        SET_SENS("/Check for new messages", folder_item_parent(item) == NULL);
+       SET_SENS("/Check for new folders",  folder_item_parent(item) == NULL);
        SET_SENS("/Rebuild folder tree",    folder_item_parent(item) == NULL);
 
-       SET_SENS("/Remove IMAP4 account",   folder_item_parent(item) == NULL);
-
 #undef SET_SENS
 }
 
@@ -128,15 +132,15 @@ static void new_folder_cb(FolderView *folderview, guint action,
        new_folder = input_dialog
                (_("New folder"),
                 _("Input the name of new folder:\n"
-                  "(if you want to create a folder to store subfolders,\n"
-                  " append `/' at the end of the name)"),
+                  "(if you want to create a folder to store subfolders\n"
+                  "and no mails, append '/' at the end of the name)"),
                 _("NewFolder"));
        if (!new_folder) return;
        AUTORELEASE_STR(new_folder, {g_free(new_folder); return;});
 
        p = strchr(new_folder, G_DIR_SEPARATOR);
        if (p && *(p + 1) != '\0') {
-               alertpanel_error(_("`%c' can't be included in folder name."),
+               alertpanel_error(_("'%c' can't be included in folder name."),
                                 G_DIR_SEPARATOR);
                return;
        }
@@ -146,13 +150,13 @@ static void new_folder_cb(FolderView *folderview, guint action,
 
        /* find whether the directory already exists */
        if (folder_find_child_item_by_name(item, new_folder)) {
-               alertpanel_error(_("The folder `%s' already exists."), name);
+               alertpanel_error(_("The folder '%s' already exists."), name);
                return;
        }
 
        new_item = folder_create_folder(item, new_folder);
        if (!new_item) {
-               alertpanel_error(_("Can't create the folder `%s'."), name);
+               alertpanel_error(_("Can't create the folder '%s'."), name);
                return;
        }
        folder_write_list();
@@ -176,7 +180,7 @@ static void rename_folder_cb(FolderView *folderview, guint action,
        g_return_if_fail(item->folder != NULL);
 
        name = trim_string(item->name, 32);
-       message = g_strdup_printf(_("Input new name for `%s':"), name);
+       message = g_strdup_printf(_("Input new name for '%s':"), name);
        base = g_path_get_basename(item->path);
        new_folder = input_dialog(_("Rename folder"), message, base);
        g_free(base);
@@ -195,7 +199,7 @@ static void rename_folder_cb(FolderView *folderview, guint action,
 */
        if (folder_find_child_item_by_name(folder_item_parent(item), new_folder)) {
                name = trim_string(new_folder, 32);
-               alertpanel_error(_("The folder `%s' already exists."), name);
+               alertpanel_error(_("The folder '%s' already exists."), name);
                g_free(name);
                return;
        }
@@ -238,60 +242,6 @@ static void move_folder_cb(FolderView *folderview, guint action, GtkWidget *widg
        folderview_move_folder(folderview, from_folder, to_folder);
 }
 
-static void imap_settings_cb(FolderView *folderview, guint action, GtkWidget *widget)
-{
-       FolderItem *item;
-
-       item = folderview_get_selected_item(folderview);
-       if (item == NULL)
-               return;
-
-       account_open(item->folder->account);
-}
-
-static void remove_server_cb(FolderView *folderview, guint action, GtkWidget *widget)
-{
-       GtkCTree *ctree = GTK_CTREE(folderview->ctree);
-       FolderItem *item;
-       PrefsAccount *account;
-       gchar *name;
-       gchar *message;
-       AlertValue avalue;
-
-       if (!folderview->selected) return;
-
-       item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
-       g_return_if_fail(item != NULL);
-       g_return_if_fail(item->folder != NULL);
-       g_return_if_fail(item->folder->account != NULL);
-
-       name = trim_string(item->folder->name, 32);
-       message = g_strdup_printf(_("Really delete IMAP4 account `%s'?"), name);
-       avalue = alertpanel(_("Delete IMAP4 account"), message,
-                           _("Yes"), _("+No"), NULL);
-       g_free(message);
-       g_free(name);
-
-       if (avalue != G_ALERTDEFAULT) return;
-
-       if (folderview->opened == folderview->selected ||
-           gtk_ctree_is_ancestor(ctree,
-                                 folderview->selected,
-                                 folderview->opened)) {
-               summary_clear_all(folderview->summaryview);
-               folderview->opened = NULL;
-       }
-
-       account = item->folder->account;
-       folderview_unselect(folderview);
-       summary_clear_all(folderview->summaryview);
-       folder_destroy(item->folder);
-       account_destroy(account);
-       account_set_menu();
-       main_window_reflect_prefs_all();
-       folder_write_list();
-}
-
 static void delete_folder_cb(FolderView *folderview, guint action,
                             GtkWidget *widget)
 {
@@ -312,10 +262,12 @@ 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
-               (_("All folders and messages under `%s' will be deleted.\n"
+               (_("All folders and messages under '%s' will be permanently deleted. "
+                  "Recovery will not be possible.\n\n"
                   "Do you really want to delete?"), name);
-       avalue = alertpanel(_("Delete folder"), message,
-                           _("Yes"), _("+No"), NULL);
+       avalue = alertpanel_full(_("Delete folder"), message,
+                                GTK_STOCK_YES, GTK_STOCK_NO, NULL, FALSE,
+                                NULL, ALERT_WARNING, G_ALERTALTERNATE);
        g_free(message);
        if (avalue != G_ALERTDEFAULT) return;
 
@@ -332,7 +284,7 @@ static void delete_folder_cb(FolderView *folderview, guint action,
 
        if (item->folder->klass->remove_folder(item->folder, item) < 0) {
                folder_item_scan(item);
-               alertpanel_error(_("Can't remove the folder `%s'."), name);
+               alertpanel_error(_("Can't remove the folder '%s'."), name);
                g_free(old_id);
                return;
        }
@@ -358,20 +310,27 @@ static void update_tree_cb(FolderView *folderview, guint action,
 
        if (action == 0)
                folderview_check_new(item->folder);
-       else
-               folderview_rescan_tree(item->folder);
+       else if (action == 1)
+               folderview_rescan_tree(item->folder, FALSE);
+       else if (action == 2)
+               folderview_rescan_tree(item->folder, TRUE);
 }
 
-static void download_cb(FolderView *folderview, guint action,
-                       GtkWidget *widget)
+static void sync_cb(FolderView *folderview, guint action,
+                          GtkWidget *widget)
 {
-       GtkCTree *ctree = GTK_CTREE(folderview->ctree);
-       MainWindow *mainwin = folderview->mainwin;
        FolderItem *item;
 
-       if (!folderview->selected) return;
+       item = folderview_get_selected_item(folderview);
+       g_return_if_fail(item != NULL);
+       folder_synchronise(item->folder);
+}
 
-       item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+void imap_gtk_synchronise(FolderItem *item)
+{
+       MainWindow *mainwin = mainwindow_get_mainwindow();
+       FolderView *folderview = mainwin->folderview;
+       
        g_return_if_fail(item != NULL);
        g_return_if_fail(item->folder != NULL);
 
@@ -385,7 +344,7 @@ static void download_cb(FolderView *folderview, guint action,
                gchar *name;
 
                name = trim_string(item->name, 32);
-               alertpanel_error(_("Error occurred while downloading messages in `%s'."), name);
+               alertpanel_error(_("Error occurred while downloading messages in '%s'."), name);
                g_free(name);
        }
        folder_set_ui_func(item->folder, NULL, NULL);
@@ -394,29 +353,16 @@ static void download_cb(FolderView *folderview, guint action,
        main_window_unlock(mainwin);
        inc_unlock();
        main_window_cursor_normal(mainwin);
-}
 
-gboolean imap_gtk_should_override(void)
+}
+static void download_cb(FolderView *folderview, guint action,
+                       GtkWidget *widget)
 {
-       static time_t overridden_yes = 0;
-       static time_t overridden_no  = 0;
-       gboolean answer = TRUE;
-
-       if (prefs_common.work_offline) {
-               if (time(NULL) - overridden_yes < 600)
-                        return TRUE;
-               else if (time(NULL) - overridden_no < 3)
-                        return FALSE;
-               
-               answer = (alertpanel(_("Offline warning"), 
-                              _("You're working offline. Override during 10 minutes?"),
-                              _("Yes"), _("No"), NULL) == G_ALERTDEFAULT);
-               
-               if (answer == TRUE)
-                       overridden_yes = time(NULL);
-               else
-                       overridden_no  = time(NULL);
-       }
-       return answer;
-       
+       GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+       FolderItem *item;
+
+       if (!folderview->selected) return;
+
+       item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+       imap_gtk_synchronise(item);
 }