r14970 - gnucash/branches/swig-redo/src - Move all of the Session handling for the price-quotes loading from
Chris Shoemaker
chris at cvs.gnucash.org
Mon Oct 9 20:02:21 EDT 2006
Author: chris
Date: 2006-10-09 20:02:20 -0400 (Mon, 09 Oct 2006)
New Revision: 14970
Trac: http://svn.gnucash.org/trac/changeset/14970
Modified:
gnucash/branches/swig-redo/src/bin/gnucash-bin.c
gnucash/branches/swig-redo/src/engine/engine-utilities.scm
gnucash/branches/swig-redo/src/scm/price-quotes.scm
Log:
Move all of the Session handling for the price-quotes loading from
guile to C. (This is only related to swigification insofar as it
removes the need to wrap some Backend code.)
Modified: gnucash/branches/swig-redo/src/bin/gnucash-bin.c
===================================================================
--- gnucash/branches/swig-redo/src/bin/gnucash-bin.c 2006-10-10 00:01:54 UTC (rev 14969)
+++ gnucash/branches/swig-redo/src/bin/gnucash-bin.c 2006-10-10 00:02:20 UTC (rev 14970)
@@ -49,6 +49,9 @@
#include "gnc-plugin-file-history.h"
#include "gnc-gconf-utils.h"
#include "dialog-new-user.h"
+#include "gnc-session.h"
+#include "engine-helpers.h"
+#include <g-wrap-wct.h>
/* GNUCASH_SVN is defined whenever we're building from an SVN tree */
#ifdef GNUCASH_SVN
@@ -360,8 +363,9 @@
static void
inner_main_add_price_quotes(void *closure, int argc, char **argv)
{
- SCM mod, add_quotes, scm_filename, scm_result;
-
+ SCM mod, add_quotes, scm_book, scm_result = SCM_BOOL_F;
+ QofSession *session;
+
mod = scm_c_resolve_module("gnucash price-quotes");
scm_set_current_module(mod);
@@ -370,22 +374,42 @@
qof_event_suspend();
scm_c_eval_string("(gnc:price-quotes-install-sources)");
- if (gnc_quote_source_fq_installed()) {
- add_quotes = scm_c_eval_string("gnc:add-quotes-to-book-at-url");
- scm_filename = scm_makfrom0str (add_quotes_file);
- scm_result = scm_call_1(add_quotes, scm_filename);
+ if (!gnc_quote_source_fq_installed()) {
+ g_print(_("No quotes retrieved. Finance::Quote isn't "
+ "installed properly.\n"));
+ goto fail;
+ }
- if (!SCM_NFALSEP(scm_result)) {
+ add_quotes = scm_c_eval_string("gnc:book-add-quotes");
+ session = gnc_get_current_session();
+ if (!session) goto fail;
+
+ qof_session_begin(session, add_quotes_file, FALSE, FALSE);
+ if (qof_session_get_error(session) != ERR_BACKEND_NO_ERR) goto fail;
+
+ qof_session_load(session, NULL);
+ if (qof_session_get_error(session) != ERR_BACKEND_NO_ERR) goto fail;
+
+ scm_book = gnc_book_to_scm(qof_session_get_book(session));
+ scm_result = scm_call_2(add_quotes, SCM_BOOL_F, scm_book);
+
+ qof_session_save(session, NULL);
+ if (qof_session_get_error(session) != ERR_BACKEND_NO_ERR) goto fail;
+
+ qof_session_destroy(session);
+ if (!SCM_NFALSEP(scm_result)) {
g_error("Failed to add quotes to %s.", add_quotes_file);
- gnc_shutdown(1);
- }
- } else {
- g_print(_("No quotes retrieved. Finance::Quote isn't installed properly.\n"));
+ goto fail;
}
qof_event_resume();
gnc_shutdown(0);
return;
+ fail:
+ if (session && qof_session_get_error(session) != ERR_BACKEND_NO_ERR)
+ g_error("Session Error: %s", qof_session_get_error_message(session));
+ qof_event_resume();
+ gnc_shutdown(1);
}
static char *
Modified: gnucash/branches/swig-redo/src/engine/engine-utilities.scm
===================================================================
--- gnucash/branches/swig-redo/src/engine/engine-utilities.scm 2006-10-10 00:01:54 UTC (rev 14969)
+++ gnucash/branches/swig-redo/src/engine/engine-utilities.scm 2006-10-10 00:02:20 UTC (rev 14970)
@@ -21,23 +21,6 @@
;; Copyright 2000 Rob Browning <rlb at cs.utexas.edu>
-(define (gnc:url->loaded-session session url ignore-lock? create-if-needed?)
- ;; Return a <gnc:Book*> representing the data stored at the given
- ;; url or #f on failure -- this should later be changed to returning
- ;; the symbol representing the book error... On success, the book
- ;; will already be loaded.
-
- (let* ((result (and session
- (gnc:session-begin session url
- ignore-lock?
- create-if-needed?)
- (eq? 'no-err (gw:enum-<gnc:BackendError>-val->sym
- (gnc:session-get-error session) #f))
- (gnc:session-load session)
- session)))
- (or result
- (begin (gnc:session-destroy session) #f))))
-
(define (gnc:group-map-all-accounts thunk group)
(let ((accounts (or (gnc:group-get-subaccounts group) '())))
(map thunk accounts)))
Modified: gnucash/branches/swig-redo/src/scm/price-quotes.scm
===================================================================
--- gnucash/branches/swig-redo/src/scm/price-quotes.scm 2006-10-10 00:01:54 UTC (rev 14969)
+++ gnucash/branches/swig-redo/src/scm/price-quotes.scm 2006-10-10 00:02:20 UTC (rev 14970)
@@ -736,30 +736,6 @@
(lambda (x) (not (string? x)))
prices)))))))
-(define (gnc:add-quotes-to-book-at-url url)
- (let* ((session (gnc:url->loaded-session (gnc:get-current-session) url #f #f))
- (quote-ok? #f))
- (gnc:debug "in add-quotes-to-book-at-url")
- (if session
- (begin
- (gnc:debug "about to call gnc:book-add-quotes")
- (set! quote-ok? (and (gnc:book-add-quotes #f
- (gnc:session-get-book session))))
-
- (gnc:debug "done gnc:book-add-quotes:" quote-ok?)
- (if (not quote-ok?) (gnc:error "book-add-quotes failed"))
- (gnc:session-save session)
- (if (not (eq? 'no-err
- (gw:enum-<gnc:BackendError>-val->sym
- (gnc:session-get-error session) #f)))
- (set! quote-ok? #f))
- (if (not quote-ok?)
- (gnc:error "session-save failed "
- (gnc:session-get-error session)))
- (gnc:session-destroy session))
- (gnc:error "book-add-quotes unable to open file"))
- quote-ok?))
-
; (define (get-1-quote exchange . items)
; (let ((cmd (apply list 'fetch exchange items))
; (quoter (run-sub-process #f
More information about the gnucash-changes
mailing list