[pan2] Enhancement: do not overwrite silently draft file (Bug: 704227)
- From: Petr Kovář <pmkovar src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pan2] Enhancement: do not overwrite silently draft file (Bug: 704227)
- Date: Mon, 23 May 2016 17:45:01 +0000 (UTC)
commit 4207a74bf379548d3f2de69757e60bae33869194
Author: Detlef Graef <detlef graef yahoo de>
Date: Sun May 15 14:59:42 2016 +0200
Enhancement: do not overwrite silently draft file (Bug: 704227)
pan/gui/post-ui.cc | 106 ++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 79 insertions(+), 27 deletions(-)
---
diff --git a/pan/gui/post-ui.cc b/pan/gui/post-ui.cc
index b2eb64f..0cca043 100644
--- a/pan/gui/post-ui.cc
+++ b/pan/gui/post-ui.cc
@@ -139,6 +139,12 @@ namespace
// not found
return -1;
}
+
+ bool is_file_exist(const char *fileName)
+ {
+ std::ifstream infile(fileName);
+ return infile.good();
+ }
}
/***
@@ -1694,45 +1700,91 @@ PostUI :: save_draft ()
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
- gtk_dialog_set_default_response (GTK_DIALOG(d), GTK_RESPONSE_ACCEPT);
- std::string& draft_filename (get_draft_filename ());
+ std::string draft_filename;
+ char* filename;
+ GMimeMessage* msg;
+ bool no_overwrite = true;
+ bool select_ok = false;
+
+ gtk_dialog_set_default_response (GTK_DIALOG(d), GTK_RESPONSE_ACCEPT);
+ draft_filename = get_draft_filename ();
+
if (g_file_test (draft_filename.c_str(), G_FILE_TEST_IS_DIR))
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(d), draft_filename.c_str());
else
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(d), draft_filename.c_str());
- if (gtk_dialog_run(GTK_DIALOG(d)) == GTK_RESPONSE_ACCEPT)
- {
- GMimeMessage * msg = new_message_from_ui (UPLOADING);
- char * filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(d));
- draft_filename = filename;
+ do {
+ if (gtk_dialog_run(GTK_DIALOG(d)) == GTK_RESPONSE_ACCEPT)
+ {
+ msg = new_message_from_ui (UPLOADING);
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(d));
+ draft_filename = filename;
+ select_ok = true;
+
+ if (is_file_exist(draft_filename.c_str()))
+ {
+ no_overwrite = true;
+ GtkWidget * dialog_w = gtk_message_dialog_new (
+ GTK_WINDOW(_root),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, NULL);
+ HIG :: message_dialog_set_text (GTK_MESSAGE_DIALOG(dialog_w),
+ _("File already exist!"),
+ _("Overwrite it?"));
+ gtk_dialog_add_buttons (GTK_DIALOG(dialog_w),
+ GTK_STOCK_GO_BACK, GTK_RESPONSE_NO,
+ GTK_STOCK_YES, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG(dialog_w), GTK_RESPONSE_NO);
+ switch(gtk_dialog_run(GTK_DIALOG(dialog_w)))
+ {
+ case GTK_RESPONSE_OK:
+ no_overwrite = false;
+ break;
+ case GTK_RESPONSE_NO:
+ no_overwrite = true;
+ break;
+ default:
+ no_overwrite = true;
+ break;
+ }
+ gtk_widget_destroy (dialog_w);
+ }
+ } else
+ {
+ select_ok = false;
+ }
- errno = 0;
- std::ofstream o (filename);
- char * pch = g_mime_object_to_string ((GMimeObject *) msg);
- o << pch;
- o.close ();
+ } while (!(no_overwrite || select_ok));
+
+ if (!no_overwrite && select_ok)
+ {
+ errno = 0;
+ std::ofstream o (filename);
+ char * pch = g_mime_object_to_string ((GMimeObject *) msg);
+ o << pch;
+ o.close ();
- if (o.fail()) {
- GtkWidget * e = gtk_message_dialog_new (
+ if (o.fail())
+ {
+ GtkWidget * e = gtk_message_dialog_new (
GTK_WINDOW(d),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
_("Unable to save \"%s\" %s"), filename, file::pan_strerror(errno));
- gtk_dialog_run (GTK_DIALOG(e));
- gtk_widget_destroy (e);
- }
-
- g_free (pch);
- g_free (filename);
- g_object_unref (msg);
+ gtk_dialog_run (GTK_DIALOG(e));
+ gtk_widget_destroy (e);
+ }
- save_message_in_local_folder(DRAFTING, "Drafts");
-
- _unchanged_body = get_body ();
- }
+ g_free (pch);
+ g_free (filename);
+ g_object_unref (msg);
+ save_message_in_local_folder(DRAFTING, "Drafts");
+ _unchanged_body = get_body ();
+ }
gtk_widget_destroy (d);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]