fix 'save all' dialogues
authorPaul <paul@claws-mail.org>
Wed, 22 Jun 2022 13:23:00 +0000 (14:23 +0100)
committerPaul <paul@claws-mail.org>
Wed, 22 Jun 2022 13:23:00 +0000 (14:23 +0100)
* don't treat not overwriting a file as an error
* add checkboxes/hidden prefs to not show the post-saving informational dialogues
* fix counts in informational dialogues
* improvements to dialogue labels

src/mimeview.c
src/prefs_common.c
src/prefs_common.h

index 54303293f93a8665a4e981bbf7916200355f6911..e782dce76d9f05b5b206d4ab6ae4f8bf021c595b 100644 (file)
@@ -78,9 +78,9 @@ static void mimeview_change_view_type         (MimeView       *mimeview,
 static gchar *mimeview_get_filename_for_part   (MimeInfo       *partinfo,
                                                 const gchar    *basedir,
                                                 gint            number);
-static gboolean mimeview_write_part            (const gchar    *filename,
-                                                MimeInfo       *partinfo,
-                                                gboolean        handle_error);
+static gint mimeview_write_part                (const gchar    *filename,
+                                        MimeInfo       *partinfo,
+                                        gboolean        handle_error);
 
 static void mimeview_selected          (GtkTreeSelection       *selection,
                                         MimeView       *mimeview);
@@ -1790,9 +1790,9 @@ static gchar *mimeview_get_filename_for_part(MimeInfo *partinfo,
  * \param filename Filename with path
  * \param partinfo Attachment to save
  */
-static gboolean mimeview_write_part(const gchar *filename,
-                                   MimeInfo *partinfo,
-                                   gboolean handle_error)
+static gint mimeview_write_part(const gchar *filename,
+                               MimeInfo *partinfo,
+                               gboolean handle_error)
 {
        gchar *dir;
        gint err;
@@ -1815,10 +1815,11 @@ static gboolean mimeview_write_part(const gchar *filename,
                res = g_strdup_printf(_("Overwrite existing file '%s'?"),
                                      tmp);
                g_free(tmp);
-               aval = alertpanel(_("Overwrite"), res, NULL, _("_Cancel"),
-                                 NULL, _("_OK"), NULL, NULL, ALERTFOCUS_FIRST);
+               aval = alertpanel(_("Overwrite"), res, NULL, _("_No"),
+                                 NULL, _("_Yes"), NULL, NULL, ALERTFOCUS_FIRST);
                g_free(res);
-               if (G_ALERTALTERNATE != aval) return FALSE;
+               if (G_ALERTALTERNATE != aval)
+                       return 2;
        }
 
        if ((err = procmime_get_part(filename, partinfo)) < 0) {
@@ -1827,20 +1828,20 @@ static gboolean mimeview_write_part(const gchar *filename,
                        alertpanel_error
                                (_("Couldn't save the part of multipart message: %s"),
                                 g_strerror(-err));
-               return FALSE;
+               return 0;
        }
 
-       return TRUE;
+       return 1;
 }
 
 static AlertValue mimeview_save_all_error_ask(gint n)
 {
        gchar *message = g_strdup_printf(
-               _("An error has occurred while saving message part #%d. "
-               "Do you want to cancel operation or skip error and "
+               _("An error has occurred while saving message part %d. "
+               "Do you want to cancel saving or ignore error and "
                "continue?"), n);
-       AlertValue av = alertpanel_full(_("Error saving all message parts"),
-               message, NULL, _("_Cancel"), NULL, _("Skip"), NULL, _("Skip all"),
+       AlertValue av = alertpanel_full(_("Error saving message part"),
+               message, NULL, _("_Cancel"), NULL, _("Ignore"), NULL, _("Ignore all"),
                ALERTFOCUS_FIRST, FALSE, NULL, ALERT_WARNING);
        g_free(message);
        return av;
@@ -1848,15 +1849,21 @@ static AlertValue mimeview_save_all_error_ask(gint n)
 
 static void mimeview_save_all_info(gint errors, gint total)
 {
-       if (!errors) {
+       AlertValue aval;
+
+       if (!errors && prefs_common.show_save_all_success) {
                gchar *msg = g_strdup_printf(
                                ngettext("%d file saved successfully.",
                                        "%d files saved successfully.",
                                        total),
                                total);
-               alertpanel_notice("%s", msg);
+               aval = alertpanel_full(_("Notice"), msg, NULL, _("_Close"),
+                                      NULL, NULL, NULL, NULL, ALERTFOCUS_FIRST,
+                                      TRUE, NULL, ALERT_NOTICE);
                g_free(msg);
-       } else {
+               if (aval & G_ALERTDISABLE)
+                       prefs_common.show_save_all_success = FALSE;
+       } else if (prefs_common.show_save_all_failure) {
                gchar *msg1 = g_strdup_printf(
                                ngettext("%d file saved successfully",
                                        "%d files saved successfully",
@@ -1867,9 +1874,13 @@ static void mimeview_save_all_info(gint errors, gint total)
                                        "%s, %d files failed.",
                                        errors),
                                msg1, errors);
-               alertpanel_warning("%s", msg2);
+               aval = alertpanel_full(_("Warning"), msg2, NULL, _("_Close"),
+                                      NULL, NULL, NULL, NULL, ALERTFOCUS_FIRST,
+                                      TRUE, NULL, ALERT_WARNING);
                g_free(msg2);
                g_free(msg1);
+               if (aval & G_ALERTDISABLE)
+                       prefs_common.show_save_all_failure = FALSE;
        }
 }
 
@@ -1882,7 +1893,7 @@ static void mimeview_save_all(MimeView *mimeview)
        MimeInfo *partinfo;
        gchar *dirname;
        gchar *startdir = NULL;
-       gint number = 1, errors = 0;
+       gint number = 0, errors = 0;
        gboolean skip_errors = FALSE;
 
        if (!mimeview->opened) return;
@@ -1929,17 +1940,18 @@ static void mimeview_save_all(MimeView *mimeview)
                        gchar *filename = mimeview_get_filename_for_part(
                                partinfo, dirname, number++);
 
-                       gboolean ok = mimeview_write_part(filename, partinfo, FALSE);
+                       gint ok = mimeview_write_part(filename, partinfo, FALSE);
                        g_free(filename);
-                       if (!ok) {
+                       if (ok < 1) {
                                ++errors;
                                if (!skip_errors) {
-                                       AlertValue av = mimeview_save_all_error_ask(number - 1);
+                                       AlertValue av = mimeview_save_all_error_ask(number);
                                        skip_errors = (av == G_ALERTOTHER);
                                        if (av == G_ALERTDEFAULT) /* cancel */
                                                break;
                                }
-                       }
+                       } else if (ok == 2)
+                               number--;
                }
                partinfo = procmime_mimeinfo_next(partinfo);
        }
@@ -1950,7 +1962,7 @@ static void mimeview_save_all(MimeView *mimeview)
                                        -1, NULL, NULL, NULL);
        g_free(dirname);
 
-       mimeview_save_all_info(errors, number - 1);
+       mimeview_save_all_info(errors, number);
 }
 
 static MimeInfo *mimeview_get_part_to_use(MimeView *mimeview)
index f61f6a9e348094e1a29f44cf9b3f21ae305ca116..fddb5bdd73f800a9cab37a6708ceb93971a20ccd 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2021 the Claws Mail team and Hiroyuki Yamamoto
+ * Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -1168,7 +1168,11 @@ static PrefParam param[] = {
         NULL, NULL, NULL},
        {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
         NULL, NULL, NULL},
-       {"utf8_instead_of_locale_for_broken_mail", "0", 
+       {"show_save_all_success", "1", &prefs_common.show_save_all_success, P_INT,
+        NULL, NULL, NULL},
+       {"show_save_all_failure", "1", &prefs_common.show_save_all_failure, P_INT,
+        NULL, NULL, NULL},
+       {"utf8_instead_of_locale_for_broken_mail", "0",
         &prefs_common.broken_are_utf8, P_INT,
         NULL, NULL, NULL},
        {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
index 7175cc68f1609e204c4088608c2cfdb8859773e4..0d4cf465df51df1e200983b5d22613915c744bc6 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2021 the Claws Mail team and Hiroyuki Yamamoto
+ * Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -537,7 +537,7 @@ struct _PrefsCommon
        gint news_subscribe_width;
        gint news_subscribe_height;
 
-    gint imap_scan_tree_recurs_limit;
+       gint imap_scan_tree_recurs_limit;
        gint warn_dnd;
        gint broken_are_utf8;
        gint skip_ssl_cert_check;
@@ -547,7 +547,9 @@ struct _PrefsCommon
        gint hide_quotes;
        gboolean unsafe_ssl_certs;
        gboolean real_time_sync;
-       
+       gboolean show_save_all_success;
+       gboolean show_save_all_failure;
+
        gchar *print_paper_type;
        gint print_paper_orientation;
        gint print_margin_top;