r21517 - gnucash/trunk/src/libqof/qof - Add is_readonly attribute to QofSession class.

Christian Stimming cstim at code.gnucash.org
Thu Nov 3 17:48:01 EDT 2011


Author: cstim
Date: 2011-11-03 17:48:00 -0400 (Thu, 03 Nov 2011)
New Revision: 21517
Trac: http://svn.gnucash.org/trac/changeset/21517

Modified:
   gnucash/trunk/src/libqof/qof/qofsession-p.h
   gnucash/trunk/src/libqof/qof/qofsession.c
   gnucash/trunk/src/libqof/qof/qofsession.h
Log:
Add is_readonly attribute to QofSession class.

Modified: gnucash/trunk/src/libqof/qof/qofsession-p.h
===================================================================
--- gnucash/trunk/src/libqof/qof/qofsession-p.h	2011-11-03 17:05:06 UTC (rev 21516)
+++ gnucash/trunk/src/libqof/qof/qofsession-p.h	2011-11-03 21:48:00 UTC (rev 21517)
@@ -64,6 +64,7 @@
      * between the persistant store and the local engine.  */
     QofBackend *backend;
     gint lock;
+    gboolean is_readonly;
 };
 
 

Modified: gnucash/trunk/src/libqof/qof/qofsession.c
===================================================================
--- gnucash/trunk/src/libqof/qof/qofsession.c	2011-11-03 17:05:06 UTC (rev 21516)
+++ gnucash/trunk/src/libqof/qof/qofsession.c	2011-11-03 21:48:00 UTC (rev 21517)
@@ -218,6 +218,7 @@
     session->book_id = NULL;
     session->backend = NULL;
     session->lock = 1;
+    session->is_readonly = FALSE;
 
     qof_session_clear_error (session);
 }
@@ -285,6 +286,18 @@
     return session->backend;
 }
 
+gboolean qof_session_is_readonly(const QofSession * session)
+{
+    g_assert(session);
+    return session->is_readonly;
+}
+
+void qof_session_set_readonly(QofSession* session, gboolean is_readonly)
+{
+    g_assert(session);
+    session->is_readonly = is_readonly;
+}
+
 const char *
 qof_session_get_file_path (const QofSession *session)
 {
@@ -649,6 +662,15 @@
            session, session->book_id ? session->book_id : "(null)");
     /* Partial book handling. */
     book = qof_session_get_book(session);
+
+    if (qof_session_is_readonly(session) || qof_book_is_readonly(book))
+    {
+        // Well, we are read-only, so saving is not allowed.
+        msg = g_strdup_printf("session is marked as read-only");
+        qof_session_push_error(session, ERR_BACKEND_READONLY, msg);
+        goto leave;
+    }
+
     partial = (gboolean)GPOINTER_TO_INT(qof_book_get_data(book, PARTIAL_QOFBOOK));
     change_backend = FALSE;
     msg = g_strdup_printf(" ");
@@ -800,6 +822,13 @@
     char *msg = NULL;
     g_return_if_fail( be != NULL );
     g_return_if_fail( be->safe_sync != NULL );
+    if (qof_session_is_readonly(session))
+    {
+        // Well, we are read-only, so saving is not allowed.
+        qof_session_push_error(session, ERR_BACKEND_READONLY, "session is marked as read-only");
+        return;
+    }
+
     be->percentage = percentage_func;
     (be->safe_sync)( be, qof_session_get_book( session ));
     err = qof_backend_get_error(session->backend);

Modified: gnucash/trunk/src/libqof/qof/qofsession.h
===================================================================
--- gnucash/trunk/src/libqof/qof/qofsession.h	2011-11-03 17:05:06 UTC (rev 21516)
+++ gnucash/trunk/src/libqof/qof/qofsession.h	2011-11-03 21:48:00 UTC (rev 21517)
@@ -219,6 +219,12 @@
 
 const char * qof_session_get_url (const QofSession *session);
 
+/** Returns TRUE if this session is marked as read-only, otherwise FALSE. */
+gboolean qof_session_is_readonly(const QofSession * session);
+
+/** Sets the is_readonly value to the given value. */
+void qof_session_set_readonly(QofSession* session, gboolean is_readonly);
+
 /**
  * The qof_session_not_saved() subroutine will return TRUE
  *    if any data in the session hasn't been saved to long-term storage.



More information about the gnucash-changes mailing list