[Gnucash-changes] Adding show_session_error support to inform the
user of any write errors
Neil Williams
codehelp at cvs.gnucash.org
Mon Apr 11 11:29:14 EDT 2005
Log Message:
-----------
Adding show_session_error support to inform the user of any write errors
reported by any backend.
Tags:
----
gnucash-gnome2-dev
Modified Files:
--------------
gnucash:
ChangeLog
gnucash/src/app-file:
gnc-file.c
gnc-file.h
gnucash/src/backend/file:
gnc-book-xml-v2.c
io-gncxml-v2.c
gnucash/src/backend/qsf:
qsf-backend.c
gnucash/src/business/business-gnome:
gnc-plugin-business.c
gnucash/src/engine:
qof_book_merge.c
qofbackend.h
gnucash/src/gnome:
Makefile.am
dialog-chart-export.c
gnucash/src/gnome/glade:
chart-export.glade
Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1487.2.188
retrieving revision 1.1487.2.189
diff -LChangeLog -LChangeLog -u -r1.1487.2.188 -r1.1487.2.189
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,27 @@
+2005-04-11 Neil Williams <linux at codehelp.co.uk>
+ * src/app-file/gnc-file.c: Added handlers for
+ write errors and made show_session_error()
+ non-static.
+ * src/app-file/gnc-file.h: Added prototype
+ for show_session_error() so that it can be called
+ to handle errors reported by any backend operation.
+ * src/backend/file/gnc-book-xml-v2.c:
+ * src/backend/file/io-gncxml-v2.c: Wrapping fprintf()
+ in error handler to catch failed write operations.
+ * src/backend/qsf/qsf-backend.c: Handling write errors
+ on QSF export.
+ * src/business/business-gnome/gnc-plugin-business.c:
+ Adding show_session_error support to inform the user of
+ any write errors reported by QSF.
+ * src/engine/qof_book_merge.c: Re-instating fixes to
+ QOF_TYPE_CHAR handling in merge.
+ * src/engine/qofbackend.h: Definition of ERR_FILEIO_WRITE_ERROR
+ * src/gnome/Makefile.am: Building dialog-chart-export with
+ show_session_error from libgncmod-app-file
+ * src/gnome/dialog-chart-export.c: Handling write errors
+ reported by QSF backend, uses show_session_error()
+ * src/gnome/glade/chart-export.glade: Removing nuisance tooltip.
+
2005-04-03 David Hampton <hampton at employees.org>
* configure.in: Remove reqirement for Berkeley DB. The G2 branch
Index: dialog-chart-export.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/Attic/dialog-chart-export.c,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -Lsrc/gnome/dialog-chart-export.c -Lsrc/gnome/dialog-chart-export.c -u -r1.1.2.4 -r1.1.2.5
--- src/gnome/dialog-chart-export.c
+++ src/gnome/dialog-chart-export.c
@@ -34,6 +34,7 @@
#include "global-options.h"
#include "gnc-event.h"
#include "gnc-file-dialog.h"
+#include "gnc-file.h"
#define EQUITY_ACCOUNT_NAME _("Opening Balances")
#define OPENING_BALANCE_DESC _("Opening Balance")
@@ -261,6 +262,7 @@
qof_object_foreach(GNC_ID_SPLIT, book, chart_reference_cb, data);
g_list_free(data->param_ref_list);
qof_session_save(chart_session, NULL);
+ show_session_error(qof_session_get_error(chart_session), filename);
gnc_engine_resume_events();
}
qof_session_end(chart_session);
Index: Makefile.am
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/Makefile.am,v
retrieving revision 1.107.4.17
retrieving revision 1.107.4.18
diff -Lsrc/gnome/Makefile.am -Lsrc/gnome/Makefile.am -u -r1.107.4.17 -r1.107.4.18
--- src/gnome/Makefile.am
+++ src/gnome/Makefile.am
@@ -15,6 +15,7 @@
${top_builddir}/src/report/report-gnome/libgncmod-report-gnome.la \
${top_builddir}/src/register/ledger-core/libgncmod-ledger-core.la \
${top_builddir}/src/gnome-search/libgncmod-gnome-search.la \
+ ${top_builddir}/src/app-file/libgncmod-app-file.la \
${top_builddir}/lib/egg/libegg.la \
${GUILE_LIBS} ${GNOME_LIBS} ${GLIB_LIBS}
Index: io-gncxml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/io-gncxml-v2.c,v
retrieving revision 1.24.4.5
retrieving revision 1.24.4.6
diff -Lsrc/backend/file/io-gncxml-v2.c -Lsrc/backend/file/io-gncxml-v2.c -u -r1.24.4.5 -r1.24.4.6
--- src/backend/file/io-gncxml-v2.c
+++ src/backend/file/io-gncxml-v2.c
@@ -753,7 +753,6 @@
char *type;
va_start(ap, out);
-
type = va_arg(ap, char *);
while(type)
@@ -854,15 +853,22 @@
}
xmlElemDump(out, NULL, node);
- fprintf(out, "\n");
+ if(fprintf(out, "\n") < 0)
+ {
+ qof_backend_set_error(qof_book_get_backend(book), ERR_FILEIO_WRITE_ERROR);
+ return;
+ }
xmlFreeNode(node);
#endif
be_data.out = out;
be_data.book = book;
-
- fprintf( out, "<%s version=\"%s\">\n", BOOK_TAG, gnc_v2_book_version_string );
+ if(fprintf( out, "<%s version=\"%s\">\n", BOOK_TAG, gnc_v2_book_version_string) < 0)
+ {
+ qof_backend_set_error(qof_book_get_backend(book), ERR_FILEIO_WRITE_ERROR);
+ return;
+ }
write_book_parts (out, book);
write_counts(out,
@@ -888,7 +894,9 @@
gncObjectForeachBackend (GNC_FILE_BACKEND, write_data_cb, &be_data);
- fprintf( out, "</%s>\n", BOOK_TAG );
+ if(fprintf( out, "</%s>\n", BOOK_TAG ) < 0) {
+ qof_backend_set_error(qof_book_get_backend(book), ERR_FILEIO_WRITE_ERROR);
+ }
}
void
Index: gnc-book-xml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/gnc-book-xml-v2.c,v
retrieving revision 1.6.4.3
retrieving revision 1.6.4.4
diff -Lsrc/backend/file/gnc-book-xml-v2.c -Lsrc/backend/file/gnc-book-xml-v2.c -u -r1.6.4.3 -r1.6.4.4
--- src/backend/file/gnc-book-xml-v2.c
+++ src/backend/file/gnc-book-xml-v2.c
@@ -158,7 +158,11 @@
domnode = guid_to_dom_tree(book_id_string, qof_book_get_guid(book));
xmlElemDump(out, NULL, domnode);
- fprintf(out, "\n");
+ if(fprintf(out, "\n") < 0) {
+ qof_backend_set_error(qof_book_get_backend(book), ERR_FILEIO_WRITE_ERROR);
+ xmlFreeNode (domnode);
+ return;
+ }
xmlFreeNode (domnode);
if(qof_book_get_slots(book))
@@ -174,6 +178,7 @@
}
}
+
/* ================================================================ */
static gboolean
Index: qsf-backend.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/qsf/Attic/qsf-backend.c,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -Lsrc/backend/qsf/qsf-backend.c -Lsrc/backend/qsf/qsf-backend.c -u -r1.1.2.6 -r1.1.2.7
--- src/backend/qsf/qsf-backend.c
+++ src/backend/qsf/qsf-backend.c
@@ -132,15 +132,10 @@
qsf_session_end( QofBackend *be)
{
QSFBackend *qsf_be;
- GList *book_ref_list;
- QofBook *book;
qsf_be = (QSFBackend*)be;
g_return_if_fail(qsf_be != NULL);
- book = qsf_be->params->book;
- book_ref_list = (GList*)qof_book_get_data(book, ENTITYREFERENCE);
- g_list_free(book_ref_list);
- qof_book_set_data(book, PARTIAL_QOFBOOK, (gboolean*)FALSE);
+
qsf_free_params(qsf_be->params);
g_free(qsf_be->fullpath);
qsf_be->fullpath = NULL;
@@ -605,16 +600,25 @@
return params->output_doc;
}
-static void
+static gboolean
write_qsf_from_book(FILE *out, QofBook *book)
{
xmlDocPtr qsf_doc;
+ gint write_result;
+ QofBackend *be;
qsf_doc = qofbook_to_qsf(book);
- g_return_if_fail(qsf_is_valid(QSF_SCHEMA_DIR, QSF_OBJECT_SCHEMA, qsf_doc) == TRUE);
- xmlDocFormatDump(out, qsf_doc, 1);
+ write_result = 0;
+ g_return_val_if_fail(qsf_is_valid(QSF_SCHEMA_DIR, QSF_OBJECT_SCHEMA, qsf_doc) == TRUE, FALSE);
+ write_result = xmlDocFormatDump(out, qsf_doc, 1);
+ if(write_result < 0) {
+ be = qof_book_get_backend(book);
+ qof_backend_set_error(be, ERR_FILEIO_WRITE_ERROR);
+ return FALSE;
+ }
fprintf(out, "\n");
xmlFreeDoc(qsf_doc);
+ return TRUE;
}
static void
@@ -635,6 +639,7 @@
QSFBackend *qsf_be;
FILE *out;
char *path;
+ gboolean result;
qsf_be = (QSFBackend*)be;
/* if fullpath is blank, book_id was set to QOF_STDOUT */
@@ -644,7 +649,11 @@
}
path = strdup(qsf_be->fullpath);
out = fopen(path, "w");
- write_qsf_from_book(out, book);
+ result = write_qsf_from_book(out, book);
+ if(result == FALSE) {
+ g_free(path);
+ return;
+ }
g_free(path);
fclose(out);
}
Index: gnc-plugin-business.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-gnome/Attic/gnc-plugin-business.c,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -Lsrc/business/business-gnome/gnc-plugin-business.c -Lsrc/business/business-gnome/gnc-plugin-business.c -u -r1.1.2.7 -r1.1.2.8
--- src/business/business-gnome/gnc-plugin-business.c
+++ src/business/business-gnome/gnc-plugin-business.c
@@ -40,7 +40,7 @@
#include "messages.h"
#include "gnc-ui-util.h"
#include "gnc-file-dialog.h"
-
+#include "gnc-file.h"
/* g_object functions */
static void gnc_plugin_business_class_init (GncPluginBusinessClass *klass);
@@ -635,6 +635,7 @@
qof_session_save(chart_session, NULL);
}
}
+ show_session_error(qof_session_get_error(chart_session), filename);
g_free(filename);
qof_session_end(chart_session);
qof_session_set_current_session(current_session);
@@ -664,6 +665,7 @@
qof_session_save(chart_session, NULL);
}
}
+ show_session_error(qof_session_get_error(chart_session), filename);
qof_session_end(chart_session);
g_free(filename);
qof_session_set_current_session(current_session);
@@ -693,6 +695,7 @@
qof_session_save(chart_session, NULL);
}
}
+ show_session_error(qof_session_get_error(chart_session), filename);
qof_session_end(chart_session);
g_free(filename);
qof_session_set_current_session(current_session);
@@ -722,6 +725,7 @@
qof_session_save(chart_session, NULL);
}
}
+ show_session_error(qof_session_get_error(chart_session), filename);
qof_session_end(chart_session);
g_free(filename);
qof_session_set_current_session(current_session);
Index: gnc-file.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/app-file/gnc-file.c,v
retrieving revision 1.25.4.10
retrieving revision 1.25.4.11
diff -Lsrc/app-file/gnc-file.c -Lsrc/app-file/gnc-file.c -u -r1.25.4.10 -r1.25.4.11
--- src/app-file/gnc-file.c
+++ src/app-file/gnc-file.c
@@ -84,7 +84,7 @@
qof_session_get_current_session ();
}
-static gboolean
+gboolean
show_session_error (QofBackendError io_error, const char *newfile)
{
GtkWidget *parent = gnc_ui_get_toplevel();
@@ -287,6 +287,18 @@
gnc_error_dialog(parent, fmt, newfile);
break;
+ case ERR_FILEIO_BACKUP_ERROR:
+ fmt = _("Could not make a backup of %s\n");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_FILEIO_WRITE_ERROR:
+ fmt = _("Could not write to %s\nCheck that you have"
+ " permission to write to this file and that "
+ " there is sufficient space to create it.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
case ERR_SQL_DB_TOO_OLD:
fmt = _("This database is from an older version of GnuCash.\n"
"Do you want to want to upgrade the database "
Index: gnc-file.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/app-file/gnc-file.h,v
retrieving revision 1.6.4.1
retrieving revision 1.6.4.2
diff -Lsrc/app-file/gnc-file.h -Lsrc/app-file/gnc-file.h -u -r1.6.4.1 -r1.6.4.2
--- src/app-file/gnc-file.h
+++ src/app-file/gnc-file.h
@@ -114,12 +114,18 @@
#define GNC_FILE_H
#include <glib.h>
+#include "qofbackend.h"
void gnc_file_new (void);
gboolean gnc_file_open (void);
void gnc_file_save (void);
void gnc_file_save_as (void);
+/** Tell the user about errors in the backends
+
+*/
+gboolean show_session_error (QofBackendError io_error, const char *newfile);
+
gboolean gnc_file_open_file (const char *filename);
void gnc_file_export_file(const char * filename);
Index: qof_book_merge.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qof_book_merge.c,v
retrieving revision 1.2.2.5
retrieving revision 1.2.2.6
diff -Lsrc/engine/qof_book_merge.c -Lsrc/engine/qof_book_merge.c -u -r1.2.2.5 -r1.2.2.6
--- src/engine/qof_book_merge.c
+++ src/engine/qof_book_merge.c
@@ -112,9 +112,7 @@
g_free(mergeData);
}
-/* Q: This could be a general usage function:
- qof_param_as_string(QofParam*, QofEntity*);
- Useful? Worth transferring to qofclass.c?
+/*
Need to fix the KVP->string. How?
The QOF_TYPE_DATE output format from
@@ -142,6 +140,7 @@
gboolean param_boolean, (*boolean_getter) (QofEntity*, QofParam*);
gint32 param_i32, (*int32_getter) (QofEntity*, QofParam*);
gint64 param_i64, (*int64_getter) (QofEntity*, QofParam*);
+ char param_char, (*char_getter) (QofEntity*, QofParam*);
param_string = NULL;
paramType = qtparam->param_type;
@@ -205,7 +204,9 @@
return param_string;
}
if(safe_strcmp(paramType, QOF_TYPE_CHAR) == 0) {
- param_string = g_strdup(qtparam->param_getfcn(qtEnt,qtparam));
+ char_getter = (char (*)(QofEntity*, QofParam*)) qtparam->param_getfcn;
+ param_char = char_getter(qtEnt, qtparam);
+ param_string = g_strdup_printf("%c", param_char);
return param_string;
}
return NULL;
@@ -350,6 +351,7 @@
qof_book_mergeCompare( qof_book_mergeData *mergeData )
{
qof_book_mergeRule *currentRule;
+
gchar *stringImport, *stringTarget, *charImport, *charTarget;
QofEntity *mergeEnt, *targetEnt, *referenceEnt;
const GUID *guidImport, *guidTarget;
Index: qofbackend.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofbackend.h,v
retrieving revision 1.3.4.5
retrieving revision 1.3.4.6
diff -Lsrc/engine/qofbackend.h -Lsrc/engine/qofbackend.h -u -r1.3.4.5 -r1.3.4.6
--- src/engine/qofbackend.h
+++ src/engine/qofbackend.h
@@ -41,7 +41,7 @@
#define QOF_BACKEND_H
/** \brief The errors that can be reported to the GUI & other front-end users
- * \warning If you modify QofBackendError, please update
+ * \warning (GnuCash) If you modify QofBackendError, please update
* src/engine/gw-engine-spec.scm
*/
typedef enum {
@@ -106,6 +106,7 @@
ERR_FILEIO_UNKNOWN_FILE_TYPE, /**< didn't recognize the file type */
ERR_FILEIO_PARSE_ERROR, /**< couldn't parse the data in the file */
ERR_FILEIO_BACKUP_ERROR, /**< couldn't make a backup of the file */
+ ERR_FILEIO_WRITE_ERROR, /**< couldn't write to the file */
/* network errors */
ERR_NETIO_SHORT_READ = 2000, /**< not enough bytes received */
Index: chart-export.glade
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/glade/Attic/chart-export.glade,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -Lsrc/gnome/glade/chart-export.glade -Lsrc/gnome/glade/chart-export.glade -u -r1.1.2.2 -r1.1.2.3
--- src/gnome/glade/chart-export.glade
+++ src/gnome/glade/chart-export.glade
@@ -166,7 +166,6 @@
<widget class="GtkFileChooserDialog" id="chartfilechooserdialog">
<property name="visible">True</property>
- <property name="tooltip" translatable="yes">The extension .xml is optional</property>
<property name="action">GTK_FILE_CHOOSER_ACTION_SAVE</property>
<property name="local_only">True</property>
<property name="select_multiple">False</property>
More information about the gnucash-changes
mailing list