static void inner_main_add_price_quotes(void *closure, int argc, char **argv) { SCM mod, add_quotes, scm_book, scm_result = SCM_BOOL_F; QofSession *session = NULL; scm_c_eval_string("(debug-set! stack 200000)"); mod = scm_c_resolve_module("gnucash price-quotes"); scm_set_current_module(mod); load_gnucash_modules(); qof_event_suspend(); scm_c_eval_string("(gnc:price-quotes-install-sources)"); if (!gnc_quote_source_fq_installed()) { g_print("%s", _("No quotes retrieved. Finance::Quote isn't " "installed properly.\n")); goto fail; } 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_is_true(scm_result)) { g_warning("Failed to add quotes to %s.", add_quotes_file); goto fail; } qof_event_resume(); gnc_shutdown(0); return; fail: if (session && qof_session_get_error(session) != ERR_BACKEND_NO_ERR) g_warning("Session Error: %s", qof_session_get_error_message(session)); qof_event_resume(); gnc_shutdown(1); }
void gnc_prices_dialog_get_quotes_clicked (GtkWidget *widget, gpointer data) { PricesDialog *pdb_dialog = data; SCM quotes_func; SCM book_scm; SCM scm_window; ENTER(" "); quotes_func = scm_c_eval_string ("gnc:book-add-quotes"); if (!scm_is_procedure (quotes_func)) { LEAVE(" no procedure"); return; } book_scm = gnc_book_to_scm (pdb_dialog->book); if (scm_is_true (scm_not (book_scm))) { LEAVE("no book"); return; } scm_window = SWIG_NewPointerObj(pdb_dialog->dialog, SWIG_TypeQuery("_p_GtkWidget"), 0); gnc_set_busy_cursor (NULL, TRUE); scm_call_2 (quotes_func, scm_window, book_scm); gnc_unset_busy_cursor (NULL); /* Without this, the summary bar on the accounts tab * won't reflect the new prices (bug #522095). */ gnc_gui_refresh_all (); LEAVE(" "); }
/********************************************************************\ * gnc_copy_split_scm_onto_split * * copies a scheme representation of a split onto an actual split.* * * * Args: split_scm - the scheme representation of a split * * split - the split to copy onto * * Returns: Nothing * \********************************************************************/ void gnc_copy_split_scm_onto_split(SCM split_scm, Split *split, QofBook * book) { static swig_type_info *split_type = NULL; SCM result; SCM func; SCM arg; if (split_scm == SCM_UNDEFINED) return; if (split == NULL) return; g_return_if_fail (book); func = scm_c_eval_string("gnc:split-scm?"); if (!scm_is_procedure(func)) return; result = scm_call_1(func, split_scm); if (!scm_is_true(result)) return; func = scm_c_eval_string("gnc:split-scm-onto-split"); if (!scm_is_procedure(func)) return; if (!split_type) split_type = SWIG_TypeQuery("_p_Split"); arg = SWIG_NewPointerObj(split, split_type, 0); scm_call_3(func, split_scm, arg, gnc_book_to_scm (book)); }
/********************************************************************\ * gnc_copy_trans_scm_onto_trans_swap_accounts * * copies a scheme representation of a transaction onto * * an actual transaction. If guid_1 and guid_2 are not NULL, * * the account guids of the splits are swapped accordingly. * * * * Args: trans_scm - the scheme representation of a transaction * * trans - the transaction to copy onto * * guid_1 - account guid to swap with guid_2 * * guid_2 - account guid to swap with guid_1 * * do_commit - whether to commit the edits * * Returns: Nothing * \********************************************************************/ void gnc_copy_trans_scm_onto_trans_swap_accounts(SCM trans_scm, Transaction *trans, const GncGUID *guid_1, const GncGUID *guid_2, gboolean do_commit, QofBook *book) { static swig_type_info *trans_type = NULL; SCM result; SCM func; SCM arg; if (trans_scm == SCM_UNDEFINED) return; if (trans == NULL) return; g_return_if_fail (book); func = scm_c_eval_string("gnc:transaction-scm?"); if (!scm_is_procedure(func)) return; result = scm_call_1(func, trans_scm); if (!scm_is_true(result)) return; func = scm_c_eval_string("gnc:transaction-scm-onto-transaction"); if (!scm_is_procedure(func)) return; if (!trans_type) trans_type = SWIG_TypeQuery("_p_Transaction"); arg = SWIG_NewPointerObj(trans, trans_type, 0); if ((guid_1 == NULL) || (guid_2 == NULL)) { SCM args = SCM_EOL; SCM commit; commit = SCM_BOOL(do_commit); args = scm_cons(gnc_book_to_scm (book), args); args = scm_cons(commit, args); args = scm_cons(SCM_EOL, args); args = scm_cons(arg, args); args = scm_cons(trans_scm, args); scm_apply(func, args, SCM_EOL); } else { gchar guidstr[GUID_ENCODING_LENGTH+1]; SCM from, to; SCM map = SCM_EOL; SCM args = SCM_EOL; SCM commit; args = scm_cons(gnc_book_to_scm (book), args); commit = SCM_BOOL(do_commit); args = scm_cons(commit, args); guid_to_string_buff(guid_1, guidstr); from = scm_from_utf8_string(guidstr); guid_to_string_buff(guid_2, guidstr); to = scm_from_utf8_string(guidstr); map = scm_cons(scm_cons(from, to), map); map = scm_cons(scm_cons(to, from), map); args = scm_cons(map, args); args = scm_cons(arg, args); args = scm_cons(trans_scm, args); scm_apply(func, args, SCM_EOL); } }