gnucash master: Multiple changes pushed
John Ralls
jralls at code.gnucash.org
Sat Oct 29 21:00:45 EDT 2022
Updated via https://github.com/Gnucash/gnucash/commit/6c7e50ef (commit)
via https://github.com/Gnucash/gnucash/commit/79723b06 (commit)
via https://github.com/Gnucash/gnucash/commit/5a045546 (commit)
via https://github.com/Gnucash/gnucash/commit/118fc8cb (commit)
via https://github.com/Gnucash/gnucash/commit/909d857c (commit)
via https://github.com/Gnucash/gnucash/commit/28349096 (commit)
via https://github.com/Gnucash/gnucash/commit/86118b38 (commit)
via https://github.com/Gnucash/gnucash/commit/ca0d86a3 (commit)
from https://github.com/Gnucash/gnucash/commit/fc94b41c (commit)
commit 6c7e50efb2f2ae73da9199d184b71fd225621c02
Merge: fc94b41c8 79723b06a
Author: John Ralls <jralls at ceridwen.us>
Date: Sat Oct 29 17:29:06 2022 -0700
Merge John Ralls's 'aqb-file-import' into master.
commit 79723b06a3a947a8dea3015b5d69cc3cb76801e6
Author: John Ralls <jralls at ceridwen.us>
Date: Fri Oct 28 14:58:23 2022 -0700
Replace G_MODULE_EXPORT with static.
No need to expose those functions outside their compilation units.
diff --git a/gnucash/import-export/aqb/dialog-ab-select-imexporter.c b/gnucash/import-export/aqb/dialog-ab-select-imexporter.c
index 49ccfbcdb..73dbb10cd 100644
--- a/gnucash/import-export/aqb/dialog-ab-select-imexporter.c
+++ b/gnucash/import-export/aqb/dialog-ab-select-imexporter.c
@@ -48,41 +48,28 @@ struct _GncABSelectImExDlg
};
// Expose the selection handlers to GtkBuilder.
-G_MODULE_EXPORT gboolean imexporter_changed(GtkTreeSelection* sel,
- gpointer data);
-G_MODULE_EXPORT gboolean profile_changed(GtkTreeSelection* sel, gpointer data);
+static gboolean imexporter_changed(GtkTreeSelection* sel,
+ gpointer data);
+static gboolean profile_changed(GtkTreeSelection* sel, gpointer data);
-static gboolean
-clear_model_row (GtkTreeModel* model, GtkTreePath* path,
- GtkTreeIter* iter, gpointer data)
+enum
{
- char *name, *desc;
- g_return_val_if_fail (model && iter, TRUE);
- gtk_tree_model_get (model, iter, 0, &name, 1, &desc, -1);
- g_free (name);
- g_free (desc);
- return FALSE;
-}
-
-static void
-clear_tree_model (GtkTreeModel* model)
-{
- gtk_tree_model_foreach (model, clear_model_row, NULL);
- gtk_list_store_clear (GTK_LIST_STORE (model));
-}
+ NAME_COL,
+ PROF_COL
+};
static void
-populate_tree_model (GtkTreeModel* model, GList* entries)
+populate_list_store (GtkListStore* model, GList* entries)
{
- clear_tree_model (model);
+ gtk_list_store_clear (model);
for (GList* node = entries; node; node = g_list_next (node))
{
AB_Node_Pair *pair = (AB_Node_Pair*)(node->data);
GtkTreeIter iter;
gtk_list_store_insert_with_values (GTK_LIST_STORE (model),
&iter, -1,
- 0, pair->name,
- 1, pair->descr,
+ NAME_COL, pair->name,
+ PROF_COL, pair->descr,
-1);
g_slice_free1 (sizeof(AB_Node_Pair), pair);
}
@@ -128,7 +115,7 @@ gnc_ab_select_imex_dlg_new (GtkWidget* parent, AB_BANKING* abi)
imex_select = GTK_TREE_SELECTION (gtk_builder_get_object (builder, "imex-selection"));
prof_select = GTK_TREE_SELECTION (gtk_builder_get_object (builder, "prof-selection"));
- populate_tree_model (GTK_TREE_MODEL (imexd->imexporter_list),
+ populate_list_store (imexd->imexporter_list,
imexporters);
g_signal_connect (imex_select, "changed", G_CALLBACK(imexporter_changed),
@@ -149,10 +136,10 @@ gnc_ab_select_imex_dlg_destroy (GncABSelectImExDlg* imexd)
{
if (imexd->imexporter_list)
- clear_tree_model (GTK_TREE_MODEL (imexd->imexporter_list));
+ gtk_list_store_clear (imexd->imexporter_list);
if (imexd->profile_list)
- clear_tree_model (GTK_TREE_MODEL (imexd->profile_list));
+ gtk_list_store_clear (imexd->profile_list);
if (imexd->dialog)
gtk_widget_destroy (imexd->dialog);
@@ -174,16 +161,16 @@ imexporter_changed(GtkTreeSelection* sel, gpointer data)
char* name = NULL;
GList* profiles = NULL;
- gtk_tree_model_get (model, &iter, 0, &name, -1);
+ gtk_tree_model_get (model, &iter, NAME_COL, &name, -1);
if (name && *name)
- {
- profiles = gnc_ab_imexporter_profile_list (imexd->abi, name);
- g_free (name);
- }
- clear_tree_model (GTK_TREE_MODEL (imexd->profile_list));
+ profiles = gnc_ab_imexporter_profile_list (imexd->abi, name);
+
+ g_free (name);
+ gtk_list_store_clear (imexd->profile_list);
+
if (profiles)
{
- populate_tree_model (GTK_TREE_MODEL (imexd->profile_list), profiles);
+ populate_list_store (imexd->profile_list, profiles);
}
else
{
@@ -197,6 +184,7 @@ imexporter_changed(GtkTreeSelection* sel, gpointer data)
GtkTreeSelection* profile_sel =
gtk_tree_view_get_selection (GTK_TREE_VIEW (imexd->select_profile));
gtk_tree_selection_select_path (profile_sel, path); //should call profile_changed
+ gtk_tree_path_free (path);
}
return FALSE;
}
@@ -238,7 +226,7 @@ tree_view_get_name (GtkTreeView *tv)
if (sel && gtk_tree_selection_get_selected (sel, &model, &iter))
{
char* name;
- gtk_tree_model_get(model, &iter, 0, &name, -1);
+ gtk_tree_model_get(model, &iter, NAME_COL, &name, -1);
return name;
}
diff --git a/gnucash/import-export/aqb/dialog-ab-trans.c b/gnucash/import-export/aqb/dialog-ab-trans.c
index 74f291882..ad48391f2 100644
--- a/gnucash/import-export/aqb/dialog-ab-trans.c
+++ b/gnucash/import-export/aqb/dialog-ab-trans.c
@@ -64,26 +64,26 @@ static void gnc_ab_trans_dialog_check_iban(const GncABTransDialog *td,
const AB_TRANSACTION *trans);
/* Callbacks - connected with GtkBuilder */
-G_MODULE_EXPORT void gnc_ab_trans_dialog_add_templ_cb(GtkButton *button, gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_moveup_templ_cb(GtkButton *button, gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_movedown_templ_cb(GtkButton *button, gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_sort_templ_cb(GtkButton *button, gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_del_templ_cb(GtkButton *button, gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_ibanentry_filter_cb (GtkEditable *editable,
+static void gnc_ab_trans_dialog_add_templ_cb(GtkButton *button, gpointer user_data);
+static void gnc_ab_trans_dialog_moveup_templ_cb(GtkButton *button, gpointer user_data);
+static void gnc_ab_trans_dialog_movedown_templ_cb(GtkButton *button, gpointer user_data);
+static void gnc_ab_trans_dialog_sort_templ_cb(GtkButton *button, gpointer user_data);
+static void gnc_ab_trans_dialog_del_templ_cb(GtkButton *button, gpointer user_data);
+static void gnc_ab_trans_dialog_ibanentry_filter_cb (GtkEditable *editable,
const gchar *text,
gint length,
gint *position,
gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_bicentry_filter_cb (GtkEditable *editable,
+static void gnc_ab_trans_dialog_bicentry_filter_cb (GtkEditable *editable,
const gchar *text,
gint length,
gint *position,
gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_templ_list_row_activated_cb(GtkTreeView *view,
+static void gnc_ab_trans_dialog_templ_list_row_activated_cb(GtkTreeView *view,
GtkTreePath *path,
GtkTreeViewColumn *column,
gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_verify_values(GncABTransDialog *td);
+static void gnc_ab_trans_dialog_verify_values(GncABTransDialog *td);
enum
diff --git a/gnucash/import-export/aqb/gnc-file-aqb-import.c b/gnucash/import-export/aqb/gnc-file-aqb-import.c
index e19c49142..f786022b9 100644
--- a/gnucash/import-export/aqb/gnc-file-aqb-import.c
+++ b/gnucash/import-export/aqb/gnc-file-aqb-import.c
@@ -22,7 +22,7 @@
/**
* @internal
* @file gnc-file-aqb-import.c
- * @brief DTAUS import module code
+ * @brief File import module code
* @author Copyright (C) 2002 Benoit Grégoire <bock at step.polymtl.ca>
* @author Copyright (C) 2003 Jan-Pascal van Best <janpascal at vanbest.org>
* @author Copyright (C) 2006 Florian Steinel
@@ -103,183 +103,6 @@ named_import_get_context (GtkWindow *parent, AB_BANKING *api,
return context;
}
-static void
-report_failure (GtkWindow* parent, int num_jobs,
- int num_jobs_failed, GString* errstr)
-{
- g_warning("%s", errstr->str);
- gnc_error_dialog(parent,
- _("An error occurred while executing jobs: %d of %d failed. "
- "Please check the log window or gnucash.trace for the exact "
- "error message.\n\n%s")
- , num_jobs_failed, num_jobs, errstr->str);
-}
-
-static void
-report_no_jobs (GtkWindow *parent)
-{
- gnc_info_dialog(parent,
- _("No jobs to be sent.")
- );
-}
-
-static void
-report_success (GtkWindow *parent, int num_jobs)
-{
- gnc_info_dialog(parent, ngettext
- ("The job was executed successfully, but as a precaution "
- "please check the log window for potential errors.",
- "All %d jobs were executed successfully, but as a precaution "
- "please check the log window for potential errors.",
- num_jobs), num_jobs);
-}
-
-static gboolean
-check_job_status (GNC_AB_JOB_LIST2 *job_list, AB_BANKING *api, int *num_jobs,
- int *num_jobs_failed, GString **errstr)
-{
- static const int max_failures = 5;
- gboolean successful = TRUE;
- GNC_AB_JOB_LIST2_ITERATOR *jit;
- jit = AB_Transaction_List2_First(job_list);
- AB_Transaction_List2_freeAll(job_list);
- if (jit)
- {
- for (GNC_AB_JOB *job = AB_Transaction_List2Iterator_Data(jit);
- job != NULL;
- job = AB_Transaction_List2Iterator_Next(jit))
- {
- GNC_AB_JOB_STATUS job_status;
- *num_jobs += 1;
- job_status = AB_Transaction_GetStatus(job);
- if (job_status != AB_Transaction_StatusAccepted &&
- job_status != AB_Transaction_StatusPending)
- {
- successful = FALSE;
- *num_jobs_failed += 1;
-
- if (*num_jobs_failed <= max_failures)
- {
- gchar *fmt_str =_("Job %d status %d - %s\n");
- if (*num_jobs_failed == 1)
- {
- *errstr = g_string_new("Failed jobs:\n");
- }
- g_string_append_printf(*errstr, fmt_str, *num_jobs,
- job_status,
- AB_Transaction_Status_toString(job_status));
- }
- else
- {
- if (*num_jobs_failed == (max_failures + 1) )
- {
- /* indicate that additional failures exist */
- g_string_append(*errstr, _("...\n"));
- }
- }
- }
-
- } /* while */
- AB_Transaction_List2Iterator_free(jit);
- }
- return successful;
-}
-
-static void
-do_execute_transactions (GtkWindow *parent, AB_BANKING *api,
- GncABImExContextImport *ieci)
-{
- GString *errstr = NULL;
- if (!gnc_ab_ieci_run_matcher(ieci))
- {
- return;
- }
- else
- {
- int num_jobs = 0;
- int num_jobs_failed = 0;
- /* Extract the list of jobs */
- GNC_AB_JOB_LIST2 *job_list = gnc_ab_ieci_get_job_list(ieci);
- /* Create a context to store possible results */
- AB_IMEXPORTER_CONTEXT *execution_context =
- AB_ImExporterContext_new();
- /* Execute the jobs */
- AB_Banking_SendCommands(api, job_list, execution_context);
- AB_ImExporterContext_free(execution_context);
-
- /* Ignore the return value of AB_Banking_ExecuteJobs(), as the job's
- * status always describes better whether the job was actually
- * transferred to and accepted by the bank. See also
- * https://lists.gnucash.org/pipermail/gnucash-de/2008-September/006389.html
- * So we must go through all jobs and check AB_Job_GetStatus(job)
- * to give the appropriate feedback if any of the jobs didn't
- * work.
- */
- if (check_job_status (job_list, api, &num_jobs,
- &num_jobs_failed, &errstr))
- {
- if (num_jobs == 0)
- report_no_jobs (parent);
- else
- report_success (parent, num_jobs);
- }
- else
- {
- report_failure (parent, num_jobs, num_jobs_failed, errstr);
- }
-
- if (errstr)
- g_string_free(errstr, TRUE);
-
- }
-}
-
-void
-gnc_file_aqbanking_import(GtkWindow *parent,
- const gchar *aqbanking_importername,
- const gchar *aqbanking_profilename,
- gboolean execute_transactions)
-{
- gint dtaus_fd = -1;
- AB_BANKING *api = NULL;
- AB_IMEXPORTER_CONTEXT *context = NULL;
- GncABImExContextImport *ieci = NULL;
-
- /* Get the API */
- api = gnc_AB_BANKING_new();
- if (!api)
- {
- g_warning("gnc_file_aqbanking_import: Couldn't get AqBanking API");
- return;
- }
-
- context = named_import_get_context (parent, api, aqbanking_importername,
- aqbanking_profilename);
- if (!context)
- {
- gnc_AB_BANKING_fini(api);
- return;
- }
-
- /* Before importing the results, if this is a new book, let user specify
- * book options, since they affect how transactions are created */
- if (gnc_is_new_book())
- gnc_new_book_option_display (GTK_WIDGET (parent));
-
- /* Import the results */
- ieci = gnc_ab_import_context(context, AWAIT_TRANSACTIONS,
- execute_transactions,
- execute_transactions ? api : NULL,
- GTK_WIDGET(parent));
-
- if (execute_transactions)
- do_execute_transactions (parent, api, ieci);
-
- g_free(ieci);
- AB_ImExporterContext_free(context);
- gnc_AB_BANKING_fini(api);
-}
-
void
gnc_file_aqbanking_import_dialog (GtkWindow *parent)
{
diff --git a/gnucash/import-export/aqb/gnc-file-aqb-import.h b/gnucash/import-export/aqb/gnc-file-aqb-import.h
index 9e11e9780..308cb82c0 100644
--- a/gnucash/import-export/aqb/gnc-file-aqb-import.h
+++ b/gnucash/import-export/aqb/gnc-file-aqb-import.h
@@ -25,9 +25,7 @@
* @addtogroup AqBanking
* @{
* @file aqbanking/gnc-file-aqb-import.h
- * @brief DTAUS import module interface
- * @author Copyright (C) 2002 Benoit Grégoire <bock at step.polymtl.ca>
- * @author Copyright (C) 2008 Andreas Koehler <andi5.py at gmx.net>
+ * @brief File import module interface
* @author Copyright (C) 2022 John Ralls <jralls at ceridwen.us>
*/
@@ -38,31 +36,6 @@
G_BEGIN_DECLS
-/**
- * This routine will pop up a standard file selection dialog asking the user to
- * pick a file to import. This file will be opened and read. Its contents will
- * be imported into the current book, using the import matcher from
- * import-main-matcher.h.
- *
- * @param aqbanking_importername The aqbanking importer module that should be
- * used. Possible values: "dtaus", "csv", "swift", or more.
- *
- * @param aqbanking_formatname In aqbanking, each importer has one or more data
- * formats available which define the actual data fields that should be used.
- * In aqbanking, such a different format is called a "profile". Possible values
- * for swift: "swift-mt940" or "swift-mt942", but for all others: "default", or
- * more precisely: Look into $datadir/aqbanking/imexporters and look into the
- * "name" field of the foo.conf files.
- *
- * @param exec_as_aqbanking_jobs If TRUE, additionally queue the imported
- * transactions as online jobs over aqbanking/HBCI. If FALSE, just import the
- * transactions and that's it.
- */
-void gnc_file_aqbanking_import (GtkWindow *parent,
- const gchar *aqbanking_importername,
- const gchar *aqbanking_formatname,
- gboolean exec_as_aqbanking_jobs);
-
/**
* Import files via AQBanking's Import Dialog. This permits importing
* any file format that Aqbanking supports.
diff --git a/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml b/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml
index 6b99d4fb5..419d82b51 100644
--- a/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml
+++ b/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml
@@ -3,10 +3,6 @@
<menu name="File" action="FileAction">
<menu name="FileImport" action="FileImportAction">
<placeholder name="FileImportPlaceholder">
- <menuitem name="FileMt940Import" action="Mt940ImportAction"/>
- <menuitem name="FileMt942Import" action="Mt942ImportAction"/>
- <menuitem name="FileDtausImport" action="DtausImportAction"/>
- <menuitem name="FileDtausImportsend" action="DtausImportSendAction"/>
<menuitem name="FileAQBImport" action="AQBankingImportAction"/>
</placeholder>
</menu>
diff --git a/gnucash/import-export/aqb/gnc-plugin-aqbanking.c b/gnucash/import-export/aqb/gnc-plugin-aqbanking.c
index 1109d5ef7..1cbfc7ac0 100644
--- a/gnucash/import-export/aqb/gnc-plugin-aqbanking.c
+++ b/gnucash/import-export/aqb/gnc-plugin-aqbanking.c
@@ -75,10 +75,6 @@ static void gnc_plugin_ab_cmd_issue_sepainternaltransaction(GtkAction *action, G
static void gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action, GncMainWindowActionData *data);
static void gnc_plugin_ab_cmd_issue_sepa_direct_debit(GtkAction *action, GncMainWindowActionData *data);
static void gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window);
-static void gnc_plugin_ab_cmd_mt940_import(GtkAction *action, GncMainWindowActionData *data);
-static void gnc_plugin_ab_cmd_mt942_import(GtkAction *action, GncMainWindowActionData *data);
-static void gnc_plugin_ab_cmd_dtaus_import(GtkAction *action, GncMainWindowActionData *data);
-static void gnc_plugin_ab_cmd_dtaus_importsend(GtkAction *action, GncMainWindowActionData *data);
static void gnc_plugin_ab_cmd_aqb_import(GtkAction *action, GncMainWindowActionData *data);
#define PLUGIN_ACTIONS_NAME "gnc-plugin-aqbanking-actions"
@@ -133,32 +129,6 @@ static GtkActionEntry gnc_plugin_actions [] =
},
/* File -> Import menu item */
- {
- "Mt940ImportAction", "go-previous",
- /* Translators: Message types MTxxxx are exchange formats used by the SWIFT network
- https://en.wikipedia.org/wiki/Society_for_Worldwide_Interbank_Financial_Telecommunication */
- N_("Import _MT940"), NULL,
- N_("Import an end-of-day account statement in SWIFT MT940 format into GnuCash."),
- G_CALLBACK(gnc_plugin_ab_cmd_mt940_import)
- },
- {
- "Mt942ImportAction", "go-previous", N_("Import MT94_2"), NULL,
- N_("Import an interim account statement in SWIFT MT942 format into GnuCash."),
- G_CALLBACK(gnc_plugin_ab_cmd_mt942_import)
- },
- {
- "DtausImportAction", "go-previous",
- /* Translators: DTAUS is a traditional german exchange format.
- https://de.wikipedia.org/wiki/Datentr%C3%A4geraustauschverfahren */
- N_("Import _DTAUS"), NULL,
- N_("Import a traditional german DTAUS file into GnuCash."),
- G_CALLBACK(gnc_plugin_ab_cmd_dtaus_import)
- },
- {
- "DtausImportSendAction", "go-previous", N_("Import DTAUS and _send..."), NULL,
- N_("Import a DTAUS file into GnuCash and transmit its orders by Online Banking."),
- G_CALLBACK(gnc_plugin_ab_cmd_dtaus_importsend)
- },
{
"AQBankingImportAction", "go-previous", N_("Import using AQBanking"),
NULL, N_("Import into GnuCash any file format supported by AQBanking."),
@@ -657,52 +627,6 @@ gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window)
}
}
-
-static void
-gnc_plugin_ab_cmd_mt940_import(GtkAction *action, GncMainWindowActionData *data)
-{
- gchar *format = gnc_prefs_get_string(GNC_PREFS_GROUP_AQBANKING,
- GNC_PREF_FORMAT_SWIFT940);
- gnc_main_window = data->window;
- gnc_file_aqbanking_import (GTK_WINDOW (gnc_main_window),
- "swift", format && *format ? format : "swift-mt940", FALSE);
- g_free(format);
-}
-
-static void
-gnc_plugin_ab_cmd_mt942_import(GtkAction *action, GncMainWindowActionData *data)
-{
- gchar *format = gnc_prefs_get_string(GNC_PREFS_GROUP_AQBANKING,
- GNC_PREF_FORMAT_SWIFT942);
- gnc_main_window = data->window;
- gnc_file_aqbanking_import (GTK_WINDOW (gnc_main_window),
- "swift", format && *format? format : "swift-mt942", FALSE);
- g_free(format);
-}
-
-static void
-gnc_plugin_ab_cmd_dtaus_import(GtkAction *action, GncMainWindowActionData *data)
-{
- gchar *format = gnc_prefs_get_string(GNC_PREFS_GROUP_AQBANKING,
- GNC_PREF_FORMAT_DTAUS);
- gnc_main_window = data->window;
- gnc_file_aqbanking_import (GTK_WINDOW (gnc_main_window),
- "dtaus", format && *format ? format : "default", FALSE);
- g_free(format);
-}
-
-static void
-gnc_plugin_ab_cmd_dtaus_importsend(GtkAction *action,
- GncMainWindowActionData *data)
-{
- gchar *format = gnc_prefs_get_string(GNC_PREFS_GROUP_AQBANKING,
- GNC_PREF_FORMAT_DTAUS);
- gnc_main_window = data->window;
- gnc_file_aqbanking_import (GTK_WINDOW (gnc_main_window),
- "dtaus", format && *format ? format : "default", TRUE);
- g_free(format);
-}
-
static void
gnc_plugin_ab_cmd_aqb_import(GtkAction *action,
GncMainWindowActionData *data)
commit 5a0455462c73a90d76b13454f4a530c4417952dc
Author: John Ralls <jralls at ceridwen.us>
Date: Tue Oct 11 14:12:12 2022 -0700
Implement AQBanking import selection dialog directly in Gtk.
diff --git a/gnucash/import-export/aqb/CMakeLists.txt b/gnucash/import-export/aqb/CMakeLists.txt
index 458b516e6..8c36159d7 100644
--- a/gnucash/import-export/aqb/CMakeLists.txt
+++ b/gnucash/import-export/aqb/CMakeLists.txt
@@ -6,6 +6,7 @@ add_subdirectory(test)
set (aqbanking_SOURCES
dialog-ab-trans.c
dialog-ab-daterange.c
+ dialog-ab-select-imexporter.c
assistant-ab-initial.c
gnc-ab-getbalance.c
gnc-ab-gettrans.c
@@ -25,6 +26,7 @@ set_source_files_properties (${aqbanking_SOURCES} PROPERTIES OBJECT_DEPENDS ${CO
set (aqbanking_noinst_HEADERS
dialog-ab-trans.h
dialog-ab-daterange.h
+ dialog-ab-select-imexporter.h
assistant-ab-initial.h
gnc-ab-getbalance.h
gnc-ab-gettrans.h
diff --git a/gnucash/import-export/aqb/dialog-ab-select-imexporter.c b/gnucash/import-export/aqb/dialog-ab-select-imexporter.c
new file mode 100644
index 000000000..49ccfbcdb
--- /dev/null
+++ b/gnucash/import-export/aqb/dialog-ab-select-imexporter.c
@@ -0,0 +1,257 @@
+/*
+ * dialog-ab-select-imexporter.c --
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, contact:
+ *
+ * Free Software Foundation Voice: +1-617-542-5942
+ * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
+ * Boston, MA 02110-1301, USA gnu at gnu.org
+ */
+
+/**
+ * @internal
+ * @file dialog-ab-select-imexporter.h
+ * @brief Dialog to select AQBanking importer/exporter and format profile.
+ * @author Copyright (C) 2022 John Ralls <jralls at ceridwen.us>
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include "dialog-ab-select-imexporter.h"
+#include <dialog-utils.h>
+
+static QofLogModule log_module = G_LOG_DOMAIN;
+
+struct _GncABSelectImExDlg
+{
+ GtkWidget *dialog;
+ GtkWidget *parent;
+ GtkListStore *imexporter_list;
+ GtkListStore *profile_list;
+ GtkWidget *select_imexporter;
+ GtkWidget *select_profile;
+ GtkWidget *ok_button;
+
+ AB_BANKING* abi;
+};
+
+// Expose the selection handlers to GtkBuilder.
+G_MODULE_EXPORT gboolean imexporter_changed(GtkTreeSelection* sel,
+ gpointer data);
+G_MODULE_EXPORT gboolean profile_changed(GtkTreeSelection* sel, gpointer data);
+
+static gboolean
+clear_model_row (GtkTreeModel* model, GtkTreePath* path,
+ GtkTreeIter* iter, gpointer data)
+{
+ char *name, *desc;
+ g_return_val_if_fail (model && iter, TRUE);
+ gtk_tree_model_get (model, iter, 0, &name, 1, &desc, -1);
+ g_free (name);
+ g_free (desc);
+ return FALSE;
+}
+
+static void
+clear_tree_model (GtkTreeModel* model)
+{
+ gtk_tree_model_foreach (model, clear_model_row, NULL);
+ gtk_list_store_clear (GTK_LIST_STORE (model));
+}
+
+static void
+populate_tree_model (GtkTreeModel* model, GList* entries)
+{
+ clear_tree_model (model);
+ for (GList* node = entries; node; node = g_list_next (node))
+ {
+ AB_Node_Pair *pair = (AB_Node_Pair*)(node->data);
+ GtkTreeIter iter;
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (model),
+ &iter, -1,
+ 0, pair->name,
+ 1, pair->descr,
+ -1);
+ g_slice_free1 (sizeof(AB_Node_Pair), pair);
+ }
+}
+
+GncABSelectImExDlg*
+gnc_ab_select_imex_dlg_new (GtkWidget* parent, AB_BANKING* abi)
+{
+ GncABSelectImExDlg* imexd;
+ GtkBuilder* builder;
+ GList* imexporters;
+ GtkTreeSelection *imex_select = NULL, *prof_select = NULL;
+
+ g_return_val_if_fail (abi, NULL);
+ imexporters = gnc_ab_imexporter_list (abi);
+ g_return_val_if_fail (imexporters, NULL);
+ imexd = g_new0(GncABSelectImExDlg, 1);
+ imexd->parent = parent;
+ imexd->abi = abi;
+
+ g_signal_connect (parent, "destroy",
+ G_CALLBACK (gtk_widget_destroyed), &imexd->parent);
+ builder = gtk_builder_new();
+ gnc_builder_add_from_file (builder, "dialog-ab.glade", "imexporter-list");
+ gnc_builder_add_from_file (builder, "dialog-ab.glade", "profile-list");
+ gnc_builder_add_from_file (builder, "dialog-ab.glade",
+ "aqbanking-select-imexporter-dialog");
+ imexd->dialog =
+ GTK_WIDGET (gtk_builder_get_object (builder,
+ "aqbanking-select-imexporter-dialog"));
+ g_signal_connect (imexd->dialog, "destroy",
+ G_CALLBACK (gtk_widget_destroyed), &imexd->dialog);
+ imexd->imexporter_list =
+ GTK_LIST_STORE (gtk_builder_get_object (builder, "imexporter-list"));
+ imexd->profile_list =
+ GTK_LIST_STORE (gtk_builder_get_object (builder, "profile-list"));
+ imexd->select_imexporter =
+ GTK_WIDGET (gtk_builder_get_object (builder, "imexporter-sel"));
+ imexd->select_profile =
+ GTK_WIDGET (gtk_builder_get_object (builder, "profile-sel"));
+ imexd->ok_button =
+ GTK_WIDGET (gtk_builder_get_object (builder, "imex-okbutton"));
+
+ imex_select = GTK_TREE_SELECTION (gtk_builder_get_object (builder, "imex-selection"));
+ prof_select = GTK_TREE_SELECTION (gtk_builder_get_object (builder, "prof-selection"));
+ populate_tree_model (GTK_TREE_MODEL (imexd->imexporter_list),
+ imexporters);
+
+ g_signal_connect (imex_select, "changed", G_CALLBACK(imexporter_changed),
+ imexd);
+ g_signal_connect (prof_select, "changed", G_CALLBACK(profile_changed),
+ imexd);
+ g_list_free (imexporters);
+ g_object_unref (G_OBJECT (builder));
+
+ gtk_window_set_transient_for (GTK_WINDOW (imexd->dialog),
+ GTK_WINDOW (imexd->parent));
+
+ return imexd;
+}
+
+void
+gnc_ab_select_imex_dlg_destroy (GncABSelectImExDlg* imexd)
+{
+
+ if (imexd->imexporter_list)
+ clear_tree_model (GTK_TREE_MODEL (imexd->imexporter_list));
+
+ if (imexd->profile_list)
+ clear_tree_model (GTK_TREE_MODEL (imexd->profile_list));
+
+ if (imexd->dialog)
+ gtk_widget_destroy (imexd->dialog);
+
+ g_free (imexd);
+}
+
+gboolean
+imexporter_changed(GtkTreeSelection* sel, gpointer data)
+{
+ GncABSelectImExDlg* imexd = (GncABSelectImExDlg*)data;
+ GtkTreeIter iter;
+ GtkTreeModel* model;
+
+ gtk_widget_set_sensitive (imexd->ok_button, FALSE);
+
+ if (gtk_tree_selection_get_selected (sel, &model, &iter))
+ {
+ char* name = NULL;
+ GList* profiles = NULL;
+
+ gtk_tree_model_get (model, &iter, 0, &name, -1);
+ if (name && *name)
+ {
+ profiles = gnc_ab_imexporter_profile_list (imexd->abi, name);
+ g_free (name);
+ }
+ clear_tree_model (GTK_TREE_MODEL (imexd->profile_list));
+ if (profiles)
+ {
+ populate_tree_model (GTK_TREE_MODEL (imexd->profile_list), profiles);
+ }
+ else
+ {
+ gtk_widget_set_sensitive (imexd->ok_button, TRUE);
+ return FALSE;
+ }
+
+ if (!profiles->next)
+ {
+ GtkTreePath* path = gtk_tree_path_new_first();
+ GtkTreeSelection* profile_sel =
+ gtk_tree_view_get_selection (GTK_TREE_VIEW (imexd->select_profile));
+ gtk_tree_selection_select_path (profile_sel, path); //should call profile_changed
+ }
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+profile_changed (GtkTreeSelection* sel, gpointer data)
+{
+ GncABSelectImExDlg* imexd = (GncABSelectImExDlg*)data;
+ GtkTreeIter iter;
+ GtkTreeModel* model;
+
+ gtk_widget_set_sensitive (imexd->ok_button, FALSE);
+
+ if (gtk_tree_selection_get_selected (sel, &model, &iter))
+ {
+ gtk_widget_set_sensitive (imexd->ok_button, TRUE);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+gnc_ab_select_imex_dlg_run (GncABSelectImExDlg* imexd)
+{
+
+ int response = gtk_dialog_run (GTK_DIALOG (imexd->dialog));
+ return response == GTK_RESPONSE_OK ? TRUE : FALSE;
+}
+
+static char*
+tree_view_get_name (GtkTreeView *tv)
+{
+ GtkTreeSelection* sel = gtk_tree_view_get_selection (tv);
+ GtkTreeIter iter;
+ GtkTreeModel* model;
+ if (sel && gtk_tree_selection_get_selected (sel, &model, &iter))
+ {
+ char* name;
+ gtk_tree_model_get(model, &iter, 0, &name, -1);
+ return name;
+ }
+
+ return NULL;
+}
+char*
+gnc_ab_select_imex_dlg_get_imexporter_name (GncABSelectImExDlg* imexd)
+{
+ return tree_view_get_name (GTK_TREE_VIEW (imexd->select_imexporter));
+}
+
+char*
+gnc_ab_select_imex_dlg_get_profile_name (GncABSelectImExDlg* imexd)
+{
+ return tree_view_get_name (GTK_TREE_VIEW (imexd->select_profile));
+}
diff --git a/gnucash/import-export/aqb/dialog-ab-select-imexporter.h b/gnucash/import-export/aqb/dialog-ab-select-imexporter.h
new file mode 100644
index 000000000..22c5fe4b7
--- /dev/null
+++ b/gnucash/import-export/aqb/dialog-ab-select-imexporter.h
@@ -0,0 +1,87 @@
+/*
+ * dialog-ab-select-imexporter.h --
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, contact:
+ *
+ * Free Software Foundation Voice: +1-617-542-5942
+ * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
+ * Boston, MA 02110-1301, USA gnu at gnu.org
+ */
+
+/**
+ * @addtogroup Import_Export
+ * @{
+ * @addtogroup AqBanking
+ * @{
+ * @file dialog-ab-select-imexporter.h
+ * @brief Dialog to select AQBanking importer/exporter and format profile.
+ * @author Copyright (C) 2022 John Ralls <jralls at ceridwen.us>
+ */
+
+#ifndef DIALOG_AB_SELECT_IMEXPORTER_H
+#define DIALOG_AB_SELECT_IMEXPORTER_H
+
+#include "gnc-ab-utils.h"
+#include <gtk/gtk.h>
+#include <aqbanking/banking.h>
+
+typedef struct _GncABSelectImExDlg GncABSelectImExDlg;
+
+G_BEGIN_DECLS
+
+/**
+ * Create an AQBanking importer/exporter selection dialog.
+ * @param parent A widget to center the dialog over.
+ * @param abi The AQBanking instance to query.
+ * @return a GncABSelectImExDlg.
+ */
+GncABSelectImExDlg* gnc_ab_select_imex_dlg_new (GtkWidget* parent,
+ AB_BANKING* abi);
+
+/**
+ * Destroy an AQBanking importer/exporter selection dialog.
+ * @param imexd the dialog.
+ */
+void gnc_ab_select_imex_dlg_destroy (GncABSelectImExDlg* imexd);
+
+/**
+ * Run an AQBanking importer/exporter selection dialog.
+ * @param imexd the dialog.
+ * @return A GTK_RESPONSE status.
+ */
+int gnc_ab_select_imex_dlg_run (GncABSelectImExDlg* imexd);
+
+/**
+ * Get the selected importer/exporter name
+ * @param imexd the dialog with the selection
+ * @return the selected importer/exporter name, free with g_free.
+ */
+char*
+gnc_ab_select_imex_dlg_get_imexporter_name (GncABSelectImExDlg* imexd);
+
+/**
+ * Get the selected file format profile name
+ * @param imexd the dialog with the selection
+ * @return the selected format profile name, free with g_free.
+ */
+char*
+gnc_ab_select_imex_dlg_get_profile_name (GncABSelectImExDlg* imexd);
+
+G_END_DECLS
+
+#endif //DIALOG_AB_SELECT_IMEXPORTER_H
+/**
+ * @}
+ * @}
+ */
diff --git a/gnucash/import-export/aqb/dialog-ab.glade b/gnucash/import-export/aqb/dialog-ab.glade
index 9c4deeb10..36cfc9cf0 100644
--- a/gnucash/import-export/aqb/dialog-ab.glade
+++ b/gnucash/import-export/aqb/dialog-ab.glade
@@ -1643,4 +1643,189 @@
<action-widget response="-8">exec_now_button</action-widget>
</action-widgets>
</object>
+ <object class="GtkListStore" id="imexporter-list">
+ <columns>
+ <column type="gchararray"/>
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkListStore" id="profile-list">
+ <columns>
+ <column type="gchararray"/>
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkDialog" id="aqbanking-select-imexporter-dialog">
+ <property name="can-focus">False</property>
+ <property name="border-width">5</property>
+ <property name="title" translatable="yes">Select File Importer/Exporter</property>
+ <property name="type-hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox3">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area3">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="layout-style">end</property>
+ <child>
+ <object class="GtkButton" id="imex-cancelbutton">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="can-default">True</property>
+ <property name="receives-default">True</property>
+ <property name="use-underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="imex-okbutton">
+ <property name="label" translatable="yes">_OK</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="can-default">True</property>
+ <property name="receives-default">True</property>
+ <property name="use-underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack-type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="selector-box">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="border-width">5</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="shadow-type">in</property>
+ <property name="min-content-height">300</property>
+ <child>
+ <object class="GtkTreeView" id="imexporter-sel">
+ <property name="model">imexporter-list</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <child>
+ <object class="GtkTreeViewColumn" id="imexporter-name">
+ <property name="title" translatable="yes">Name</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="imexporter-descr">
+ <property name="title" translatable="yes">Description</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="imex-selection">
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="shadow-type">in</property>
+ <property name="min-content-height">300</property>
+ <child>
+ <object class="GtkTreeView" id="profile-sel">
+ <property name="model">profile-list</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <!-- Request the maximum width for the profile
+ list so that it doesn't change the dialog
+ width when an imexporter with long
+ descriptions is selected. -->
+ <property name="width-request">400</property>
+ <child>
+ <object class="GtkTreeViewColumn" id="profile-name">
+ <property name="title" translatable="yes">Name</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="profile-descr">
+ <property name="title" translatable="yes">Description</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="prof-selection">
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">imex-cancelbutton</action-widget>
+ <action-widget response="-5">imex-okbutton</action-widget>
+ </action-widgets>
+ </object>
</interface>
diff --git a/gnucash/import-export/aqb/gnc-ab-utils.c b/gnucash/import-export/aqb/gnc-ab-utils.c
index a371c7553..57a528903 100644
--- a/gnucash/import-export/aqb/gnc-ab-utils.c
+++ b/gnucash/import-export/aqb/gnc-ab-utils.c
@@ -1212,3 +1212,55 @@ gnc_ab_trans_templ_list_new_from_ref_accounts (GNC_AB_ACCOUNT_SPEC *ab_acc)
return retval;
}
+static int
+ab_node_pair_compare (AB_Node_Pair* left, AB_Node_Pair* right)
+{
+ return left ? (right ? g_strcmp0 (left->name, right->name) : -1) :
+ (right ? 1 : 0);
+}
+
+GList*
+gnc_ab_imexporter_list (AB_BANKING* api)
+{
+ GList* desc_list = NULL;
+ GWEN_PLUGIN_DESCRIPTION_LIST2 *il =
+ AB_Banking_GetImExporterDescrs (api);
+ GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *ilit;
+ g_return_val_if_fail (il, NULL);
+ ilit = GWEN_PluginDescription_List2_First(il);
+
+ for (GWEN_PLUGIN_DESCRIPTION *pd =
+ GWEN_PluginDescription_List2Iterator_Data(ilit);
+ pd;
+ pd = GWEN_PluginDescription_List2Iterator_Next(ilit))
+ {
+ AB_Node_Pair *node = NULL;
+ GWEN_BUFFER *tbuf = GWEN_Buffer_new(0, 256, 0, 1);
+
+ node = g_slice_new (AB_Node_Pair);
+ node->name = g_strdup(GWEN_PluginDescription_GetName(pd));
+ node->descr = g_strdup(GWEN_PluginDescription_GetShortDescr(pd));
+ desc_list = g_list_prepend (desc_list, node);
+ }
+ GWEN_PluginDescription_List2_free(il);
+ return g_list_sort (desc_list, (GCompareFunc)ab_node_pair_compare);
+}
+
+GList*
+gnc_ab_imexporter_profile_list (AB_BANKING* api, const char* importer_name)
+{
+ GList* prof_list = NULL;
+ GWEN_DB_NODE* db = AB_Banking_GetImExporterProfiles(api, importer_name);
+ g_return_val_if_fail (db, NULL);
+
+ for (GWEN_DB_NODE *profile = GWEN_DB_GetFirstGroup(db); profile;
+ profile = GWEN_DB_GetNextGroup(profile))
+ {
+ AB_Node_Pair *node = g_slice_new(AB_Node_Pair);
+ if (!profile) continue;
+ node->name = g_strdup(GWEN_DB_GetCharValue(profile, "name", 0, NULL));
+ node->descr = g_strdup(GWEN_DB_GetCharValue(profile, "shortDescr", 0, NULL));
+ prof_list = g_list_prepend (prof_list, node);
+ }
+ return g_list_sort (prof_list, (GCompareFunc)ab_node_pair_compare);
+}
diff --git a/gnucash/import-export/aqb/gnc-ab-utils.h b/gnucash/import-export/aqb/gnc-ab-utils.h
index 102a714aa..79ae58909 100644
--- a/gnucash/import-export/aqb/gnc-ab-utils.h
+++ b/gnucash/import-export/aqb/gnc-ab-utils.h
@@ -67,6 +67,12 @@ G_BEGIN_DECLS
#define GNC_PREF_USE_TRANSACTION_TXT "use-ns-transaction-text"
#define GNC_PREF_VERBOSE_DEBUG "verbose-debug"
+typedef struct
+{
+ char* name;
+ char* descr;
+} AB_Node_Pair;
+
typedef struct _GncABImExContextImport GncABImExContextImport;
#define AWAIT_BALANCES 1 << 1
@@ -285,6 +291,22 @@ gchar* gnc_ab_create_online_id (const gchar *bankcode, const gchar *accountnumbe
GList*
gnc_ab_trans_templ_list_new_from_ref_accounts (GNC_AB_ACCOUNT_SPEC *ab_acc);
+/**
+ * Retrieve the available AQBanking importers.
+ * @param abi The AQBanking instance.
+ * @return a GList<AB_Node_Pair> containing importer names and descriptions.
+ */
+GList* gnc_ab_imexporter_list (AB_BANKING* abi);
+
+/**
+ * Retrieve the available format templates for an AQBanking importer.
+ * @param api the AQBanking instance.
+ * @param importer_name The importer's name.
+ * @return a GList<AB_Node_Pair> containing format template names and descriptions.
+ */
+GList* gnc_ab_imexporter_profile_list (AB_BANKING* abi,
+ const char* importer_name);
+
G_END_DECLS
/** @} */
diff --git a/gnucash/import-export/aqb/gnc-file-aqb-import.c b/gnucash/import-export/aqb/gnc-file-aqb-import.c
index ff7a06897..e19c49142 100644
--- a/gnucash/import-export/aqb/gnc-file-aqb-import.c
+++ b/gnucash/import-export/aqb/gnc-file-aqb-import.c
@@ -28,6 +28,7 @@
* @author Copyright (C) 2006 Florian Steinel
* @author Copyright (C) 2006 Christian Stimming
* @author Copyright (C) 2008 Andreas Koehler <andi5.py at gmx.net>
+ * @author Copyright (C) 2022 John Ralls <jralls at ceridwen.us>
*/
#include <config.h>
@@ -44,10 +45,12 @@
#include "gnc-ab-utils.h"
-# include <gwenhywfar/syncio_file.h>
-# include <gwenhywfar/syncio_buffered.h>
+#include <gwenhywfar/syncio_file.h>
+#include <gwenhywfar/syncio_buffered.h>
+#include <gwenhywfar/gui.h>
typedef GWEN_SYNCIO GWEN_IO_LAYER;
+#include "dialog-ab-select-imexporter.h"
#include "dialog-ab-trans.h"
#include "dialog-utils.h"
#include "gnc-file.h"
@@ -276,3 +279,48 @@ gnc_file_aqbanking_import(GtkWindow *parent,
AB_ImExporterContext_free(context);
gnc_AB_BANKING_fini(api);
}
+
+void
+gnc_file_aqbanking_import_dialog (GtkWindow *parent)
+{
+ AB_BANKING* api = gnc_AB_BANKING_new ();
+ GncABSelectImExDlg* imexd =
+ gnc_ab_select_imex_dlg_new (GTK_WIDGET (parent), api);
+ char *imexporter, *profile;
+ AB_IMEXPORTER_CONTEXT* ctx = NULL;
+
+ if (!imexd)
+ {
+
+ PERR ("Failed to create select imex dialog.");
+ gnc_AB_BANKING_fini(api);
+ return;
+ }
+
+ if (!gnc_ab_select_imex_dlg_run (imexd))
+ {
+ gnc_ab_select_imex_dlg_destroy (imexd);
+ return;
+ }
+
+ imexporter = gnc_ab_select_imex_dlg_get_imexporter_name (imexd);
+ profile = gnc_ab_select_imex_dlg_get_profile_name (imexd);
+
+ if (imexporter && profile)
+ {
+ ctx = named_import_get_context (parent, api, imexporter, profile);
+ gnc_ab_select_imex_dlg_destroy (imexd);
+
+ if (ctx)
+ {
+ GncABImExContextImport* ieci = NULL;
+ ieci = gnc_ab_import_context (ctx, 0, FALSE, api, GTK_WIDGET(parent));
+ g_free(ieci);
+ AB_ImExporterContext_free(ctx);
+ }
+ g_free (imexporter);
+ g_free (profile);
+ }
+
+ gnc_AB_BANKING_fini(api);
+}
diff --git a/gnucash/import-export/aqb/gnc-file-aqb-import.h b/gnucash/import-export/aqb/gnc-file-aqb-import.h
index a09d06922..9e11e9780 100644
--- a/gnucash/import-export/aqb/gnc-file-aqb-import.h
+++ b/gnucash/import-export/aqb/gnc-file-aqb-import.h
@@ -28,6 +28,7 @@
* @brief DTAUS import module interface
* @author Copyright (C) 2002 Benoit Grégoire <bock at step.polymtl.ca>
* @author Copyright (C) 2008 Andreas Koehler <andi5.py at gmx.net>
+ * @author Copyright (C) 2022 John Ralls <jralls at ceridwen.us>
*/
#ifndef GNC_FILE_AQB_IMPORT_H
@@ -62,6 +63,14 @@ void gnc_file_aqbanking_import (GtkWindow *parent,
const gchar *aqbanking_formatname,
gboolean exec_as_aqbanking_jobs);
+/**
+ * Import files via AQBanking's Import Dialog. This permits importing
+ * any file format that Aqbanking supports.
+ * @param parent A GtkWindow for setting the import dialog transient for.
+ */
+void gnc_file_aqbanking_import_dialog (GtkWindow *parent);
+
+
G_END_DECLS
/** @} */
diff --git a/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml b/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml
index 6d7c55ad4..6b99d4fb5 100644
--- a/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml
+++ b/gnucash/import-export/aqb/gnc-plugin-aqbanking-ui.xml
@@ -7,10 +7,7 @@
<menuitem name="FileMt942Import" action="Mt942ImportAction"/>
<menuitem name="FileDtausImport" action="DtausImportAction"/>
<menuitem name="FileDtausImportsend" action="DtausImportSendAction"/>
- <!-- When CsvImport works:
- <menuitem name="FileCsvImport" action="CsvImportAction"/>
- <menuitem name="FileCsvImportsend" action="CsvImportSendAction"/>
- -->
+ <menuitem name="FileAQBImport" action="AQBankingImportAction"/>
</placeholder>
</menu>
</menu>
diff --git a/gnucash/import-export/aqb/gnc-plugin-aqbanking.c b/gnucash/import-export/aqb/gnc-plugin-aqbanking.c
index 6cafa7b7f..1109d5ef7 100644
--- a/gnucash/import-export/aqb/gnc-plugin-aqbanking.c
+++ b/gnucash/import-export/aqb/gnc-plugin-aqbanking.c
@@ -79,6 +79,7 @@ static void gnc_plugin_ab_cmd_mt940_import(GtkAction *action, GncMainWindowActio
static void gnc_plugin_ab_cmd_mt942_import(GtkAction *action, GncMainWindowActionData *data);
static void gnc_plugin_ab_cmd_dtaus_import(GtkAction *action, GncMainWindowActionData *data);
static void gnc_plugin_ab_cmd_dtaus_importsend(GtkAction *action, GncMainWindowActionData *data);
+static void gnc_plugin_ab_cmd_aqb_import(GtkAction *action, GncMainWindowActionData *data);
#define PLUGIN_ACTIONS_NAME "gnc-plugin-aqbanking-actions"
#define PLUGIN_UI_FILENAME "gnc-plugin-aqbanking-ui.xml"
@@ -153,19 +154,16 @@ static GtkActionEntry gnc_plugin_actions [] =
N_("Import a traditional german DTAUS file into GnuCash."),
G_CALLBACK(gnc_plugin_ab_cmd_dtaus_import)
},
- /* #ifdef CSV_IMPORT_FUNCTIONAL */
- /* { "CsvImportAction", "go-previous", N_("Import _CSV"), NULL, */
- /* N_("Import a CSV file into GnuCash"), */
- /* G_CALLBACK(gnc_plugin_ab_cmd_csv_import) }, */
- /* { "CsvImportSendAction", "go-previous", N_("Import CSV and s_end..."), NULL, */
- /* N_("Import a CSV file into GnuCash and send the transfers online through Online Banking"), */
- /* G_CALLBACK(gnc_plugin_ab_cmd_csv_importsend) }, */
- /* #endif */
{
"DtausImportSendAction", "go-previous", N_("Import DTAUS and _send..."), NULL,
N_("Import a DTAUS file into GnuCash and transmit its orders by Online Banking."),
G_CALLBACK(gnc_plugin_ab_cmd_dtaus_importsend)
},
+ {
+ "AQBankingImportAction", "go-previous", N_("Import using AQBanking"),
+ NULL, N_("Import into GnuCash any file format supported by AQBanking."),
+ G_CALLBACK(gnc_plugin_ab_cmd_aqb_import)
+ },
};
static guint gnc_plugin_n_actions = G_N_ELEMENTS(gnc_plugin_actions);
@@ -705,6 +703,15 @@ gnc_plugin_ab_cmd_dtaus_importsend(GtkAction *action,
g_free(format);
}
+static void
+gnc_plugin_ab_cmd_aqb_import(GtkAction *action,
+ GncMainWindowActionData *data)
+{
+ gnc_main_window = data->window;
+ gnc_file_aqbanking_import_dialog (GTK_WINDOW (gnc_main_window));
+
+}
+
/************************************************************
* Plugin Bootstrapping *
************************************************************/
diff --git a/po/POTFILES.in b/po/POTFILES.in
index a7c6e5da0..e982bcc80 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -303,6 +303,7 @@ gnucash/import-export/aqb/assistant-ab-initial.glade
gnucash/import-export/aqb/dialog-ab-daterange.c
gnucash/import-export/aqb/dialog-ab.glade
gnucash/import-export/aqb/dialog-ab-pref.glade
+gnucash/import-export/aqb/dialog-ab-select-imexporter.c
gnucash/import-export/aqb/dialog-ab-trans.c
gnucash/import-export/aqb/gnc-ab-getbalance.c
gnucash/import-export/aqb/gnc-ab-gettrans.c
commit 118fc8cbaf83ca7f1aad9930d8dc90ade410698f
Author: John Ralls <jralls at ceridwen.us>
Date: Sat Oct 22 14:12:19 2022 -0700
Accomplish Doxygen-doc FIXME for gnc_ab_maketrans.
diff --git a/gnucash/import-export/aqb/gnc-ab-transfer.h b/gnucash/import-export/aqb/gnc-ab-transfer.h
index 9f57a147e..33c2c8d5a 100644
--- a/gnucash/import-export/aqb/gnc-ab-transfer.h
+++ b/gnucash/import-export/aqb/gnc-ab-transfer.h
@@ -41,7 +41,7 @@
G_BEGIN_DECLS
/**
- * FIXME
+ * Create SEPA transfers.
*
* @param parent Widget to use as parent, may be NULL
* @param gnc_acc GnuCash account to fetch balance for
commit 909d857c769f3740c88b4aae37dc130a44af9aed
Author: John Ralls <jralls at ceridwen.us>
Date: Sat Oct 22 10:30:25 2022 -0700
Refactor gnc_file_aqbanking_import.
Cleaning out cruft and extracting functions to improve readability.
diff --git a/gnucash/import-export/aqb/gnc-file-aqb-import.c b/gnucash/import-export/aqb/gnc-file-aqb-import.c
index aa3679a19..ff7a06897 100644
--- a/gnucash/import-export/aqb/gnc-file-aqb-import.c
+++ b/gnucash/import-export/aqb/gnc-file-aqb-import.c
@@ -61,42 +61,22 @@ typedef GWEN_SYNCIO GWEN_IO_LAYER;
/* This static indicates the debugging module that this .o belongs to. */
static QofLogModule log_module = GNC_MOD_IMPORT;
-void
-gnc_file_aqbanking_import(GtkWindow *parent,
+static AB_IMEXPORTER_CONTEXT*
+named_import_get_context (GtkWindow *parent, AB_BANKING *api,
const gchar *aqbanking_importername,
- const gchar *aqbanking_profilename,
- gboolean execute_transactions)
+ const gchar *aqbanking_profilename)
{
- gchar *default_dir;
- gchar *selected_filename = NULL;
- gint dtaus_fd = -1;
- AB_BANKING *api = NULL;
- gboolean online = FALSE;
- GncGWENGui *gui = NULL;
- GWEN_DB_NODE *db_profiles = NULL;
- GWEN_DB_NODE *db_profile;
- AB_IMEXPORTER_CONTEXT *context = NULL;
- GWEN_IO_LAYER *io = NULL;
- GncABImExContextImport *ieci = NULL;
- GNC_AB_JOB_LIST2 *job_list = NULL;
- GNC_AB_JOB_LIST2_ITERATOR *jit;
- GNC_AB_JOB *job;
- GNC_AB_JOB_STATUS job_status;
- gboolean successful = TRUE;
- int num_jobs = 0;
- int num_jobs_failed = 0;
- int max_failures = 5;
- GString *errstr = NULL;
-
+ AB_IMEXPORTER_CONTEXT *context;
+ int success;
/* Select a file */
- default_dir = gnc_get_default_directory(GNC_PREFS_GROUP_AQBANKING);
- selected_filename = gnc_file_dialog(parent, _("Select a file to import"),
- NULL, default_dir,
- GNC_FILE_DIALOG_IMPORT);
+ char *default_dir = gnc_get_default_directory(GNC_PREFS_GROUP_AQBANKING);
+ char *selected_filename =
+ gnc_file_dialog(parent, _("Select a file to import"),
+ NULL, default_dir, GNC_FILE_DIALOG_IMPORT);
g_free(default_dir);
if (!selected_filename)
- goto cleanup;
+ return NULL;
DEBUG("filename: %s", selected_filename);
/* Remember the directory as the default */
@@ -104,153 +84,195 @@ gnc_file_aqbanking_import(GtkWindow *parent,
gnc_set_default_directory(GNC_PREFS_GROUP_AQBANKING, default_dir);
g_free(default_dir);
- /* Get the API */
- api = gnc_AB_BANKING_new();
- if (!api)
- {
- g_warning("gnc_file_aqbanking_import: Couldn't get AqBanking API");
- goto cleanup;
- }
-
- /* Create a context to store the results */
+/* Create a context to store the results */
context = AB_ImExporterContext_new();
-
- if (AB_Banking_ImportFromFileLoadProfile(api, aqbanking_importername,
+ success =
+ AB_Banking_ImportFromFileLoadProfile(api, aqbanking_importername,
context, aqbanking_profilename,
- NULL, selected_filename) < 0)
+ NULL, selected_filename);
+ g_free (selected_filename);
+ if (success < 0)
{
+ AB_ImExporterContext_free(context);
g_warning("gnc_file_aqbanking_import: Error on import");
- goto cleanup;
+ return NULL;
}
+ return context;
+}
- /* Before importing the results, if this is a new book, let user specify
- * book options, since they affect how transactions are created */
- if (gnc_is_new_book())
- gnc_new_book_option_display (GTK_WIDGET (parent));
+static void
+report_failure (GtkWindow* parent, int num_jobs,
+ int num_jobs_failed, GString* errstr)
+{
+ g_warning("%s", errstr->str);
+ gnc_error_dialog(parent,
+ _("An error occurred while executing jobs: %d of %d failed. "
+ "Please check the log window or gnucash.trace for the exact "
+ "error message.\n\n%s")
+ , num_jobs_failed, num_jobs, errstr->str);
+}
- /* Import the results */
- ieci = gnc_ab_import_context(context, AWAIT_TRANSACTIONS,
- execute_transactions,
- execute_transactions ? api : NULL,
- GTK_WIDGET(parent));
+static void
+report_no_jobs (GtkWindow *parent)
+{
+ gnc_info_dialog(parent,
+ _("No jobs to be sent.")
+ );
+}
- if (execute_transactions)
+static void
+report_success (GtkWindow *parent, int num_jobs)
+{
+ gnc_info_dialog(parent, ngettext
+ ("The job was executed successfully, but as a precaution "
+ "please check the log window for potential errors.",
+ "All %d jobs were executed successfully, but as a precaution "
+ "please check the log window for potential errors.",
+ num_jobs), num_jobs);
+}
+
+static gboolean
+check_job_status (GNC_AB_JOB_LIST2 *job_list, AB_BANKING *api, int *num_jobs,
+ int *num_jobs_failed, GString **errstr)
+{
+ static const int max_failures = 5;
+ gboolean successful = TRUE;
+ GNC_AB_JOB_LIST2_ITERATOR *jit;
+ jit = AB_Transaction_List2_First(job_list);
+ AB_Transaction_List2_freeAll(job_list);
+ if (jit)
{
- if (gnc_ab_ieci_run_matcher(ieci))
+ for (GNC_AB_JOB *job = AB_Transaction_List2Iterator_Data(jit);
+ job != NULL;
+ job = AB_Transaction_List2Iterator_Next(jit))
{
- AB_IMEXPORTER_CONTEXT *execution_context;
-
- /* Extract the list of jobs */
- job_list = gnc_ab_ieci_get_job_list(ieci);
-
- /* Create a context to store possible results */
- execution_context = AB_ImExporterContext_new();
-
- /* Get a GUI object */
- gui = gnc_GWEN_Gui_get(NULL);
- if (!gui)
- {
- g_warning("gnc_file_aqbanking_import: Couldn't initialize Gwenhywfar GUI");
- goto cleanup;
- }
-
- /* And execute the jobs */
- AB_Banking_SendCommands(api, job_list, execution_context);
-
- /* Ignore the return value of AB_Banking_ExecuteJobs(), as the job's
- * status always describes better whether the job was actually
- * transferred to and accepted by the bank. See also
- * https://lists.gnucash.org/pipermail/gnucash-de/2008-September/006389.html
- */
-
- /* So we must go through all jobs and check AB_Job_GetStatus(job)
- * to give the appropriate feedback if any of the jobs didn't
- * work. */
-
- jit = AB_Transaction_List2_First(job_list);
- if (jit)
+ GNC_AB_JOB_STATUS job_status;
+ *num_jobs += 1;
+ job_status = AB_Transaction_GetStatus(job);
+ if (job_status != AB_Transaction_StatusAccepted &&
+ job_status != AB_Transaction_StatusPending)
{
- job = AB_Transaction_List2Iterator_Data(jit);
+ successful = FALSE;
+ *num_jobs_failed += 1;
- while (job)
+ if (*num_jobs_failed <= max_failures)
{
- num_jobs += 1;
- job_status = AB_Transaction_GetStatus(job);
- if (job_status != AB_Transaction_StatusAccepted &&
- job_status != AB_Transaction_StatusPending)
+ gchar *fmt_str =_("Job %d status %d - %s\n");
+ if (*num_jobs_failed == 1)
{
- successful = FALSE;
- num_jobs_failed += 1;
-
- if (num_jobs_failed <= max_failures)
- {
- gchar *fmt_str =_("Job %d status %d - %s\n");
- if (num_jobs_failed == 1)
- {
- errstr = g_string_new("Failed jobs:\n");
- }
- g_string_append_printf(errstr, fmt_str, num_jobs,
- job_status,
- AB_Transaction_Status_toString(job_status));
- }
- else
- {
- if (num_jobs_failed == (max_failures + 1) )
- {
- /* indicate that additional failures exist */
- g_string_append(errstr, _("...\n"));
- }
- }
+ *errstr = g_string_new("Failed jobs:\n");
}
- job = AB_Transaction_List2Iterator_Next(jit);
- } /* while */
- AB_Transaction_List2Iterator_free(jit);
- }
-
- if (!successful)
- {
- g_warning("%s", errstr->str);
- gnc_error_dialog(parent,
- _("An error occurred while executing jobs: %d of %d failed. "
- "Please check the log window or gnucash.trace for the exact "
- "error message.\n\n%s")
- , num_jobs_failed, num_jobs, errstr->str);
- }
- else
- {
- if (num_jobs == 0)
- {
- gnc_info_dialog(parent,
- _("No jobs to be sent.")
- );
+ g_string_append_printf(*errstr, fmt_str, *num_jobs,
+ job_status,
+ AB_Transaction_Status_toString(job_status));
}
else
{
- gnc_info_dialog(parent, ngettext
- ("The job was executed successfully, but as a precaution "
- "please check the log window for potential errors.",
- "All %d jobs were executed successfully, but as a precaution "
- "please check the log window for potential errors.",
- num_jobs), num_jobs);
+ if (*num_jobs_failed == (max_failures + 1) )
+ {
+ /* indicate that additional failures exist */
+ g_string_append(*errstr, _("...\n"));
+ }
}
}
- AB_ImExporterContext_free(execution_context);
+
+ } /* while */
+ AB_Transaction_List2Iterator_free(jit);
+ }
+ return successful;
+}
+
+static void
+do_execute_transactions (GtkWindow *parent, AB_BANKING *api,
+ GncABImExContextImport *ieci)
+{
+ GString *errstr = NULL;
+ if (!gnc_ab_ieci_run_matcher(ieci))
+ {
+ return;
+ }
+ else
+ {
+ int num_jobs = 0;
+ int num_jobs_failed = 0;
+ /* Extract the list of jobs */
+ GNC_AB_JOB_LIST2 *job_list = gnc_ab_ieci_get_job_list(ieci);
+ /* Create a context to store possible results */
+ AB_IMEXPORTER_CONTEXT *execution_context =
+ AB_ImExporterContext_new();
+ /* Execute the jobs */
+ AB_Banking_SendCommands(api, job_list, execution_context);
+ AB_ImExporterContext_free(execution_context);
+
+ /* Ignore the return value of AB_Banking_ExecuteJobs(), as the job's
+ * status always describes better whether the job was actually
+ * transferred to and accepted by the bank. See also
+ * https://lists.gnucash.org/pipermail/gnucash-de/2008-September/006389.html
+ * So we must go through all jobs and check AB_Job_GetStatus(job)
+ * to give the appropriate feedback if any of the jobs didn't
+ * work.
+ */
+ if (check_job_status (job_list, api, &num_jobs,
+ &num_jobs_failed, &errstr))
+ {
+ if (num_jobs == 0)
+ report_no_jobs (parent);
+ else
+ report_success (parent, num_jobs);
+ }
+ else
+ {
+ report_failure (parent, num_jobs, num_jobs_failed, errstr);
}
+
+ if (errstr)
+ g_string_free(errstr, TRUE);
+
}
+}
-cleanup:
- if (job_list)
- AB_Transaction_List2_freeAll(job_list);
- if (ieci)
- g_free(ieci);
- if (context)
- AB_ImExporterContext_free(context);
- if (gui)
- gnc_GWEN_Gui_release(gui);
- if (api)
+void
+gnc_file_aqbanking_import(GtkWindow *parent,
+ const gchar *aqbanking_importername,
+ const gchar *aqbanking_profilename,
+ gboolean execute_transactions)
+{
+ gint dtaus_fd = -1;
+ AB_BANKING *api = NULL;
+ AB_IMEXPORTER_CONTEXT *context = NULL;
+ GncABImExContextImport *ieci = NULL;
+
+ /* Get the API */
+ api = gnc_AB_BANKING_new();
+ if (!api)
+ {
+ g_warning("gnc_file_aqbanking_import: Couldn't get AqBanking API");
+ return;
+ }
+
+ context = named_import_get_context (parent, api, aqbanking_importername,
+ aqbanking_profilename);
+ if (!context)
+ {
gnc_AB_BANKING_fini(api);
- if (selected_filename)
- g_free(selected_filename);
- if (errstr)
- g_string_free(errstr, TRUE);
+ return;
+ }
+
+ /* Before importing the results, if this is a new book, let user specify
+ * book options, since they affect how transactions are created */
+ if (gnc_is_new_book())
+ gnc_new_book_option_display (GTK_WIDGET (parent));
+
+ /* Import the results */
+ ieci = gnc_ab_import_context(context, AWAIT_TRANSACTIONS,
+ execute_transactions,
+ execute_transactions ? api : NULL,
+ GTK_WIDGET(parent));
+
+ if (execute_transactions)
+ do_execute_transactions (parent, api, ieci);
+
+ g_free(ieci);
+ AB_ImExporterContext_free(context);
+ gnc_AB_BANKING_fini(api);
}
commit 283490965cfabc61eae0d9186dd87766e104b0cb
Author: John Ralls <jralls at ceridwen.us>
Date: Tue Oct 18 14:23:45 2022 -0700
Update macOS dependencies tarball to support AQBanking version update.
diff --git a/.github/workflows/mac-tests.yaml b/.github/workflows/mac-tests.yaml
index b61e25229..069d97e27 100644
--- a/.github/workflows/mac-tests.yaml
+++ b/.github/workflows/mac-tests.yaml
@@ -18,7 +18,7 @@ jobs:
uses: carlosperate/download-file-action at v1.0.3
id: dependencies
with:
- file-url: 'https://downloads.sourceforge.net/gnucash/Dependencies/gnucash-4.x-mac-dependencies.tar.xz'
+ file-url: 'https://downloads.sourceforge.net/gnucash/Dependencies/gnucash-4.900-mac-dependencies.tar.xz'
file-name: gnucash-dependencies.tar.xz
- name: download googletest
uses: carlosperate/download-file-action at v1.0.3
diff --git a/util/ci/macos-ci-deps/macos_bin.manifest b/util/ci/macos-ci-deps/macos_bin.manifest
index 519b6cb90..d088375b5 100644
--- a/util/ci/macos-ci-deps/macos_bin.manifest
+++ b/util/ci/macos-ci-deps/macos_bin.manifest
@@ -22,7 +22,7 @@ ninja
pkg-config
python3
python3-config
-python3.8
-python3.8-config
+python3.10
+python3.10-config
swig
xgettext
diff --git a/util/ci/macos-ci-deps/macos_include.manifest b/util/ci/macos-ci-deps/macos_include.manifest
index b02a3703e..0ef9d4db4 100644
--- a/util/ci/macos-ci-deps/macos_include.manifest
+++ b/util/ci/macos-ci-deps/macos_include.manifest
@@ -24,8 +24,7 @@ lzma
lzma.h
pango-1.0
pixman-1
-pygobject-3.0
-python3.8
+python3.10
unicase.h
unicode
uniconv.h
diff --git a/util/ci/macos-ci-deps/macos_lib.manifest b/util/ci/macos-ci-deps/macos_lib.manifest
index 4acba4961..396063d2f 100644
--- a/util/ci/macos-ci-deps/macos_lib.manifest
+++ b/util/ci/macos-ci-deps/macos_lib.manifest
@@ -24,11 +24,9 @@ libchipcard.6.dylib
libchipcard.dylib
libcord.1.dylib
libcord.dylib
-libcroco-0.6.3.dylib
-libcroco-0.6.dylib
libcrypto.1.1.dylib
libcrypto.dylib
-libdbi.1.dylib
+libdbi.3.dylib
libdbi.dylib
libecpg.6.12.dylib
libecpg.6.dylib
@@ -36,21 +34,17 @@ libecpg.dylib
libecpg_compat.3.12.dylib
libecpg_compat.3.dylib
libecpg_compat.dylib
-libenchant.1.dylib
-libenchant.dylib
+libenchant-2.2.dylib
+libenchant-2.dylib
libepoxy.0.dylib
libepoxy.dylib
libexslt.0.dylib
libexslt.dylib
libffi.7.dylib
libffi.dylib
-libfl.2.dylib
-libfl.dylib
-libfl_pic.2.dylib
-libfl_pic.dylib
libfontconfig.1.dylib
libfontconfig.dylib
-libfreetype.6.17.2.dylib
+libfreetype.6.18.1.dylib
libfreetype.6.dylib
libfreetype.dylib
libfribidi.0.dylib
@@ -65,11 +59,11 @@ libgdk-3.0.dylib
libgdk-3.dylib
libgdk_pixbuf-2.0.0.dylib
libgdk_pixbuf-2.0.dylib
-libgettextlib-0.20.2.dylib
+libgettextlib-0.21.dylib
libgettextlib.dylib
libgettextpo.0.dylib
libgettextpo.dylib
-libgettextsrc-0.20.2.dylib
+libgettextsrc-0.21.dylib
libgettextsrc.dylib
libgio-2.0.0.dylib
libgio-2.0.dylib
@@ -83,7 +77,7 @@ libgmp.10.dylib
libgmp.dylib
libgnutls.30.dylib
libgnutls.dylib
-libgnutlsxx.28.dylib
+libgnutlsxx.30.dylib
libgnutlsxx.dylib
libgobject-2.0.0.dylib
libgobject-2.0.dylib
@@ -93,7 +87,7 @@ libgthread-2.0.0.dylib
libgthread-2.0.dylib
libgtk-3.0.dylib
libgtk-3.dylib
-libgtkmacintegration-gtk3.2.dylib
+libgtkmacintegration-gtk3.4.dylib
libgtkmacintegration-gtk3.dylib
libguile-2.2.1.dylib
libguile-2.2.dylib
@@ -111,33 +105,33 @@ libharfbuzz-subset.0.dylib
libharfbuzz-subset.dylib
libharfbuzz.0.dylib
libharfbuzz.dylib
-libhistory.8.0.dylib
+libhistory.8.1.dylib
libhistory.8.dylib
libhistory.dylib
-libhogweed.5.0.dylib
-libhogweed.5.dylib
+libhogweed.6.3.dylib
+libhogweed.6.dylib
libhogweed.dylib
-libicudata.66.1.dylib
-libicudata.66.dylib
+libicudata.68.2.dylib
+libicudata.68.dylib
libicudata.dylib
-libicui18n.66.1.dylib
-libicui18n.66.dylib
+libicui18n.68.2.dylib
+libicui18n.68.dylib
libicui18n.dylib
-libicuio.66.1.dylib
-libicuio.66.dylib
+libicuio.68.2.dylib
+libicuio.68.dylib
libicuio.dylib
-libicutest.66.1.dylib
-libicutest.66.dylib
+libicutest.68.2.dylib
+libicutest.68.dylib
libicutest.dylib
-libicutu.66.1.dylib
-libicutu.66.dylib
+libicutu.68.2.dylib
+libicutu.68.dylib
libicutu.dylib
-libicuuc.66.1.dylib
-libicuuc.66.dylib
+libicuuc.68.2.dylib
+libicuuc.68.dylib
libicuuc.dylib
libintl.8.dylib
libintl.dylib
-libjavascriptcoregtk-4.0.18.17.10.dylib
+libjavascriptcoregtk-4.0.18.18.4.dylib
libjavascriptcoregtk-4.0.18.dylib
libjavascriptcoregtk-4.0.dylib
libjpeg.9.dylib
@@ -146,10 +140,8 @@ libltdl.7.dylib
libltdl.dylib
liblzma.5.dylib
liblzma.dylib
-libmysqlclient.18.dylib
-libmysqlclient.dylib
-libnettle.7.0.dylib
-libnettle.7.dylib
+libnettle.8.3.dylib
+libnettle.8.dylib
libnettle.dylib
libofx.7.dylib
libofx.dylib
@@ -181,8 +173,8 @@ libpq.5.dylib
libpq.dylib
libpsl.5.dylib
libpsl.dylib
-libpython3.8.dylib
-libreadline.8.0.dylib
+libpython3.10.dylib
+libreadline.8.1.dylib
libreadline.8.dylib
libreadline.dylib
librsvg-2.2.dylib
@@ -205,9 +197,9 @@ libtiffxx.5.dylib
libtiffxx.dylib
libunistring.2.dylib
libunistring.dylib
-libvala-0.36.0.dylib
-libvala-0.36.dylib
-libwebkit2gtk-4.0.37.49.6.dylib
+libvala-0.52.0.dylib
+libvala-0.52.dylib
+libwebkit2gtk-4.0.37.53.1.dylib
libwebkit2gtk-4.0.37.dylib
libwebkit2gtk-4.0.dylib
libwebp.7.dylib
@@ -230,8 +222,9 @@ libxmlsec1.1.dylib
libxmlsec1.dylib
libxslt.1.dylib
libxslt.dylib
-libz.1.2.11.dylib
+libz.1.2.13.dylib
libz.1.dylib
libz.dylib
+mariadb
pkgconfig
-python3.8
+python3.10
diff --git a/util/ci/macos-ci-deps/macos_share.manifest b/util/ci/macos-ci-deps/macos_share.manifest
index cde5ea6d8..6adc6f622 100644
--- a/util/ci/macos-ci-deps/macos_share.manifest
+++ b/util/ci/macos-ci-deps/macos_share.manifest
@@ -1,7 +1,6 @@
-cmake
-cmake-3.17
+cmake-3.20
gettext
-gettext-0.20.2
+gettext-0.21
guile
itstool
pkgconfig
diff --git a/util/ci/macos-ci-deps/make-macos-deps-tarball.sh b/util/ci/macos-ci-deps/make-macos-deps-tarball.sh
index 3416a1fd9..5736d0d55 100755
--- a/util/ci/macos-ci-deps/make-macos-deps-tarball.sh
+++ b/util/ci/macos-ci-deps/make-macos-deps-tarball.sh
@@ -12,6 +12,7 @@ jhbuild build
cd /Users/runner/gnucash
mv inst arch
+cp $(which ninja) arch/bin/
mkdir inst
for i in 'bin' 'include' 'lib' 'share'; do
j="$DIR/util/ci/macos-ci-deps/macos_$i.manifest"
commit 86118b38178cabe96267fadcd44a83547c1ce8b5
Author: John Ralls <jralls at ceridwen.us>
Date: Mon Oct 3 14:24:44 2022 -0700
[AQB] Require AQBanking 6.4.0 and Gwenhywfar 5.8.0.
Remove all ifdef code for older versions.
diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml
index 1303c17fc..c8f36515a 100644
--- a/.github/workflows/ci-tests.yml
+++ b/.github/workflows/ci-tests.yml
@@ -2,9 +2,9 @@ name: ci-tests
on: [push, pull_request]
permissions: {}
jobs:
- ci_tests_ubuntu-18:
- runs-on: ubuntu-18.04
- name: Ubuntu-18.04 CI Tests
+ ci_tests_ubuntu-22:
+ runs-on: ubuntu-22.04
+ name: Ubuntu-22.04 CI Tests
env:
TZ: America/Los_Angeles
steps:
@@ -12,7 +12,7 @@ jobs:
uses: actions/checkout at v2
- run: sudo apt-get update
- name: Install additional dependencies
- run: sudo apt-get install -y cmake libxslt-dev xsltproc ninja-build libboost-all-dev libgtk-3-dev guile-2.2-dev libgwengui-gtk3-dev libaqbanking-dev libofx-dev libdbi-dev libdbd-sqlite3 libwebkit2gtk-4.0-dev googletest
+ run: sudo apt-get install -y gettext cmake libxslt-dev xsltproc ninja-build libboost-all-dev libgtk-3-dev guile-2.2-dev libgwengui-gtk3-dev libaqbanking-dev libofx-dev libdbi-dev libdbd-sqlite3 libwebkit2gtk-4.0-dev googletest
- name: Install language packs.
run: sudo apt-get --reinstall install -y language-pack-en language-pack-fr
- run: |
@@ -38,44 +38,3 @@ jobs:
with:
name: TestLog
path: ${{ github.workspace }}/build/Testing/Temporary/LastTest.log
- ci_tests_ubuntu-20:
- runs-on: ubuntu-20.04
- name: Ubuntu-20.04 CI Tests
- env:
- TZ: America/Los_Angeles
- steps:
- - name: Checkout
- uses: actions/checkout at v2
- - name: Install apt utils
- run: sudo apt-get install -y --no-install-recommends apt-utils
- - name: Update apt
- run: |
- sudo sed -i -e 's/^# deb-src/deb-src/' /etc/apt/sources.list
- sudo apt-get update -y
- - name: Install additional dependencies
- run: |
- sudo apt-get build-dep -y gnucash
- sudo apt-get install ninja-build guile-3.0-dev libboost-program-options-dev
- - name: Install language packs.
- run: sudo apt-get --reinstall install -y language-pack-en language-pack-fr
- - run: |
- echo "ROOT_DIR=$GITHUB_WORKSPACE/.." >> $GITHUB_ENV
- - name: Create Directories
- run: |
- pwd
- mkdir $ROOT_DIR/inst
- mkdir build
- - name: Configure GnuCash
- run: |
- cd build
- cmake -G Ninja -DWITH_PYTHON=ON -DCMAKE_INSTALL_PREFIX=$ROOT_DIR/inst $GITHUB_WORKSPACE
- - name: Build and Test GnuCash
- run: |
- cd build
- ninja
- ninja check
- - uses: actions/upload-artifact at v2
- if: failure()
- with:
- name: TestLog
- path: ${{ github.workspace }}/build/Testing/Temporary/LastTest.log
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 727a83337..dacf96219 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,7 +48,7 @@ include (TestBigEndian)
# SQL, put -D WITH_SQL=OFF on the command line.
option (WITH_SQL "Build this project with SQL (libdbi) support" ON)
-option (WITH_AQBANKING "Build this project with aqbanking (online banking) support" ON)
+option (WITH_AQBANKING "Build this project with aqbanking (online banking and a variety of file import formats) support" ON)
option (WITH_GNUCASH "Build all of GnuCash, not just the library" ON)
option (WITH_OFX "compile with ofx support (needs LibOFX)" ON)
option (WITH_PYTHON "enable python plugin and bindings" OFF)
@@ -355,8 +355,8 @@ find_guile_dirs()
# ############################################################
if (WITH_AQBANKING)
- pkg_check_modules (GWENHYWFAR REQUIRED gwenhywfar>=4.20)
- pkg_check_modules (AQBANKING REQUIRED aqbanking>=5.7.8)
+ pkg_check_modules (GWENHYWFAR REQUIRED gwenhywfar>=5.8.0)
+ pkg_check_modules (AQBANKING REQUIRED aqbanking>=6.4.0)
set(CMAKE_REQUIRED_INCLUDES "${AQBANKING_INCLUDE_DIRS}"
"${GWENHYWFAR_INCLUDE_DIRS}")
set(CMAKE_REQUIRED_LIBRARIES "${AQBANKING_LD_FLAGS}")
diff --git a/README.dependencies b/README.dependencies
index 82653e42d..dd6cd8cf2 100644
--- a/README.dependencies
+++ b/README.dependencies
@@ -93,9 +93,8 @@ Libraries/Deps
optional
--------
- aqbanking 5.7.8 online banking; Note that 6.1.0
- gwenhywfar 4.20.0 or higher is needed for German
- FinTS.
+ aqbanking 6.4.0 online banking and SWIFT
+ gwenhywfar 5.8.0 file imports.
python 3.6.0 python bindings; headers
required, not just binaries.
diff --git a/gnucash/import-export/aqb/assistant-ab-initial.c b/gnucash/import-export/aqb/assistant-ab-initial.c
index 6af610667..dd11bf819 100644
--- a/gnucash/import-export/aqb/assistant-ab-initial.c
+++ b/gnucash/import-export/aqb/assistant-ab-initial.c
@@ -40,10 +40,8 @@
#include "gnc-ab-utils.h" /* For version macros */
#include <aqbanking/banking.h>
-#ifdef AQBANKING6
#include <aqbanking/types/account_spec.h>
#include <gwenhywfar/gui.h>
-#endif
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
@@ -65,9 +63,6 @@
#include "gnc-session.h"
#include "import-account-matcher.h"
#include "import-utilities.h"
-#ifndef AQBANKING6
-# include <aqbanking/dlg_setup.h>
-#endif
/* This static indicates the debugging module that this .o belongs to. */
static QofLogModule log_module = GNC_MOD_ASSISTANT;
@@ -92,10 +87,8 @@ void aai_page_prepare (GtkAssistant *assistant, gpointer user_data);
void aai_button_clicked_cb(GtkButton *button, gpointer user_data);
void aai_match_delete_button_clicked_cb(GtkButton *button, gpointer user_data);
-#ifdef AQBANKING6
static guint aai_ab_account_hash(gconstpointer v);
static gboolean aai_ab_account_equal(gconstpointer v1, gconstpointer v2);
-#endif
void aai_match_page_prepare (GtkAssistant *assistant, gpointer user_data);
static gboolean banking_has_accounts(AB_BANKING *banking);
@@ -207,9 +200,6 @@ aai_destroy_cb(GtkWidget *object, gpointer user_data)
if (info->gnc_hash)
{
-#ifndef AQBANKING6
- AB_Banking_OnlineFini(info->api);
-#endif
g_hash_table_destroy(info->gnc_hash);
info->gnc_hash = NULL;
}
@@ -268,16 +258,7 @@ aai_button_clicked_cb(GtkButton *button, gpointer user_data)
}
{
-#ifdef AQBANKING6
GWEN_DIALOG *dlg = AB_Banking_CreateSetupDialog(banking);
-#else
- GWEN_DIALOG *dlg = AB_SetupDialog_new(banking);
-
- if (AB_Banking_OnlineInit(banking) != 0)
- {
- PERR("Got error on AB_Banking_OnlineInit!");
- }
-#endif
if (!dlg)
{
PERR("Could not lookup Setup Dialog of aqbanking!");
@@ -292,12 +273,6 @@ aai_button_clicked_cb(GtkButton *button, gpointer user_data)
}
GWEN_Dialog_free(dlg);
}
-#ifndef AQBANKING6
- if (AB_Banking_OnlineFini(banking) != 0)
- {
- PERR("Got error on AB_Banking_OnlineFini!");
- }
-#endif
}
/* Enable the Assistant Buttons if we accounts */
@@ -369,7 +344,6 @@ aai_match_delete_button_clicked_cb(GtkButton *button, gpointer user_data)
}
}
-#ifdef AQBANKING6
static guint
aai_ab_account_hash (gconstpointer v)
{
@@ -393,7 +367,6 @@ aai_ab_account_equal (gconstpointer v1, gconstpointer v2)
return uid1 == uid2;
}
}
-#endif
static void
insert_acc_into_revhash_cb(gpointer ab_acc, gpointer gnc_acc, gpointer revhash)
@@ -424,17 +397,9 @@ aai_match_page_prepare (GtkAssistant *assistant, gpointer user_data)
/* Do not run this twice */
if (!info->match_page_prepared)
{
-#ifndef AQBANKING6
- /* Load aqbanking accounts */
- AB_Banking_OnlineInit(info->api);
-#endif
/* Determine current mapping */
root = gnc_book_get_root_account(gnc_get_current_book());
-#ifdef AQBANKING6
info->gnc_hash = g_hash_table_new(&aai_ab_account_hash, &aai_ab_account_equal);
-#else
- info->gnc_hash = g_hash_table_new(&g_direct_hash, &g_direct_equal);
-#endif
data.api = info->api;
data.hash = info->gnc_hash;
gnc_account_foreach_descendant(root, (AccountCb) hash_from_kvp_acc_cb, &data);
@@ -479,24 +444,11 @@ banking_has_accounts(AB_BANKING *banking)
g_return_val_if_fail(banking, FALSE);
-#ifdef AQBANKING6
if (AB_Banking_GetAccountSpecList (banking, &accl) >= 0 &&
accl && AB_AccountSpec_List_GetCount (accl))
result = TRUE;
if (accl)
AB_AccountSpec_List_free (accl);
-#else
- AB_Banking_OnlineInit(banking);
-
- accl = AB_Banking_GetAccounts(banking);
- if (accl && (AB_Account_List2_GetSize(accl) > 0))
- result = TRUE;
-
- if (accl)
- AB_Account_List2_free(accl);
-
- AB_Banking_OnlineFini(banking);
-#endif
return result;
}
@@ -521,17 +473,9 @@ ab_account_longname(const GNC_AB_ACCOUNT_SPEC *ab_acc)
g_return_val_if_fail(ab_acc, NULL);
-#ifdef AQBANKING6
bankcode = AB_AccountSpec_GetBankCode(ab_acc);
subAccountId = AB_AccountSpec_GetSubAccountNumber(ab_acc);
account_number = AB_AccountSpec_GetAccountNumber (ab_acc);
-#else
- ab_bankname = AB_Account_GetBankName(ab_acc);
- bankname = ab_bankname ? gnc_utf8_strip_invalid_strdup(ab_bankname) : NULL;
- bankcode = AB_Account_GetBankCode(ab_acc);
- subAccountId = AB_Account_GetSubAccountId(ab_acc);
- account_number = AB_Account_GetAccountNumber (ab_acc);
-#endif
/* Translators: Strings are 1. Bank code, 2. Bank name,
3. Account Number, 4. Subaccount ID */
result = g_strdup_printf(_("Bank code %s (%s), Account %s (%s)"),
@@ -593,14 +537,8 @@ update_account_list(ABInitialInfo *info)
/* Refill the list */
gtk_list_store_clear(info->account_store);
-#ifdef AQBANKING6
if (AB_Banking_GetAccountSpecList(info->api, &acclist) >= 0 && acclist)
AB_AccountSpec_List_ForEach(acclist, update_account_list_acc_cb, info);
-#else
- acclist = AB_Banking_GetAccounts(info->api);
- if (acclist)
- AB_Account_List2_ForEach(acclist, update_account_list_acc_cb, info);
-#endif
else
g_warning("update_account_list: Oops, account list from AB_Banking "
"is NULL");
@@ -639,11 +577,7 @@ clear_line_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter,
gtk_tree_model_get(model, iter, ACCOUNT_LIST_COL_AB_ACCT, &ab_acc, -1);
-#ifdef AQBANKING6
if (aai_ab_account_equal(ab_acc, data->ab_acc))
-#else
- if (ab_acc == data->ab_acc)
-#endif
{
gtk_list_store_set(store, iter, ACCOUNT_LIST_COL_GNC_NAME, "",
ACCOUNT_LIST_COL_CHECKED, TRUE, -1);
@@ -682,11 +616,7 @@ account_list_clicked_cb (GtkTreeView *view, GtkTreePath *path,
old_value = g_hash_table_lookup(info->gnc_hash, ab_acc);
longname = ab_account_longname(ab_acc);
-#ifdef AQBANKING6
currency = AB_AccountSpec_GetCurrency(ab_acc);
-#else
- currency = AB_Account_GetCurrency(ab_acc);
-#endif
if (currency && *currency)
{
commodity = gnc_commodity_table_lookup(
@@ -753,51 +683,35 @@ save_kvp_acc_cb(gpointer key, gpointer value, gpointer user_data)
guint32 ab_account_uid;
const gchar *ab_accountid, *gnc_accountid;
const gchar *ab_bankcode, *gnc_bankcode;
-#ifdef AQBANKING6
gchar *ab_online_id;
gchar *gnc_online_id;
-#endif
g_return_if_fail(ab_acc && gnc_acc);
-#ifdef AQBANKING6
ab_account_uid = AB_AccountSpec_GetUniqueId(ab_acc);
-#else
- ab_account_uid = AB_Account_GetUniqueId(ab_acc);
-#endif
if (gnc_ab_get_account_uid(gnc_acc) != ab_account_uid)
gnc_ab_set_account_uid(gnc_acc, ab_account_uid);
-#ifdef AQBANKING6
ab_accountid = AB_AccountSpec_GetAccountNumber(ab_acc);
-#else
- ab_accountid = AB_Account_GetAccountNumber(ab_acc);
-#endif
gnc_accountid = gnc_ab_get_account_accountid(gnc_acc);
if (ab_accountid
&& (!gnc_accountid
|| (strcmp(ab_accountid, gnc_accountid) != 0)))
gnc_ab_set_account_accountid(gnc_acc, ab_accountid);
-#ifdef AQBANKING6
ab_bankcode = AB_AccountSpec_GetBankCode(ab_acc);
-#else
- ab_bankcode = AB_Account_GetBankCode(ab_acc);
-#endif
gnc_bankcode = gnc_ab_get_account_bankcode(gnc_acc);
if (ab_bankcode
&& (!gnc_bankcode
|| (strcmp(gnc_bankcode, ab_bankcode) != 0)))
gnc_ab_set_account_bankcode(gnc_acc, ab_bankcode);
-#ifdef AQBANKING6
ab_online_id = gnc_ab_create_online_id(ab_bankcode, ab_accountid);
gnc_online_id = gnc_import_get_acc_online_id(gnc_acc);
if (ab_online_id && (!gnc_online_id || (strcmp(ab_online_id, gnc_online_id) != 0)))
gnc_import_set_acc_online_id(gnc_acc, ab_online_id);
g_free(ab_online_id);
g_free (gnc_online_id);
-#endif
}
static void
diff --git a/gnucash/import-export/aqb/dialog-ab-trans.c b/gnucash/import-export/aqb/dialog-ab-trans.c
index 7d5f87bd5..74f291882 100644
--- a/gnucash/import-export/aqb/dialog-ab-trans.c
+++ b/gnucash/import-export/aqb/dialog-ab-trans.c
@@ -32,16 +32,8 @@
#include <config.h>
#include <glib/gi18n.h>
-#include "gnc-ab-utils.h" /* for AQBANKING6 */
-#ifdef AQBANKING6
-# include <aqbanking/types/transaction.h>
-#else
-# include <aqbanking/jobsingletransfer.h>
-# include <aqbanking/jobsingledebitnote.h>
-# include <aqbanking/jobinternaltransfer.h>
-# include <aqbanking/jobsepatransfer.h>
-# include <aqbanking/jobsepadebitnote.h>
-#endif
+#include "gnc-ab-utils.h"
+#include <aqbanking/types/transaction.h>
#include <gnc-aqbanking-templates.h>
#include "dialog-ab-trans.h"
@@ -189,11 +181,7 @@ gnc_ab_trans_dialog_fill_values(GncABTransDialog *td)
AB_TRANSACTION *trans = AB_Transaction_new();
AB_VALUE *value;
-#ifdef AQBANKING6
AB_Banking_FillTransactionFromAccountSpec(trans, td->ab_acc);
-#else
- AB_Transaction_FillLocalFromAccount(trans, td->ab_acc);
-#endif
if (gnc_ab_trans_isSEPA(td->trans_type))
{
@@ -212,7 +200,6 @@ gnc_ab_trans_dialog_fill_values(GncABTransDialog *td)
trans, gtk_entry_get_text(GTK_ENTRY(td->recp_account_entry)));
}
AB_Transaction_SetRemoteCountry(trans, "DE");
-#ifdef AQBANKING6
AB_Transaction_SetRemoteName(
trans, gtk_entry_get_text(GTK_ENTRY(td->recp_name_entry)));
@@ -222,19 +209,6 @@ gnc_ab_trans_dialog_fill_values(GncABTransDialog *td)
trans, gtk_entry_get_text(GTK_ENTRY(td->purpose_cont_entry)));
AB_Transaction_AddPurposeLine(
trans, gtk_entry_get_text(GTK_ENTRY(td->purpose_cont2_entry)));
-#else
- AB_Transaction_AddRemoteName(
- trans, gtk_entry_get_text(GTK_ENTRY(td->recp_name_entry)), FALSE);
-
- AB_Transaction_AddPurpose(
- trans, gtk_entry_get_text(GTK_ENTRY(td->purpose_entry)), FALSE);
- AB_Transaction_AddPurpose(
- trans, gtk_entry_get_text(GTK_ENTRY(td->purpose_cont_entry)), FALSE);
- AB_Transaction_AddPurpose(
- trans, gtk_entry_get_text(GTK_ENTRY(td->purpose_cont2_entry)), FALSE);
- AB_Transaction_AddPurpose(
- trans, gtk_entry_get_text(GTK_ENTRY(td->purpose_cont3_entry)), FALSE);
-#endif
value = AB_Value_fromDouble(gnc_amount_edit_get_damount(
GNC_AMOUNT_EDIT(td->amount_edit)));
/* FIXME: Replace "EUR" by account-dependent string here. */
@@ -294,23 +268,12 @@ gnc_ab_trans_dialog_new(GtkWidget *parent, GNC_AB_ACCOUNT_SPEC *ab_acc,
g_return_val_if_fail(ab_acc, NULL);
-#ifdef AQBANKING6
ab_ownername = AB_AccountSpec_GetOwnerName(ab_acc);
if (!ab_ownername)
ab_ownername = "";
ab_accountnumber = AB_AccountSpec_GetAccountNumber(ab_acc);
ab_bankcode = AB_AccountSpec_GetBankCode(ab_acc);
ab_bankname = _("(unknown)");
-#else
- ab_ownername = AB_Account_GetOwnerName(ab_acc);
- if (!ab_ownername)
- ab_ownername = "";
- ab_accountnumber = AB_Account_GetAccountNumber(ab_acc);
- ab_bankcode = AB_Account_GetBankCode(ab_acc);
- ab_bankname = AB_Account_GetBankName(ab_acc);
- if (!ab_bankname || !*ab_bankname)
- ab_bankname = _("(unknown)");
-#endif
td = g_new0(GncABTransDialog, 1);
td->parent = parent;
@@ -474,13 +437,8 @@ gnc_ab_trans_dialog_new(GtkWidget *parent, GNC_AB_ACCOUNT_SPEC *ab_acc,
if (gnc_ab_trans_isSEPA(trans_type))
{
gtk_widget_set_sensitive(GTK_WIDGET(td->orig_name_entry), TRUE);
-#if AQBANKING6
ab_accountnumber = AB_AccountSpec_GetIban(ab_acc);
ab_bankcode = AB_AccountSpec_GetBic(ab_acc);
-#else
- ab_accountnumber = AB_Account_GetIBAN(ab_acc);
- ab_bankcode = AB_Account_GetBIC(ab_acc);
-#endif
gtk_label_set_text(GTK_LABEL(orig_account_label), ab_accountnumber);
gtk_label_set_text (GTK_LABEL (orig_bankcode_label), ab_bankcode);
}
@@ -711,11 +669,7 @@ gnc_ab_trans_dialog_run_until_ok(GncABTransDialog *td)
}
/* Activate as many purpose entries as available for the job */
-#ifdef AQBANKING6
joblimits = AB_AccountSpec_GetTransactionLimitsForCommand(td->ab_acc, AB_Transaction_GetCommand(job));
-#else
- joblimits = AB_Job_GetFieldLimits (job);
-#endif
max_purpose_lines = joblimits ?
AB_TransactionLimits_GetMaxLinesPurpose(joblimits) : 2;
gtk_widget_set_sensitive(td->purpose_cont_entry, max_purpose_lines > 1);
@@ -855,7 +809,6 @@ static GNC_AB_JOB *
gnc_ab_trans_dialog_get_available_empty_job(GNC_AB_ACCOUNT_SPEC *ab_acc, GncABTransType trans_type)
{
GNC_AB_JOB *job;
-#ifdef AQBANKING6
AB_TRANSACTION_COMMAND cmd = AB_Transaction_CommandUnknown;
switch (trans_type)
@@ -869,11 +822,9 @@ gnc_ab_trans_dialog_get_available_empty_job(GNC_AB_ACCOUNT_SPEC *ab_acc, GncABTr
case SEPA_TRANSFER:
cmd=AB_Transaction_CommandSepaTransfer;
break;
-#if (AQBANKING_VERSION_INT >= 60400)
case SEPA_INTERNAL_TRANSFER:
cmd=AB_Transaction_CommandSepaInternalTransfer;
break;
-#endif
case SEPA_DEBITNOTE:
cmd=AB_Transaction_CommandSepaDebitNote;
break;
@@ -887,32 +838,6 @@ gnc_ab_trans_dialog_get_available_empty_job(GNC_AB_ACCOUNT_SPEC *ab_acc, GncABTr
job = AB_Transaction_new();
AB_Transaction_SetCommand(job, cmd);
AB_Transaction_SetUniqueAccountId(job, AB_AccountSpec_GetUniqueId(ab_acc));
-#else
- switch (trans_type)
- {
- case SINGLE_DEBITNOTE:
- job = AB_JobSingleDebitNote_new(ab_acc);
- break;
- case SINGLE_INTERNAL_TRANSFER:
- job = AB_JobInternalTransfer_new(ab_acc);
- break;
- case SINGLE_TRANSFER:
- job = AB_JobSingleTransfer_new(ab_acc);
- break;
- case SEPA_DEBITNOTE:
- job = AB_JobSepaDebitNote_new(ab_acc);
- break;
- case SEPA_TRANSFER:
- default:
- job = AB_JobSepaTransfer_new(ab_acc);
- break;
- };
- if (!job || AB_Job_CheckAvailability(job))
- {
- if (job) AB_Job_free(job);
- return NULL;
- }
-#endif
return job;
}
@@ -932,7 +857,6 @@ gnc_ab_get_trans_job(GNC_AB_ACCOUNT_SPEC *ab_acc,
g_return_val_if_fail(ab_acc && ab_trans, NULL);
-#ifdef AQBANKING6
job = gnc_ab_trans_dialog_get_available_empty_job(ab_acc, trans_type);
if (job)
{
@@ -949,14 +873,6 @@ gnc_ab_get_trans_job(GNC_AB_ACCOUNT_SPEC *ab_acc,
}
return NULL;
-#else
- job = gnc_ab_trans_dialog_get_available_empty_job(ab_acc, trans_type);
- if (job)
- {
- AB_Job_SetTransaction(job, ab_trans);
- }
- return job;
-#endif
}
void
diff --git a/gnucash/import-export/aqb/gnc-ab-getbalance.c b/gnucash/import-export/aqb/gnc-ab-getbalance.c
index dc0394a2b..ec2f4bd84 100644
--- a/gnucash/import-export/aqb/gnc-ab-getbalance.c
+++ b/gnucash/import-export/aqb/gnc-ab-getbalance.c
@@ -33,11 +33,7 @@
#include <glib/gi18n.h>
#include <aqbanking/banking.h>
-#ifdef AQBANKING6
# include <aqbanking/types/transaction.h>
-#else
-#include <aqbanking/jobgetbalance.h>
-#endif
#include "gnc-ab-getbalance.h"
#include "gnc-ab-kvp.h"
@@ -70,14 +66,6 @@ gnc_ab_getbalance(GtkWidget *parent, Account *gnc_acc)
return;
}
-#ifndef AQBANKING6
- if (AB_Banking_OnlineInit(api) != 0)
- {
- g_warning("gnc_ab_gettrans: Couldn't initialize AqBanking API");
- goto cleanup;
- }
- online = TRUE;
-#endif
/* Get the AqBanking Account */
ab_acc = gnc_ab_get_ab_account(api, gnc_acc);
if (!ab_acc)
@@ -88,29 +76,19 @@ gnc_ab_getbalance(GtkWidget *parent, Account *gnc_acc)
}
/* Get a GetBalance job and enqueue it */
-#ifdef AQBANKING6
if (!AB_AccountSpec_GetTransactionLimitsForCommand(ab_acc, AB_Transaction_CommandGetBalance))
-#else
- job = AB_JobGetBalance_new(ab_acc);
- if (!job || AB_Job_CheckAvailability(job))
-#endif
{
g_warning("gnc_ab_getbalance: JobGetBalance not available for this "
"account");
gnc_error_dialog (GTK_WINDOW (parent), _("Online action \"Get Balance\" not available for this account."));
goto cleanup;
}
-#ifdef AQBANKING6
job = AB_Transaction_new();
AB_Transaction_SetCommand(job, AB_Transaction_CommandGetBalance);
AB_Transaction_SetUniqueAccountId(job, AB_AccountSpec_GetUniqueId(ab_acc));
job_list = AB_Transaction_List2_new();
AB_Transaction_List2_PushBack(job_list, job);
-#else
- job_list = AB_Job_List2_new();
- AB_Job_List2_PushBack(job_list, job);
-#endif
/* Get a GUI object */
gui = gnc_GWEN_Gui_get(parent);
if (!gui)
@@ -123,38 +101,21 @@ gnc_ab_getbalance(GtkWidget *parent, Account *gnc_acc)
context = AB_ImExporterContext_new();
/* Execute the job */
-#ifdef AQBANKING6
AB_Banking_SendCommands(api, job_list, context);
-#else
- AB_Banking_ExecuteJobs(api, job_list, context);
-#endif
/* Ignore the return value of AB_Banking_ExecuteJobs(), as the job's
* status always describes better whether the job was actually
* transferred to and accepted by the bank. See also
* https://lists.gnucash.org/pipermail/gnucash-de/2008-September/006389.html
*/
-#ifdef AQBANKING6
job_status = AB_Transaction_GetStatus(job);
if (job_status != AB_Transaction_StatusEnqueued
&& job_status != AB_Transaction_StatusPending
&& job_status != AB_Transaction_StatusAccepted)
-#else
- job_status = AB_Job_GetStatus(job);
- if (job_status != AB_Job_StatusFinished
- && job_status != AB_Job_StatusPending)
-#endif
{
g_warning("gnc_ab_getbalance: Error on executing job: %d", job_status);
-#ifdef AQBANKING6
gnc_error_dialog (GTK_WINDOW (parent),
_("Error on executing job.\n\nStatus: %s"),
AB_Transaction_Status_toString(job_status));
-#else
- gnc_error_dialog (GTK_WINDOW (parent),
- _("Error on executing job.\n\nStatus: %s - %s"),
- AB_Job_Status2Char(job_status),
- AB_Job_GetResultText(job));
-#endif
goto cleanup;
}
@@ -168,18 +129,9 @@ cleanup:
AB_ImExporterContext_free(context);
if (gui)
gnc_GWEN_Gui_release(gui);
-#ifdef AQBANKING6
if (job_list)
AB_Transaction_List2_free(job_list);
if (job)
AB_Transaction_free(job);
-#else
- if (job_list)
- AB_Job_List2_free(job_list);
- if (job)
- AB_Job_free(job);
- if (online)
- AB_Banking_OnlineFini(api);
-#endif
gnc_AB_BANKING_fini(api);
}
diff --git a/gnucash/import-export/aqb/gnc-ab-gettrans.c b/gnucash/import-export/aqb/gnc-ab-gettrans.c
index 376a92e4b..190292bbd 100644
--- a/gnucash/import-export/aqb/gnc-ab-gettrans.c
+++ b/gnucash/import-export/aqb/gnc-ab-gettrans.c
@@ -33,11 +33,7 @@
#include <glib/gi18n.h>
#include <aqbanking/banking.h>
-#ifdef AQBANKING6
# include <aqbanking/types/transaction.h>
-#else
-# include <aqbanking/jobgettransactions.h>
-#endif
#include "Account.h"
#include "dialog-ab-daterange.h"
#include "gnc-ab-gettrans.h"
@@ -121,14 +117,6 @@ gnc_ab_gettrans(GtkWidget *parent, Account *gnc_acc)
g_warning("gnc_ab_gettrans: Couldn't get AqBanking API");
return;
}
-#ifndef AQBANKING6
- if (AB_Banking_OnlineInit(api) != 0)
- {
- g_warning("gnc_ab_gettrans: Couldn't initialize AqBanking API");
- goto cleanup;
- }
- online = TRUE;
-#endif
/* Get the AqBanking Account */
ab_acc = gnc_ab_get_ab_account(api, gnc_acc);
if (!ab_acc)
@@ -148,19 +136,13 @@ gnc_ab_gettrans(GtkWidget *parent, Account *gnc_acc)
until = GWEN_Time_toTime_t(to_date);
/* Get a GetTransactions job and enqueue it */
-#ifdef AQBANKING6
if (!AB_AccountSpec_GetTransactionLimitsForCommand(ab_acc, AB_Transaction_CommandGetTransactions))
-#else
- job = AB_JobGetTransactions_new(ab_acc);
- if (!job || AB_Job_CheckAvailability(job))
-#endif
{
g_warning("gnc_ab_gettrans: JobGetTransactions not available for this "
"account");
gnc_error_dialog (GTK_WINDOW (parent), _("Online action \"Get Transactions\" not available for this account."));
goto cleanup;
}
-#ifdef AQBANKING6
job = AB_Transaction_new();
AB_Transaction_SetCommand(job, AB_Transaction_CommandGetTransactions);
AB_Transaction_SetUniqueAccountId(job, AB_AccountSpec_GetUniqueId(ab_acc));
@@ -185,12 +167,6 @@ gnc_ab_gettrans(GtkWidget *parent, Account *gnc_acc)
job_list = AB_Transaction_List2_new();
AB_Transaction_List2_PushBack(job_list, job);
-#else
- AB_JobGetTransactions_SetFromTime(job, from_date);
- AB_JobGetTransactions_SetToTime(job, to_date);
- job_list = AB_Job_List2_new();
- AB_Job_List2_PushBack(job_list, job);
-#endif
/* Get a GUI object */
gui = gnc_GWEN_Gui_get(parent);
if (!gui)
@@ -203,38 +179,22 @@ gnc_ab_gettrans(GtkWidget *parent, Account *gnc_acc)
context = AB_ImExporterContext_new();
/* Execute the job */
-#ifdef AQBANKING6
AB_Banking_SendCommands(api, job_list, context);
-#else
- AB_Banking_ExecuteJobs(api, job_list, context);
-#endif
+
/* Ignore the return value of AB_Banking_ExecuteJobs(), as the job's
* status always describes better whether the job was actually
* transferred to and accepted by the bank. See also
* https://lists.gnucash.org/pipermail/gnucash-de/2008-September/006389.html
*/
-#ifdef AQBANKING6
job_status = AB_Transaction_GetStatus(job);
if (job_status != AB_Transaction_StatusAccepted
&& job_status != AB_Transaction_StatusPending)
-#else
- job_status = AB_Job_GetStatus(job);
- if (job_status != AB_Job_StatusFinished
- && job_status != AB_Job_StatusPending)
-#endif
{
g_warning("gnc_ab_gettrans: Error on executing job");
-#ifdef AQBANKING6
gnc_error_dialog (GTK_WINDOW (parent),
_("Error on executing job.\n\nStatus: %s (%d)"),
AB_Transaction_Status_toString(job_status),
job_status);
-#else
- gnc_error_dialog (GTK_WINDOW (parent),
- _("Error on executing job.\n\nStatus: %s - %s"),
- AB_Job_Status2Char(job_status),
- AB_Job_GetResultText(job));
-#endif
goto cleanup;
}
@@ -267,24 +227,12 @@ cleanup:
if (gui)
gnc_GWEN_Gui_release(gui);
if (job_list)
-#ifdef AQBANKING6
AB_Transaction_List2_free(job_list);
-#else
- AB_Job_List2_free(job_list);
-#endif
if (job)
-#ifdef AQBANKING6
AB_Transaction_free(job);
-#else
- AB_Job_free(job);
-#endif
if (to_date)
GWEN_Time_free(to_date);
if (from_date)
GWEN_Time_free(from_date);
-#ifndef AQBANKING6
- if (online)
- AB_Banking_OnlineFini(api);
-#endif
gnc_AB_BANKING_fini(api);
}
diff --git a/gnucash/import-export/aqb/gnc-ab-transfer.c b/gnucash/import-export/aqb/gnc-ab-transfer.c
index 2194cd2a2..39b9ae4ed 100644
--- a/gnucash/import-export/aqb/gnc-ab-transfer.c
+++ b/gnucash/import-export/aqb/gnc-ab-transfer.c
@@ -97,14 +97,6 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
g_warning("gnc_ab_maketrans: Couldn't get AqBanking API");
return;
}
-#ifndef AQBANKING6
- if (AB_Banking_OnlineInit(api) != 0)
- {
- g_warning("gnc_ab_maketrans: Couldn't initialize AqBanking API");
- goto cleanup;
- }
- online = TRUE;
-#endif
/* Get the AqBanking Account */
ab_acc = gnc_ab_get_ab_account(api, gnc_acc);
if (!ab_acc)
@@ -114,7 +106,6 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
goto cleanup;
}
-#if (AQBANKING_VERSION_INT >= 60400)
if (trans_type == SEPA_INTERNAL_TRANSFER)
{
/* Generate list of template transactions from the reference accounts*/
@@ -127,13 +118,12 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
}
}
else
-#endif
{
/* Get list of template transactions */
templates = gnc_ab_trans_templ_list_new_from_book(
gnc_account_get_book(gnc_acc));
}
-
+
/* Create new ABTransDialog */
td = gnc_ab_trans_dialog_new(parent, ab_acc,
xaccAccountGetCommoditySCU(gnc_acc),
@@ -158,26 +148,12 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
GNC_AB_JOB_STATUS job_status;
GncABImExContextImport *ieci = NULL;
-#ifndef AQBANKING6
- /* Get a GUI object */
- gui = gnc_GWEN_Gui_get(parent);
- if (!gui)
- {
- g_warning("gnc_ab_maketrans: Couldn't initialize Gwenhywfar GUI");
- aborted = TRUE;
- goto repeat;
- }
-#endif
/* Let the user enter the values */
result = gnc_ab_trans_dialog_run_until_ok(td);
templates = gnc_ab_trans_dialog_get_templ(td, &changed);
-#if (AQBANKING_VERSION_INT >= 60400)
if (trans_type != SEPA_INTERNAL_TRANSFER && changed)
-#else
- if (changed)
-#endif
{
/* Save the templates */
save_templates(parent, gnc_acc, templates,
@@ -195,11 +171,7 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
/* Get a job and enqueue it */
ab_trans = gnc_ab_trans_dialog_get_ab_trans(td);
job = gnc_ab_trans_dialog_get_job(td);
-#ifdef AQBANKING6
if (!job || AB_AccountSpec_GetTransactionLimitsForCommand(ab_acc, AB_Transaction_GetCommand(job))==NULL)
-#else
- if (!job || AB_Job_CheckAvailability(job))
-#endif
{
if (!gnc_verify_dialog (
GTK_WINDOW (parent), FALSE, "%s",
@@ -215,13 +187,8 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
aborted = TRUE;
goto repeat;
}
-#ifdef AQBANKING6
job_list = AB_Transaction_List2_new();
AB_Transaction_List2_PushBack(job_list, job);
-#else
- job_list = AB_Job_List2_new();
- AB_Job_List2_PushBack(job_list, job);
-#endif
/* Setup a Transfer Dialog for the GnuCash transaction */
xfer_dialog = gnc_xfer_dialog(gnc_ab_trans_dialog_get_parent(td),
gnc_acc);
@@ -305,25 +272,15 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
}
/* Finally, execute the job */
-#ifdef AQBANKING6
AB_Banking_SendCommands(api, job_list, context);
-#else
- AB_Banking_ExecuteJobs(api, job_list, context);
-#endif
/* Ignore the return value of AB_Banking_ExecuteJobs(), as the job's
* status always describes better whether the job was actually
* transferred to and accepted by the bank. See also
* https://lists.gnucash.org/pipermail/gnucash-de/2008-September/006389.html
*/
-#ifdef AQBANKING6
job_status = AB_Transaction_GetStatus(job);
if (job_status != AB_Transaction_StatusAccepted
&& job_status != AB_Transaction_StatusPending)
-#else
- job_status = AB_Job_GetStatus(job);
- if (job_status != AB_Job_StatusFinished
- && job_status != AB_Job_StatusPending)
-#endif
{
successful = FALSE;
if (!gnc_verify_dialog (
@@ -364,20 +321,12 @@ repeat:
AB_ImExporterContext_free(context);
if (job_list)
{
-#ifdef AQBANKING6
AB_Transaction_List2_free(job_list);
-#else
- AB_Job_List2_free(job_list);
-#endif
job_list = NULL;
}
if (job)
{
-#ifdef AQBANKING6
AB_Transaction_free(job);
-#else
- AB_Job_free(job);
-#endif
job = NULL;
}
if (gui)
@@ -392,9 +341,5 @@ repeat:
cleanup:
if (td)
gnc_ab_trans_dialog_free(td);
-#ifndef AQBANKING6
- if (online)
- AB_Banking_OnlineFini(api);
-#endif
gnc_AB_BANKING_fini(api);
}
diff --git a/gnucash/import-export/aqb/gnc-ab-utils.c b/gnucash/import-export/aqb/gnc-ab-utils.c
index 9fd462b8a..a371c7553 100644
--- a/gnucash/import-export/aqb/gnc-ab-utils.c
+++ b/gnucash/import-export/aqb/gnc-ab-utils.c
@@ -34,13 +34,9 @@
#include <glib/gi18n.h>
#include <gwenhywfar/gwenhywfar.h>
#include <aqbanking/banking.h>
-#ifdef AQBANKING6
#include <aqbanking/types/balance.h>
-#if (AQBANKING_VERSION_INT >= 60400)
#include <aqbanking/types/refaccount.h>
#include <gnc-aqbanking-templates.h>
-#endif
-#endif
#include "window-reconcile.h"
#include "Transaction.h"
#include "dialog-ab-trans.h"
@@ -54,11 +50,7 @@
#include "import-utilities.h"
#include "qof.h"
#include "engine-helpers.h"
-#ifdef AQBANKING6
-# include <aqbanking/gui/abgui.h>
-#else
-# include <aqbanking/abgui.h>
-#endif
+#include <aqbanking/gui/abgui.h>
/* This static indicates the debugging module that this .o belongs to. */
G_GNUC_UNUSED static QofLogModule log_module = G_LOG_DOMAIN;
@@ -101,7 +93,6 @@ static inline gboolean is_leap_year (int year)
static inline time64
gnc_gwen_date_to_time64 (const GNC_GWEN_DATE* date)
{
-#if AQBANKING_VERSION_INT >= 59900
int day = GWEN_Date_GetDay (date);
int month = GWEN_Date_GetMonth (date);
int year = GWEN_Date_GetYear (date);
@@ -114,12 +105,6 @@ gnc_gwen_date_to_time64 (const GNC_GWEN_DATE* date)
while (month == 2 && day <= 30 && day > (is_leap_year (year) ? 29 : 28))
--day;
return gnc_dmy2time64_neutral (day, month, year);
-#else
- int month, day, year;
- GWEN_Time_GetBrokenDownDate (date, &day, &month, &year);
- /* GWEN_Time_GetBrokenDownDate returns localtime(3) format; month is [0..11] */
- return gnc_dmy2time64_neutral (day, month + 1, year);
-#endif
}
void
@@ -192,8 +177,6 @@ gnc_AB_BANKING_new (void)
api = AB_Banking_new ("gnucash", NULL, 0);
g_return_val_if_fail (api, NULL);
-#if AQBANKING_VERSION_INT >= 59925 \
- || (AQBANKING_VERSION_INT >= 50709 && AQBANKING_VERSION_INT < 59900)
/* These two values must be set because newest bank regulation requires
the bank servers to require it. The string itself results from our
registration with the German bank association at
@@ -202,30 +185,6 @@ gnc_AB_BANKING_new (void)
introduced in aqbanking-5.99.25 and aqbanking-5.7.9. */
AB_Banking_RuntimeConfig_SetCharValue (api, "fintsRegistrationKey", "412748A1836CDD07181CE1910");
AB_Banking_RuntimeConfig_SetCharValue (api, "fintsApplicationVersionString", PROJECT_VERSION);
-#endif
-
-#ifndef AQBANKING6
- /* Check for config migration */
- if (AB_Banking_HasConf4 (api) != 0)
- {
- if (AB_Banking_HasConf3 (api) == 0)
- {
- PINFO("gnc_AB_BANKING_new: importing aqbanking3 configuration\n");
- if (AB_Banking_ImportConf3 (api) < 0)
- {
- PINFO("gnc_AB_BANKING_new: unable to import aqbanking3 configuration\n");
- }
- }
- else if (AB_Banking_HasConf2 (api) == 0)
- {
- PINFO("gnc_AB_BANKING_new: importing aqbanking2 configuration\n");
- if (AB_Banking_ImportConf2 (api) < 0)
- {
- PINFO("gnc_AB_BANKING_new: unable to import aqbanking2 configuration\n");
- }
- }
- }
-#endif
/* Init the API */
g_return_val_if_fail (AB_Banking_Init (api) == 0, NULL);
@@ -298,7 +257,6 @@ gnc_ab_get_ab_account (const AB_BANKING *api, Account *gnc_acc)
if (account_uid > 0)
{
-#ifdef AQBANKING6
gint rv;
rv = AB_Banking_GetAccountSpecByUniqueId (api, account_uid, &ab_account);
@@ -314,25 +272,6 @@ gnc_ab_get_ab_account (const AB_BANKING *api, Account *gnc_acc)
return NULL;
}
return ab_account;
-#else
- ab_account = AB_Banking_GetAccount (api, account_uid);
-
- if (!ab_account && bankcode && *bankcode && accountid && *accountid)
- {
- PINFO("gnc_ab_get_ab_account: No AB_ACCOUNT found for UID %d, "
- "trying bank code\n", account_uid);
- ab_account = AB_Banking_GetAccountByCodeAndNumber (api, bankcode,
- accountid);
- }
- return ab_account;
-
- }
- else if (bankcode && *bankcode && accountid && *accountid)
- {
- ab_account = AB_Banking_GetAccountByCodeAndNumber (api, bankcode,
- accountid);
- return ab_account;
-#endif
}
return NULL;
@@ -405,23 +344,14 @@ join_ab_strings_cb (const gchar *str, gpointer user_data)
gchar *
gnc_ab_get_remote_name (const AB_TRANSACTION *ab_trans)
{
-#ifdef AQBANKING6
const char* ab_remote_name;
-#else
- const GWEN_STRINGLIST *ab_remote_name;
-#endif
gchar *gnc_other_name = NULL;
g_return_val_if_fail (ab_trans, NULL);
ab_remote_name = AB_Transaction_GetRemoteName (ab_trans);
if (ab_remote_name)
-#ifdef AQBANKING6
gnc_other_name = g_strdup(ab_remote_name);
-#else
- GWEN_StringList_ForEach (ab_remote_name, join_ab_strings_cb,
- &gnc_other_name);
-#endif
if (!gnc_other_name || !*gnc_other_name)
{
g_free (gnc_other_name);
@@ -434,14 +364,7 @@ gnc_ab_get_remote_name (const AB_TRANSACTION *ab_trans)
gchar *
gnc_ab_get_purpose (const AB_TRANSACTION *ab_trans, gboolean is_ofx)
{
-#ifdef AQBANKING6
-# if AQBANKING_VERSION_INT < 59929
-# error "You are using an old beta version of aqbanking > 5.99.0 but < 5.99.29, please upgrade to the latest 5.99.29 or newer."
-# endif
-#else
- const /* only const in aqbanking < 5.99 */
-#endif
- GWEN_STRINGLIST *ab_purpose;
+ GWEN_STRINGLIST *ab_purpose;
const char *ab_transactionText = NULL;
gchar *gnc_description = NULL;
@@ -457,22 +380,12 @@ gnc_ab_get_purpose (const AB_TRANSACTION *ab_trans, gboolean is_ofx)
gnc_description = g_strdup (ab_transactionText);
}
- ab_purpose =
-#ifdef AQBANKING6
- /* With aqbanking-5.99.29, the identical function as before is now available under this new name. */
- AB_Transaction_GetPurposeAsStringList
-#else
- AB_Transaction_GetPurpose
-#endif
- (ab_trans);
+ ab_purpose = AB_Transaction_GetPurposeAsStringList (ab_trans);
if (ab_purpose)
GWEN_StringList_ForEach (ab_purpose, join_ab_strings_cb,
&gnc_description);
-#ifdef AQBANKING6
- /* With aqbanking>=5.99, the return value must now be free'd */
GWEN_StringList_free (ab_purpose);
-#endif
return gnc_description;
}
@@ -487,9 +400,6 @@ static gchar *
ab_ultimate_creditor_debtor_to_gnc (const AB_TRANSACTION *ab_trans,
gboolean is_ofx)
{
-#if AQBANKING_VERSION_INT < 60200
- return NULL;
-#else
const gchar* ultimate;
if (is_ofx)
@@ -504,7 +414,6 @@ ab_ultimate_creditor_debtor_to_gnc (const AB_TRANSACTION *ab_trans,
return NULL;
return g_strdup (ultimate);
-#endif
}
gchar *
@@ -782,17 +691,10 @@ txn_transaction_cb (const AB_TRANSACTION *element, gpointer user_data)
/* NEW: The imported transaction has been imported into gnucash.
* Now also add it as a job to aqbanking */
-#ifdef AQBANKING6
AB_Transaction_SetLocalBankCode (
ab_trans, AB_AccountSpec_GetBankCode (data->ab_acc));
AB_Transaction_SetLocalAccountNumber (
ab_trans, AB_AccountSpec_GetAccountNumber (data->ab_acc));
-#else
- AB_Transaction_SetLocalBankCode (
- ab_trans, AB_Account_GetBankCode (data->ab_acc));
- AB_Transaction_SetLocalAccountNumber (
- ab_trans, AB_Account_GetAccountNumber (data->ab_acc));
-#endif
AB_Transaction_SetLocalCountry (ab_trans, "DE");
@@ -805,9 +707,6 @@ txn_transaction_cb (const AB_TRANSACTION *element, gpointer user_data)
/* trans_type = SINGLE_INTERNAL_TRANSFER;
* break; */
case AB_Transaction_TypeTransfer:
-#ifndef AQBANKING6
- case AB_Transaction_TypeEuTransfer:
-#endif
default:
trans_type = SEPA_TRANSFER;
break;
@@ -816,11 +715,7 @@ txn_transaction_cb (const AB_TRANSACTION *element, gpointer user_data)
job = gnc_ab_get_trans_job (data->ab_acc, ab_trans, trans_type);
/* Check whether we really got a job */
-#ifdef AQBANKING6
if (!job || AB_AccountSpec_GetTransactionLimitsForCommand (data->ab_acc, AB_Transaction_GetCommand (job)) == NULL)
-#else
- if (!job || AB_Job_CheckAvailability (job))
-#endif
{
/* Oops, no job, probably not supported by bank */
if (gnc_verify_dialog (
@@ -843,11 +738,7 @@ txn_transaction_cb (const AB_TRANSACTION *element, gpointer user_data)
{
gnc_gen_trans_list_add_trans_with_ref_id (data->generic_importer,
gnc_trans,
-#ifdef AQBANKING6
AB_Transaction_GetUniqueId (job));
-#else
- AB_Job_GetJobId (job));
-#endif
/* AB_Job_List2_PushBack(data->job_list, job); -> delayed until trans is successfully imported */
g_datalist_set_data (&data->tmp_job_list, gnc_AB_JOB_to_readable_string (job), job);
}
@@ -872,19 +763,11 @@ static void gnc_ab_trans_processed_cb (GNCImportTransInfo *trans_info,
if (imported)
{
-#ifdef AQBANKING6
AB_Transaction_List2_PushBack (data->job_list, job);
-#else
- AB_Job_List2_PushBack (data->job_list, job);
-#endif
}
else
{
-#ifdef AQBANKING6
AB_Transaction_free (job);
-#else
- AB_Job_free (job);
-#endif
}
g_datalist_remove_data (&data->tmp_job_list, jobname);
@@ -895,11 +778,7 @@ gnc_AB_JOB_to_readable_string (const GNC_AB_JOB *job)
{
if (job)
{
-#ifdef AQBANKING6
return gnc_AB_JOB_ID_to_string (AB_Transaction_GetUniqueId (job));
-#else
- return gnc_AB_JOB_ID_to_string (AB_Job_GetJobId (job));
-#endif
}
else
{
@@ -926,11 +805,7 @@ txn_accountinfo_cb (AB_IMEXPORTER_ACCOUNTINFO *element, gpointer user_data)
/* Ignore them */
return NULL;
-#ifdef AQBANKING6
if (!AB_ImExporterAccountInfo_GetFirstTransaction (element, AB_Transaction_TypeStatement, 0))
-#else
- if (!AB_ImExporterAccountInfo_GetFirstTransaction (element))
-#endif
/* No transaction found */
return NULL;
else
@@ -988,7 +863,6 @@ txn_accountinfo_cb (AB_IMEXPORTER_ACCOUNTINFO *element, gpointer user_data)
}
/* Iterate through all transactions */
-#ifdef AQBANKING6
{
AB_TRANSACTION_LIST *ab_trans_list = AB_ImExporterAccountInfo_GetTransactionList (element);
if (ab_trans_list)
@@ -996,10 +870,6 @@ txn_accountinfo_cb (AB_IMEXPORTER_ACCOUNTINFO *element, gpointer user_data)
txn_transaction_cb, data,
AB_Transaction_TypeStatement, 0);
}
-#else
- AB_ImExporterAccountInfo_TransactionsForEach (element, txn_transaction_cb,
- data);
-#endif
return NULL;
}
@@ -1015,9 +885,6 @@ bal_accountinfo_cb (AB_IMEXPORTER_ACCOUNTINFO *element, gpointer user_data)
time64 booked_tt = 0;
GtkWidget *dialog;
gboolean show_recn_window = FALSE;
-#ifndef AQBANKING6
- AB_ACCOUNT_STATUS *best = NULL;
-#endif
g_return_val_if_fail (element && data, NULL);
@@ -1025,40 +892,15 @@ bal_accountinfo_cb (AB_IMEXPORTER_ACCOUNTINFO *element, gpointer user_data)
/* Ignore them */
return NULL;
-#ifdef AQBANKING6
if (!AB_ImExporterAccountInfo_GetFirstBalance (element))
-#else
- if (!AB_ImExporterAccountInfo_GetFirstAccountStatus (element))
-#endif
/* No balance found */
return NULL;
else
data->awaiting |= FOUND_BALANCES;
-#ifdef AQBANKING6
/* Lookup the most recent BALANCE available */
booked_bal = AB_Balance_List_GetLatestByType (AB_ImExporterAccountInfo_GetBalanceList (element),
AB_Balance_TypeBooked);
-#else
- {
- AB_ACCOUNT_STATUS *item = NULL;
- const GWEN_TIME *best_time = NULL;
- /* Lookup the most recent ACCOUNT_STATUS available */
- item = AB_ImExporterAccountInfo_GetFirstAccountStatus (element);
- while (item)
- {
- const GWEN_TIME *item_time = AB_AccountStatus_GetTime (item);
- if (!best || GWEN_Time_Diff (best_time, item_time) < 0.0)
- {
- best = item;
- best_time = item_time;
- }
- item = AB_ImExporterAccountInfo_GetNextAccountStatus (element);
- }
-
- booked_bal = AB_AccountStatus_GetBookedBalance (best);
- }
-#endif
if (!(data->awaiting & AWAIT_BALANCES))
{
@@ -1092,11 +934,7 @@ bal_accountinfo_cb (AB_IMEXPORTER_ACCOUNTINFO *element, gpointer user_data)
/* Lookup booked balance and time */
if (booked_bal)
{
-#ifdef AQBANKING6
const GWEN_DATE *ti = AB_Balance_GetDate (booked_bal);
-#else
- const GNC_GWEN_DATE *ti = AB_Balance_GetTime (booked_bal);
-#endif
if (ti)
{
booked_tt = gnc_gwen_date_to_time64 (ti);
@@ -1126,12 +964,8 @@ bal_accountinfo_cb (AB_IMEXPORTER_ACCOUNTINFO *element, gpointer user_data)
}
/* Lookup noted balance */
-#ifdef AQBANKING6
noted_bal = AB_Balance_List_GetLatestByType (AB_ImExporterAccountInfo_GetBalanceList (element),
AB_Balance_TypeNoted);
-#else
- noted_bal = AB_AccountStatus_GetNotedBalance (best);
-#endif
if (noted_bal)
{
noted_val = AB_Balance_GetValue (noted_bal);
@@ -1235,9 +1069,7 @@ gnc_ab_import_context (AB_IMEXPORTER_CONTEXT *context,
AB_BANKING *api, GtkWidget *parent)
{
GncABImExContextImport *data = g_new (GncABImExContextImport, 1);
-#ifdef AQBANKING6
AB_IMEXPORTER_ACCOUNTINFO_LIST *ab_ail;
-#endif
g_return_val_if_fail (context, NULL);
/* Do not await and ignore at the same time */
g_return_val_if_fail (!(awaiting & AWAIT_BALANCES)
@@ -1256,18 +1088,13 @@ gnc_ab_import_context (AB_IMEXPORTER_CONTEXT *context,
data->execute_txns = execute_txns;
data->api = api;
data->parent = parent;
-#ifdef AQBANKING6
data->job_list = AB_Transaction_List2_new ();
-#else
- data->job_list = AB_Job_List2_new ();
-#endif
data->tmp_job_list = NULL;
data->generic_importer = NULL;
g_datalist_init (&data->tmp_job_list);
/* Import transactions */
-#ifdef AQBANKING6
ab_ail = AB_ImExporterContext_GetAccountInfoList (context);
if (ab_ail && AB_ImExporterAccountInfo_List_GetCount (ab_ail))
{
@@ -1286,22 +1113,6 @@ gnc_ab_import_context (AB_IMEXPORTER_CONTEXT *context,
bal_accountinfo_cb,
data);
}
-#else
- if (!(awaiting & IGNORE_TRANSACTIONS))
- AB_ImExporterContext_AccountInfoForEach (context,
- txn_accountinfo_cb,
- data);
-
- /* populate and display the matching window */
- if (data->generic_importer)
- gnc_gen_trans_list_show_all (data->generic_importer);
-
- /* Check balances */
- if (!(awaiting & IGNORE_BALANCES))
- AB_ImExporterContext_AccountInfoForEach (context,
- bal_accountinfo_cb,
- data);
-#endif
/* Check bank-messages */
{
@@ -1316,11 +1127,7 @@ gnc_ab_import_context (AB_IMEXPORTER_CONTEXT *context,
subject,
text);
-#ifdef AQBANKING6
bankmsg = AB_Message_List_Next (bankmsg);
-#else
- bankmsg = AB_ImExporterContext_GetNextMessage (context); // The iterator is incremented within aqbanking
-#endif
}
}
@@ -1365,7 +1172,6 @@ gnc_ab_get_permanent_certs (void)
return perm_certs;
}
-#if (AQBANKING_VERSION_INT >= 60400)
GList*
gnc_ab_trans_templ_list_new_from_ref_accounts (GNC_AB_ACCOUNT_SPEC *ab_acc)
{
@@ -1406,4 +1212,3 @@ gnc_ab_trans_templ_list_new_from_ref_accounts (GNC_AB_ACCOUNT_SPEC *ab_acc)
return retval;
}
-#endif
diff --git a/gnucash/import-export/aqb/gnc-ab-utils.h b/gnucash/import-export/aqb/gnc-ab-utils.h
index f4f119f7b..102a714aa 100644
--- a/gnucash/import-export/aqb/gnc-ab-utils.h
+++ b/gnucash/import-export/aqb/gnc-ab-utils.h
@@ -52,8 +52,6 @@ G_BEGIN_DECLS
* in the interval [0..99]. */
#define GWENHYWFAR_VERSION_INT (10000 * GWENHYWFAR_VERSION_MAJOR + 100 * GWENHYWFAR_VERSION_MINOR + GWENHYWFAR_VERSION_PATCHLEVEL)
-#if AQBANKING_VERSION_INT >= 59900
-# define AQBANKING6 1
# define GNC_AB_ACCOUNT_SPEC AB_ACCOUNT_SPEC
# define GNC_AB_ACCOUNT_SPEC_LIST AB_ACCOUNT_SPEC_LIST
# define GNC_AB_JOB AB_TRANSACTION
@@ -61,18 +59,6 @@ G_BEGIN_DECLS
# define GNC_AB_JOB_LIST2_ITERATOR AB_TRANSACTION_LIST2_ITERATOR
# define GNC_AB_JOB_STATUS AB_TRANSACTION_STATUS
# define GNC_GWEN_DATE GWEN_DATE
-#else
-# define GNC_AB_ACCOUNT_SPEC AB_ACCOUNT
-# define GNC_AB_ACCOUNT_SPEC_LIST AB_ACCOUNT_LIST2
-# define GNC_AB_JOB AB_JOB
-# define GNC_AB_JOB_LIST2 AB_JOB_LIST2
-# define GNC_AB_JOB_LIST2_ITERATOR AB_JOB_LIST2_ITERATOR
-# define GNC_AB_JOB_STATUS AB_JOB_STATUS
-# define GNC_GWEN_DATE GWEN_TIME
-#endif
-#if GWENHYWFAR_VERSION_INT >= 49900
-# define GWENHYWFAR5
-#endif
#define GNC_PREFS_GROUP_AQBANKING "dialogs.import.hbci"
#define GNC_PREF_FORMAT_SWIFT940 "format-swift-mt940"
@@ -290,7 +276,6 @@ GWEN_DB_NODE *gnc_ab_get_permanent_certs (void);
gchar* gnc_ab_create_online_id (const gchar *bankcode, const gchar *accountnumber);
-#if (AQBANKING_VERSION_INT >= 60400)
/**
* Obtain the list of templates based on the aqbanking account spec's target accounts.
*
@@ -299,7 +284,6 @@ gchar* gnc_ab_create_online_id (const gchar *bankcode, const gchar *accountnumbe
*/
GList*
gnc_ab_trans_templ_list_new_from_ref_accounts (GNC_AB_ACCOUNT_SPEC *ab_acc);
-#endif
G_END_DECLS
diff --git a/gnucash/import-export/aqb/gnc-file-aqb-import.c b/gnucash/import-export/aqb/gnc-file-aqb-import.c
index cda6befe3..aa3679a19 100644
--- a/gnucash/import-export/aqb/gnc-file-aqb-import.c
+++ b/gnucash/import-export/aqb/gnc-file-aqb-import.c
@@ -73,9 +73,6 @@ gnc_file_aqbanking_import(GtkWindow *parent,
AB_BANKING *api = NULL;
gboolean online = FALSE;
GncGWENGui *gui = NULL;
-#ifndef AQBANKING6
- AB_IMEXPORTER *importer;
-#endif
GWEN_DB_NODE *db_profiles = NULL;
GWEN_DB_NODE *db_profile;
AB_IMEXPORTER_CONTEXT *context = NULL;
@@ -107,14 +104,6 @@ gnc_file_aqbanking_import(GtkWindow *parent,
gnc_set_default_directory(GNC_PREFS_GROUP_AQBANKING, default_dir);
g_free(default_dir);
-#ifndef AQBANKING6
- dtaus_fd = g_open(selected_filename, O_RDONLY, 0);
- if (dtaus_fd == -1)
- {
- DEBUG("Could not open file %s", selected_filename);
- goto cleanup;
- }
-#endif
/* Get the API */
api = gnc_AB_BANKING_new();
if (!api)
@@ -122,60 +111,10 @@ gnc_file_aqbanking_import(GtkWindow *parent,
g_warning("gnc_file_aqbanking_import: Couldn't get AqBanking API");
goto cleanup;
}
-#ifndef AQBANKING6
- if (AB_Banking_OnlineInit(api) != 0)
- {
- g_warning("gnc_file_aqbanking_import: "
- "Couldn't initialize AqBanking API");
- goto cleanup;
- }
- online = TRUE;
-
- /* Get import module */
- importer = AB_Banking_GetImExporter(api, aqbanking_importername);
- if (!importer)
- {
- g_warning("Import module %s not found", aqbanking_importername);
- gnc_error_dialog(parent, "%s",
- _("Import module for DTAUS import not found."));
- goto cleanup;
- }
-
- /* Load the import profile */
- db_profiles = AB_Banking_GetImExporterProfiles(api, aqbanking_importername);
-
- /* Select profile */
- db_profile = GWEN_DB_GetFirstGroup(db_profiles);
- while (db_profile)
- {
- const gchar *name;
-
- name = GWEN_DB_GetCharValue(db_profile, "name", 0, 0);
- g_return_if_fail(name);
- if (g_ascii_strcasecmp(name, aqbanking_profilename) == 0)
- break;
- db_profile = GWEN_DB_GetNextGroup(db_profile);
- }
- if (!db_profile)
- {
- g_warning("Profile \"%s\" for importer \"%s\" not found",
- aqbanking_profilename, aqbanking_importername);
- /* For debugging: Print those available names that have been found */
- db_profile = GWEN_DB_GetFirstGroup(db_profiles);
- while (db_profile)
- {
- const char *name = GWEN_DB_GetCharValue(db_profile, "name", 0, 0);
- g_warning("Only found profile \"%s\"\n", name ? name : "(null)");
- db_profile = GWEN_DB_GetNextGroup(db_profile);
- }
- goto cleanup;
- }
-#endif
/* Create a context to store the results */
context = AB_ImExporterContext_new();
-#ifdef AQBANKING6
if (AB_Banking_ImportFromFileLoadProfile(api, aqbanking_importername,
context, aqbanking_profilename,
NULL, selected_filename) < 0)
@@ -183,36 +122,6 @@ gnc_file_aqbanking_import(GtkWindow *parent,
g_warning("gnc_file_aqbanking_import: Error on import");
goto cleanup;
}
-#else
- /* Wrap file in buffered gwen io */
- close(dtaus_fd);
- io = GWEN_SyncIo_File_new(selected_filename, GWEN_SyncIo_File_CreationMode_OpenExisting);
- g_assert(io);
- GWEN_SyncIo_AddFlags(io, GWEN_SYNCIO_FILE_FLAGS_READ);
- {
- /* We must explicitly call "Connect" on the GWEN_SYNCIO
- * object. */
- int rv = GWEN_SyncIo_Connect(io);
- if (rv < 0)
- {
- g_warning("gnc_file_aqbanking_import: Failed to open file %s: %d", selected_filename, rv);
- goto cleanup;
- }
- g_assert(GWEN_SyncIo_GetStatus(io) == GWEN_SyncIo_Status_Connected);
- }
- dtaus_fd = -1;
-
- /* Run the import */
- if (AB_ImExporter_Import(importer, context, io, db_profile))
- {
- g_warning("gnc_file_aqbanking_import: Error on import");
- goto cleanup;
- }
-
- /* Close the file */
- GWEN_SyncIo_free(io);
- io = NULL;
-#endif
/* Before importing the results, if this is a new book, let user specify
* book options, since they affect how transactions are created */
@@ -246,11 +155,8 @@ gnc_file_aqbanking_import(GtkWindow *parent,
}
/* And execute the jobs */
-#ifdef AQBANKING6
AB_Banking_SendCommands(api, job_list, execution_context);
-#else
- AB_Banking_ExecuteJobs(api, job_list, execution_context);
-#endif
+
/* Ignore the return value of AB_Banking_ExecuteJobs(), as the job's
* status always describes better whether the job was actually
* transferred to and accepted by the bank. See also
@@ -261,53 +167,31 @@ gnc_file_aqbanking_import(GtkWindow *parent,
* to give the appropriate feedback if any of the jobs didn't
* work. */
-#ifdef AQBANKING6
jit = AB_Transaction_List2_First(job_list);
-#else
- jit = AB_Job_List2_First(job_list);
-#endif
if (jit)
{
-#ifdef AQBANKING6
job = AB_Transaction_List2Iterator_Data(jit);
-#else
- job = AB_Job_List2Iterator_Data(jit);
-#endif
+
while (job)
{
num_jobs += 1;
-#ifdef AQBANKING6
job_status = AB_Transaction_GetStatus(job);
if (job_status != AB_Transaction_StatusAccepted &&
job_status != AB_Transaction_StatusPending)
-#else
- job_status = AB_Job_GetStatus(job);
- if (job_status != AB_Job_StatusFinished &&
- job_status != AB_Job_StatusPending)
-#endif
{
successful = FALSE;
num_jobs_failed += 1;
if (num_jobs_failed <= max_failures)
{
-#ifdef AQBANKING6
gchar *fmt_str =_("Job %d status %d - %s\n");
-#else
- gchar *fmt_str =_("Job %d status %d - %s: %s\n");
-#endif
if (num_jobs_failed == 1)
{
errstr = g_string_new("Failed jobs:\n");
}
g_string_append_printf(errstr, fmt_str, num_jobs,
job_status,
-#ifdef AQBANKING6
AB_Transaction_Status_toString(job_status));
-#else
- AB_Job_Status2Char(job_status),
- AB_Job_GetResultText(job));
-#endif
}
else
{
@@ -318,17 +202,9 @@ gnc_file_aqbanking_import(GtkWindow *parent,
}
}
}
-#ifdef AQBANKING6
job = AB_Transaction_List2Iterator_Next(jit);
-#else
- job = AB_Job_List2Iterator_Next(jit);
-#endif
} /* while */
-#ifdef AQBANKING6
AB_Transaction_List2Iterator_free(jit);
-#else
- AB_Job_List2Iterator_free(jit);
-#endif
}
if (!successful)
@@ -364,19 +240,7 @@ gnc_file_aqbanking_import(GtkWindow *parent,
cleanup:
if (job_list)
-#ifdef AQBANKING6
AB_Transaction_List2_freeAll(job_list);
-#else
- AB_Job_List2_FreeAll(job_list);
- if (io)
- GWEN_SyncIo_free(io);
- if (db_profiles)
- GWEN_DB_Group_free(db_profiles);
- if (online)
- AB_Banking_OnlineFini(api);
- if (dtaus_fd != -1)
- close(dtaus_fd);
-#endif
if (ieci)
g_free(ieci);
if (context)
diff --git a/gnucash/import-export/aqb/gnc-gwen-gui.c b/gnucash/import-export/aqb/gnc-gwen-gui.c
index abcc1ff96..f66e1337a 100644
--- a/gnucash/import-export/aqb/gnc-gwen-gui.c
+++ b/gnucash/import-export/aqb/gnc-gwen-gui.c
@@ -110,16 +110,10 @@ static gboolean keep_alive(GncGWENGui *gui);
static void cm_close_handler(gpointer user_data);
static void erase_password(gchar *password);
static gchar *strip_html(gchar *text);
-#ifndef AQBANKING6
-static void get_input(GncGWENGui *gui, guint32 flags, const gchar *title,
- const gchar *text, gchar **input, gint min_len,
- gint max_len);
-#else
static void get_input(GncGWENGui *gui, guint32 flags, const gchar *title,
const gchar *text, const char *mimeType,
const char *pChallenge, uint32_t lChallenge,
gchar **input, gint min_len, gint max_len);
-#endif
static gint GNC_GWENHYWFAR_CB messagebox_cb(GWEN_GUI *gwen_gui, guint32 flags, const gchar *title,
const gchar *text, const gchar *b1, const gchar *b2,
const gchar *b3, guint32 guiid);
@@ -137,14 +131,6 @@ static gint GNC_GWENHYWFAR_CB progress_advance_cb(GWEN_GUI *gwen_gui, uint32_t i
static gint GNC_GWENHYWFAR_CB progress_log_cb(GWEN_GUI *gwen_gui, guint32 id,
GWEN_LOGGER_LEVEL level, const gchar *text);
static gint GNC_GWENHYWFAR_CB progress_end_cb(GWEN_GUI *gwen_gui, guint32 id);
-#ifndef AQBANKING6
-static gint GNC_GWENHYWFAR_CB getpassword_cb(GWEN_GUI *gwen_gui, guint32 flags,
- const gchar *token,
- const gchar *title,
- const gchar *text, gchar *buffer,
- gint min_len, gint max_len,
- guint32 guiid);
-#else
static gint GNC_GWENHYWFAR_CB getpassword_cb(GWEN_GUI *gwen_gui, guint32 flags,
const gchar *token,
const gchar *title,
@@ -153,7 +139,6 @@ static gint GNC_GWENHYWFAR_CB getpassword_cb(GWEN_GUI *gwen_gui, guint32 flags,
GWEN_GUI_PASSWORD_METHOD methodId,
GWEN_DB_NODE *methodParams,
guint32 guiid);
-#endif
static gint GNC_GWENHYWFAR_CB setpasswordstatus_cb(GWEN_GUI *gwen_gui, const gchar *token,
const gchar *pin,
GWEN_GUI_PASSWORD_STATUS status, guint32 guiid);
@@ -912,15 +897,10 @@ strip_html(gchar *text)
}
static void
-#ifndef AQBANKING6
-get_input(GncGWENGui *gui, guint32 flags, const gchar *title, const gchar *text,
- gchar **input, gint min_len, gint max_len)
-#else
get_input(GncGWENGui *gui, guint32 flags, const gchar *title,
const gchar *text, const char *mimeType,
const char *pChallenge, uint32_t lChallenge,
gchar **input, gint min_len, gint max_len)
-#endif
{
GtkBuilder *builder;
GtkWidget *dialog;
@@ -968,7 +948,6 @@ get_input(GncGWENGui *gui, guint32 flags, const gchar *title,
gtk_widget_set_visible(GTK_WIDGET(flickergui->spin_barwidth), FALSE);
gtk_widget_set_visible(GTK_WIDGET(flickergui->spin_delay), FALSE);
- #ifdef AQBANKING6
if (g_strcmp0(mimeType,"text/x-flickercode") == 0 && pChallenge != NULL)
{
/* Chiptan Optic (aka Flicker) */
@@ -983,7 +962,6 @@ get_input(GncGWENGui *gui, guint32 flags, const gchar *title,
/* Phototan or Chiptan QR */
gtk_widget_set_visible(GTK_WIDGET(optical_challenge), TRUE);
}
- #endif
if (is_tan)
{
gtk_widget_hide(remember_pin_checkbutton);
@@ -1022,7 +1000,6 @@ get_input(GncGWENGui *gui, guint32 flags, const gchar *title,
g_free(raw_text);
}
- #ifdef AQBANKING6
/* Optical challenge. Flickercode sets the mimetype to
* x-flickercode and doesn't set the challenge length */
if (g_strcmp0(mimeType,"text/x-flickercode") == 0 && pChallenge != NULL)
@@ -1062,7 +1039,6 @@ get_input(GncGWENGui *gui, guint32 flags, const gchar *title,
gtk_image_set_from_pixbuf(optical_challenge, pixbuf);
}
-#endif
if (*input)
{
@@ -1199,11 +1175,7 @@ inputbox_cb(GWEN_GUI *gwen_gui, guint32 flags, const gchar *title,
ENTER("gui=%p, flags=%d", gui, flags);
- #ifndef AQBANKING6
- get_input(gui, flags, title, text, &input, min_len, max_len);
- #else
get_input(gui, flags, title, text, NULL, NULL, 0, &input, min_len, max_len);
- #endif
if (input)
{
@@ -1439,31 +1411,22 @@ progress_end_cb(GWEN_GUI *gwen_gui, guint32 id)
}
static gint GNC_GWENHYWFAR_CB
-#ifndef AQBANKING6
-getpassword_cb(GWEN_GUI *gwen_gui, guint32 flags, const gchar *token,
- const gchar *title, const gchar *text, gchar *buffer,
- gint min_len, gint max_len, guint32 guiid)
-#else
getpassword_cb(GWEN_GUI *gwen_gui, guint32 flags, const gchar *token,
const gchar *title, const gchar *text, gchar *buffer,
gint min_len, gint max_len, GWEN_GUI_PASSWORD_METHOD methodId,
GWEN_DB_NODE *methodParams, guint32 guiid)
-#endif
{
GncGWENGui *gui = GETDATA_GUI(gwen_gui);
gchar *password = NULL;
gboolean is_tan = (flags & GWEN_GUI_INPUT_FLAGS_TAN) != 0;
- #ifdef AQBANKING6
int opticalMethodId;
const char *mimeType = NULL;
const char *pChallenge = NULL;
uint32_t lChallenge = 0;
- #endif
g_return_val_if_fail(gui, -1);
- #ifdef AQBANKING6
// cf. https://www.aquamaniac.de/rdm/projects/aqbanking/wiki/ImplementTanMethods
if(is_tan && methodId == GWEN_Gui_PasswordMethod_OpticalHHD)
{
@@ -1507,7 +1470,6 @@ getpassword_cb(GWEN_GUI *gwen_gui, guint32 flags, const gchar *token,
break;
}
}
- #endif
ENTER("gui=%p, flags=%d, token=%s", gui, flags, token ? token : "(null");
@@ -1536,11 +1498,7 @@ getpassword_cb(GWEN_GUI *gwen_gui, guint32 flags, const gchar *token,
}
}
- #ifndef AQBANKING6
- get_input(gui, flags, title, text, &password, min_len, max_len);
- #else
get_input(gui, flags, title, text, mimeType, pChallenge, lChallenge, &password, min_len, max_len);
- #endif
if (password)
{
commit ca0d86a3a355df60efb5dc5dd2d8ea16435c7719
Author: John Ralls <jralls at ceridwen.us>
Date: Thu Oct 20 14:56:47 2022 -0700
Update macOS CI dependencies for master branch.
diff --git a/util/ci/macos-ci-deps/macos_lib.manifest b/util/ci/macos-ci-deps/macos_lib.manifest
index c51a5ed38..4acba4961 100644
--- a/util/ci/macos-ci-deps/macos_lib.manifest
+++ b/util/ci/macos-ci-deps/macos_lib.manifest
@@ -5,6 +5,7 @@ libaqbanking.44.dylib
libaqbanking.dylib
libatk-1.0.0.dylib
libatk-1.0.dylib
+libboost_atomic.dylib
libboost_chrono.dylib
libboost_date_time.dylib
libboost_filesystem.dylib
diff --git a/util/ci/macos-ci-deps/macos_share.manifest b/util/ci/macos-ci-deps/macos_share.manifest
index 51e4d84c2..cde5ea6d8 100644
--- a/util/ci/macos-ci-deps/macos_share.manifest
+++ b/util/ci/macos-ci-deps/macos_share.manifest
@@ -4,4 +4,5 @@ gettext
gettext-0.20.2
guile
itstool
+pkgconfig
swig
Summary of changes:
.github/workflows/ci-tests.yml | 49 +--
.github/workflows/mac-tests.yaml | 2 +-
CMakeLists.txt | 6 +-
README.dependencies | 5 +-
gnucash/import-export/aqb/CMakeLists.txt | 2 +
gnucash/import-export/aqb/assistant-ab-initial.c | 86 -----
.../aqb/dialog-ab-select-imexporter.c | 245 +++++++++++++
.../aqb/dialog-ab-select-imexporter.h | 87 +++++
gnucash/import-export/aqb/dialog-ab-trans.c | 106 +-----
gnucash/import-export/aqb/dialog-ab.glade | 185 ++++++++++
gnucash/import-export/aqb/gnc-ab-getbalance.c | 48 ---
gnucash/import-export/aqb/gnc-ab-gettrans.c | 54 +--
gnucash/import-export/aqb/gnc-ab-transfer.c | 57 +--
gnucash/import-export/aqb/gnc-ab-transfer.h | 2 +-
gnucash/import-export/aqb/gnc-ab-utils.c | 253 +++-----------
gnucash/import-export/aqb/gnc-ab-utils.h | 38 +-
gnucash/import-export/aqb/gnc-file-aqb-import.c | 381 ++++-----------------
gnucash/import-export/aqb/gnc-file-aqb-import.h | 32 +-
gnucash/import-export/aqb/gnc-gwen-gui.c | 42 ---
.../import-export/aqb/gnc-plugin-aqbanking-ui.xml | 9 +-
gnucash/import-export/aqb/gnc-plugin-aqbanking.c | 83 +----
po/POTFILES.in | 1 +
util/ci/macos-ci-deps/macos_bin.manifest | 4 +-
util/ci/macos-ci-deps/macos_include.manifest | 3 +-
util/ci/macos-ci-deps/macos_lib.manifest | 76 ++--
util/ci/macos-ci-deps/macos_share.manifest | 6 +-
util/ci/macos-ci-deps/make-macos-deps-tarball.sh | 1 +
27 files changed, 747 insertions(+), 1116 deletions(-)
create mode 100644 gnucash/import-export/aqb/dialog-ab-select-imexporter.c
create mode 100644 gnucash/import-export/aqb/dialog-ab-select-imexporter.h
More information about the gnucash-changes
mailing list