r20155 - gnucash/trunk - Provide more detail in commit error when it's caused by a read-only book. Mark error message for translation.

John Ralls jralls at code.gnucash.org
Sun Jan 23 12:50:44 EST 2011


Author: jralls
Date: 2011-01-23 12:50:43 -0500 (Sun, 23 Jan 2011)
New Revision: 20155
Trac: http://svn.gnucash.org/trac/changeset/20155

Modified:
   gnucash/trunk/configure.ac
   gnucash/trunk/src/gnome-utils/gnc-file.c
   gnucash/trunk/src/gnome-utils/gnc-main-window.c
Log:
Provide more detail in commit error when it's caused by a read-only book. Mark error message for translation.

Modified: gnucash/trunk/configure.ac
===================================================================
--- gnucash/trunk/configure.ac	2011-01-23 17:35:31 UTC (rev 20154)
+++ gnucash/trunk/configure.ac	2011-01-23 17:50:43 UTC (rev 20155)
@@ -79,7 +79,7 @@
     [Most recent stable GnuCash series])
 
 dnl Set of available languages.
-ALL_LINGUAS="bg ca cs da de el en_GB es_NI es eu fa fi fr he hu it ja ko lt lv nb ne nl pl pt_BR pt ro ru rw sk sv ta tr uk vi zh_CN zh_TW"
+ALL_LINGUAS="bg ca cs da de el en en_GB es_NI es eu fa fi fr he hu it ja ko lt lv nb ne nl pl pt_BR pt ro ru rw sk sv ta tr uk vi zh_CN zh_TW"
 
 GETTEXT_PACKAGE=gnucash
 AC_SUBST(GETTEXT_PACKAGE)

Modified: gnucash/trunk/src/gnome-utils/gnc-file.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-file.c	2011-01-23 17:35:31 UTC (rev 20154)
+++ gnucash/trunk/src/gnome-utils/gnc-file.c	2011-01-23 17:50:43 UTC (rev 20155)
@@ -411,14 +411,21 @@
 
     case ERR_SQL_DB_TOO_OLD:
         fmt = _("This database is from an older version of GnuCash. "
-                "Do you want to want to upgrade the database "
-                "to the current version?");
-        if (gnc_verify_dialog (parent, TRUE, "%s", fmt))
-        {
-            uh_oh = FALSE;
-        }
+                "Select OK to upgrade it to the current version, Cancel "
+		"to mark it read-only.");
+
+        response = gnc_ok_cancel_dialog(parent, GTK_RESPONSE_CANCEL, "%s", fmt);
+	uh_oh = (response == GTK_RESPONSE_CANCEL);
         break;
 
+    case ERR_SQL_DB_TOO_NEW:
+        fmt = _("This database is from a newer version of GnuCash. "
+                "This version can read it, but cannot safely save to it. "
+		"It will be marked read-only until you do File>Save As.");
+        gnc_warning_dialog (parent, "%s", fmt);
+	uh_oh = TRUE;
+        break;
+
     case ERR_SQL_DB_BUSY:
         fmt = _("The SQL database is in use by other users, "
                 "and the upgrade cannot be performed until they logoff. "
@@ -740,8 +747,7 @@
         }
     }
     /* if the database doesn't exist, ask the user ... */
-    else if ((ERR_BACKEND_NO_SUCH_DB == io_err) ||
-             (ERR_SQL_DB_TOO_OLD == io_err))
+    else if ((ERR_BACKEND_NO_SUCH_DB == io_err))
     {
         if (FALSE == show_session_error (io_err, newfile, GNC_FILE_DIALOG_OPEN))
         {
@@ -757,12 +763,12 @@
      * don't bother with the message, just die. */
     io_err = qof_session_get_error (new_session);
     if ((ERR_BACKEND_LOCKED == io_err) ||
-            (ERR_BACKEND_READONLY == io_err) ||
-            (ERR_BACKEND_NO_SUCH_DB == io_err) ||
-            (ERR_SQL_DB_TOO_OLD == io_err))
+	(ERR_BACKEND_READONLY == io_err) ||
+	(ERR_BACKEND_NO_SUCH_DB == io_err))
     {
         uh_oh = TRUE;
     }
+
     else
     {
         uh_oh = show_session_error (io_err, newfile, GNC_FILE_DIALOG_OPEN);
@@ -786,11 +792,10 @@
         xaccLogEnable();
 
         /* check for i/o error, put up appropriate error dialog */
-        io_err = qof_session_get_error (new_session);
+        io_err = qof_session_pop_error (new_session);
 
         if (io_err == ERR_FILEIO_NO_ENCODING)
         {
-            qof_session_pop_error (new_session);
             if (gnc_xml_convert_single_file (newfile))
             {
                 /* try to load once again */
@@ -807,7 +812,24 @@
         }
 
         uh_oh = show_session_error (io_err, newfile, GNC_FILE_DIALOG_OPEN);
-
+	/* Attempt to update the database if it's too old */
+	if ( !uh_oh && io_err == ERR_SQL_DB_TOO_OLD )
+	{
+	    gnc_window_show_progress(_("Re-saving user data..."), 0.0);
+	    qof_session_safe_save(new_session, gnc_window_show_progress);
+	    io_err = qof_session_get_error(new_session);
+	    uh_oh = show_session_error(io_err, newfile, GNC_FILE_DIALOG_SAVE);
+	}
+	/* Database is either too old and couldn't (or user didn't
+	 * want it to) be updated or it's too new. Mark it as
+	 * read-only
+	 */
+	if (uh_oh &&  io_err == ERR_SQL_DB_TOO_OLD ||
+	    io_err == ERR_SQL_DB_TOO_NEW)
+	{
+	    qof_book_mark_readonly(qof_session_get_book(new_session));
+	    uh_oh = FALSE;
+	}
         new_root = gnc_book_get_root_account (qof_session_get_book (new_session));
         if (uh_oh) new_root = NULL;
 

Modified: gnucash/trunk/src/gnome-utils/gnc-main-window.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-main-window.c	2011-01-23 17:35:31 UTC (rev 20154)
+++ gnucash/trunk/src/gnome-utils/gnc-main-window.c	2011-01-23 17:50:43 UTC (rev 20155)
@@ -2351,12 +2351,15 @@
 {
     GncMainWindow* window = GNC_MAIN_WINDOW(data);
     GtkWidget* dialog;
-
+    gchar *reason = ".";
+    if ( errcode == ERR_BACKEND_READONLY )
+	reason = _(": Book is marked read-only.");
     dialog = gtk_message_dialog_new( GTK_WINDOW(window),
                                      GTK_DIALOG_DESTROY_WITH_PARENT,
                                      GTK_MESSAGE_ERROR,
                                      GTK_BUTTONS_CLOSE,
-                                     "Unable to save to database" );
+                                     _("Unable to save to database%s"),
+				     reason );
     gtk_dialog_run(GTK_DIALOG (dialog));
     gtk_widget_destroy(dialog);
 



More information about the gnucash-changes mailing list