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