gnucash maint: Small refactoring of scm config loading.

Geert Janssens gjanssens at code.gnucash.org
Thu Sep 2 10:37:19 EDT 2021


Updated	 via  https://github.com/Gnucash/gnucash/commit/047673a4 (commit)
	from  https://github.com/Gnucash/gnucash/commit/881d3dcd (commit)



commit 047673a493690134eefa44b35e8b9317a2a75b12
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Sep 2 16:35:15 2021 +0200

    Small refactoring of scm config loading.
    
    - Remove and cleanup duplicate code
    - C++-ify
    - Run code in gnucash-cli commands related to reports.
      Users may want to load modified report code via
      config-user.scm which they want to access while
      executing cli commands

diff --git a/gnucash/gnucash-commands.cpp b/gnucash/gnucash-commands.cpp
index 488a93cb9..3a5edb8f3 100644
--- a/gnucash/gnucash-commands.cpp
+++ b/gnucash/gnucash-commands.cpp
@@ -30,6 +30,7 @@
 #endif
 
 #include "gnucash-commands.hpp"
+#include "gnucash-core-app.hpp"
 
 extern "C" {
 #include <gnc-engine-guile.h>
@@ -173,8 +174,7 @@ scm_run_report (void *data,
     scm_c_use_module ("gnucash reports");
 
     gnc_report_init ();
-    // load_system_config();
-    // load_user_config();
+    Gnucash::gnc_load_scm_config();
     gnc_prefs_init ();
     qof_event_suspend ();
 
@@ -303,6 +303,7 @@ scm_report_show (void *data,
     scm_c_use_module ("gnucash app-utils");
     scm_c_use_module ("gnucash reports");
     gnc_report_init ();
+    Gnucash::gnc_load_scm_config();
 
     if (!args->file_to_load.empty())
     {
@@ -334,6 +335,7 @@ scm_report_list ([[maybe_unused]] void *data,
     scm_c_use_module ("gnucash app-utils");
     scm_c_use_module ("gnucash reports");
     gnc_report_init ();
+    Gnucash::gnc_load_scm_config();
 
     scm_call_1 (scm_c_eval_string ("gnc:cmdline-report-list"),
                 scm_current_output_port ());
diff --git a/gnucash/gnucash-commands.hpp b/gnucash/gnucash-commands.hpp
index 01511d584..ae3607147 100644
--- a/gnucash/gnucash-commands.hpp
+++ b/gnucash/gnucash-commands.hpp
@@ -40,5 +40,9 @@ namespace Gnucash {
     int report_list (void);
     int report_show (const bo_str& file_to_load,
                      const bo_str& run_report);
+
+    // A helper function to load scm config files (SYSCONFIGDIR/config
+    // and USERCONFIGDIR/config-user.scm) on demand
+    void gnc_load_scm_config(void);
 }
 #endif
diff --git a/gnucash/gnucash-core-app.cpp b/gnucash/gnucash-core-app.cpp
index 8207d85bf..4ecde0f7c 100644
--- a/gnucash/gnucash-core-app.cpp
+++ b/gnucash/gnucash-core-app.cpp
@@ -86,25 +86,6 @@ gnc_print_unstable_message(void)
               << bl::format (bl::translate ("To find the last stable version, please refer to {1}")) % PACKAGE_URL << "\n";
 }
 
-static gboolean
-try_load_config_array(const gchar *fns[])
-{
-    gchar *filename;
-    int i;
-
-    for (i = 0; fns[i]; i++)
-    {
-        filename = gnc_build_userdata_path(fns[i]);
-        if (gfec_try_load(filename))
-        {
-            g_free(filename);
-            return TRUE;
-        }
-        g_free(filename);
-    }
-    return FALSE;
-}
-
 static void
 update_message(const gchar *msg)
 {
@@ -112,52 +93,28 @@ update_message(const gchar *msg)
     g_message("%s", msg);
 }
 
-static void
-load_system_config(void)
-{
-    static int is_system_config_loaded = FALSE;
-    gchar *system_config_dir;
-    gchar *system_config;
-
-    if (is_system_config_loaded) return;
-
-    update_message("loading system configuration");
-    system_config_dir = gnc_path_get_pkgsysconfdir();
-    system_config = g_build_filename(system_config_dir, "config", nullptr);
-    is_system_config_loaded = gfec_try_load(system_config);
-    g_free(system_config_dir);
-    g_free(system_config);
-}
-
-static void
-load_user_config(void)
+void
+Gnucash::gnc_load_scm_config (void)
 {
-    /* Don't continue adding to this list. When 3.0 rolls around bump
-       the 2.4 files off the list. */
-    static const gchar *saved_report_files[] =
+    static auto is_system_config_loaded = false;
+    if (!is_system_config_loaded)
     {
-        SAVED_REPORTS_FILE, SAVED_REPORTS_FILE_OLD_REV, NULL
-    };
-    static const gchar *stylesheet_files[] = { "stylesheets-2.0", NULL};
-    static int is_user_config_loaded = FALSE;
-
-    if (is_user_config_loaded)
-        return;
-    else is_user_config_loaded = TRUE;
+        update_message ("loading system scm configuration");
+        auto system_config_dir = gnc_path_get_pkgsysconfdir ();
+        auto system_config = g_build_filename (system_config_dir, "config", nullptr);
+        is_system_config_loaded = gfec_try_load (system_config);
+        g_free (system_config_dir);
+        g_free (system_config);
+    }
 
-    update_message("loading user configuration");
+    static auto is_user_config_loaded = false;
+    if (!is_user_config_loaded)
     {
-        gchar *config_filename;
-        config_filename = g_build_filename (gnc_userconfig_dir (),
-                                                "config-user.scm", (char *)NULL);
-        gfec_try_load(config_filename);
-        g_free(config_filename);
+        update_message("loading user scm configuration");
+        auto config_filename = g_build_filename (gnc_userconfig_dir (), "config-user.scm", nullptr);
+        is_user_config_loaded = gfec_try_load (config_filename);
+        g_free (config_filename);
     }
-
-    update_message("loading saved reports");
-    try_load_config_array(saved_report_files);
-    update_message("loading stylesheets");
-    try_load_config_array(stylesheet_files);
 }
 
 static void
diff --git a/gnucash/gnucash-core-app.hpp b/gnucash/gnucash-core-app.hpp
index ed61af1f2..9ff91af33 100644
--- a/gnucash/gnucash-core-app.hpp
+++ b/gnucash/gnucash-core-app.hpp
@@ -70,5 +70,6 @@ private:
     char *sys_locale = nullptr;
 };
 
+void gnc_load_scm_config(void);
 }
 #endif
diff --git a/gnucash/gnucash.cpp b/gnucash/gnucash.cpp
index d7a76466a..2ab37cb00 100644
--- a/gnucash/gnucash.cpp
+++ b/gnucash/gnucash.cpp
@@ -73,56 +73,6 @@ namespace bl = boost::locale;
 static QofLogModule log_module = GNC_MOD_GUI;
 static gchar *userdata_migration_msg = NULL;
 
-static void
-update_message(const gchar *msg)
-{
-    gnc_update_splash_screen(msg, GNC_SPLASH_PERCENTAGE_UNKNOWN);
-    g_message("%s", msg);
-}
-
-static void
-load_system_config(void)
-{
-    static int is_system_config_loaded = FALSE;
-    gchar *system_config_dir;
-    gchar *system_config;
-
-    if (is_system_config_loaded) return;
-
-    update_message("loading system configuration");
-    system_config_dir = gnc_path_get_pkgsysconfdir();
-    system_config = g_build_filename(system_config_dir, "config", nullptr);
-    is_system_config_loaded = gfec_try_load(system_config);
-    g_free(system_config_dir);
-    g_free(system_config);
-}
-
-static void
-load_user_config(void)
-{
-    /* Don't continue adding to this list. When 3.0 rolls around bump
-       the 2.4 files off the list. */
-    static const gchar *saved_report_files[] =
-    {
-        SAVED_REPORTS_FILE, SAVED_REPORTS_FILE_OLD_REV, NULL
-    };
-    static const gchar *stylesheet_files[] = { "stylesheets-2.0", NULL};
-    static int is_user_config_loaded = FALSE;
-
-    if (is_user_config_loaded)
-        return;
-    else is_user_config_loaded = TRUE;
-
-    update_message("loading user configuration");
-    {
-        gchar *config_filename;
-        config_filename = g_build_filename (gnc_userconfig_dir (),
-                                                "config-user.scm", (char *)NULL);
-        gfec_try_load(config_filename);
-        g_free(config_filename);
-    }
-}
-
 static void
 load_gnucash_plugins()
 {
@@ -207,11 +157,10 @@ scm_run_gnucash (void *data, [[maybe_unused]] int argc, [[maybe_unused]] char **
     load_gnucash_plugins();
     load_gnucash_modules();
 
-    /* Load the config before starting up the gui. This insures that
+    /* Load the scm config files before starting up the gui. This ensures that
      * custom reports have been read into memory before the Reports
      * menu is created. */
-    load_system_config();
-    load_user_config();
+    Gnucash::gnc_load_scm_config();
 
     /* Setting-up the report menu must come after the module
      loading but before the gui initializat*ion. */



Summary of changes:
 gnucash/gnucash-commands.cpp |  6 ++--
 gnucash/gnucash-commands.hpp |  4 +++
 gnucash/gnucash-core-app.cpp | 77 ++++++++++----------------------------------
 gnucash/gnucash-core-app.hpp |  1 +
 gnucash/gnucash.cpp          | 55 ++-----------------------------
 5 files changed, 28 insertions(+), 115 deletions(-)



More information about the gnucash-changes mailing list