From 4a3c6f8f8594e1ec12208dfbb6b26d0f415c0a45 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Fri, 17 Aug 2018 11:11:38 +0100 Subject: [PATCH] Change saving to .gcm and Kvp for GNC_FEATURE_REG_SORT_FILTER For the LD_GL save the filter and sort settings to the .gcm always. For the rest, keep saving the filter and sort settings to kvp only when the GNC_FEATURE_REG_SORT_FILTER is not set, if set then save only to the .gcm file. This will be set on first use in version 4.0 where a conversion will be run to only use the .gcm meta file. --- gnucash/gnome/gnc-plugin-page-register.c | 280 +++++++++++++++-------- 1 file changed, 181 insertions(+), 99 deletions(-) diff --git a/gnucash/gnome/gnc-plugin-page-register.c b/gnucash/gnome/gnc-plugin-page-register.c index 24a3953eed..bc7cda66b2 100644 --- a/gnucash/gnome/gnc-plugin-page-register.c +++ b/gnucash/gnome/gnc-plugin-page-register.c @@ -62,6 +62,7 @@ #include "gnc-date-edit.h" #include "gnc-engine.h" #include "gnc-event.h" +#include "gnc-features.h" #include "gnc-gnome-utils.h" #include "gnc-gobject-utils.h" #include "gnc-gui-query.h" @@ -1771,6 +1772,33 @@ gnc_plugin_page_register_get_tab_color (GncPluginPage *plugin_page) return g_strdup(color ? color : "Not Set"); } +static const gchar * +gnc_plugin_page_register_get_filter_gcm (Account *leader) +{ + GKeyFile *state_file = gnc_state_get_current(); + gchar *state_section; + gchar *filter_text; + gchar acct_guid[GUID_ENCODING_LENGTH + 1]; + GError *error = NULL; + const char* filter = NULL; + + // get the filter from the .gcm file + guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); + state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); + filter_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_FILTER, &error); + + if (error) + g_clear_error (&error); + else + { + filter_text = g_strdelimit (filter_text, ";", ','); + filter = g_strdup (filter_text); + g_free (filter_text); + } + g_free (state_section); + return filter; +} + static gchar * gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page) { @@ -1780,12 +1808,6 @@ gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page) Account *leader; const char* filter = NULL; - GKeyFile *state_file = gnc_state_get_current(); - gchar *state_section; - gchar *filter_text; - gchar acct_guid[GUID_ENCODING_LENGTH + 1]; - GError *error = NULL; - g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown")); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); @@ -1793,51 +1815,26 @@ gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page) ledger_type = gnc_ledger_display_type (ld); leader = gnc_ledger_display_leader (ld); - // get the filter from the .gcm file - guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); - state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); - filter_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_FILTER, &error); - - if (error) + // load from gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + filter = gnc_plugin_page_register_get_filter_gcm (leader); + else // load from kvp { if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) filter = xaccAccountGetFilter (leader); - g_clear_error (&error); - } - else - { - filter_text = g_strdelimit (filter_text, ";", ','); - filter = g_strdup (filter_text); - g_free (filter_text); } return filter ? g_strdup(filter) : g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0"); } -void -gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter ) +static void +gnc_plugin_page_register_set_filter_gcm (Account *leader, const gchar *filter, gchar *default_filter) { - GncPluginPageRegisterPrivate *priv; - GNCLedgerDisplay *ld; - Account *leader; - gchar *default_filter = g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0"); - GKeyFile *state_file = gnc_state_get_current(); gchar *state_section; gchar *filter_text; gchar acct_guid[GUID_ENCODING_LENGTH + 1]; - priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); - ld = priv->ledger; - leader = gnc_ledger_display_leader (ld); - - if (leader != NULL) - { - if (!filter || (g_strcmp0 (filter, default_filter) == 0)) - xaccAccountSetFilter (leader, NULL); - else - xaccAccountSetFilter (leader, filter); - } - // save the filter to the .gcm file also guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); @@ -1853,10 +1850,67 @@ gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *fi g_key_file_set_string (state_file, state_section, KEY_PAGE_FILTER, filter_text); g_free (filter_text); } + g_free (state_section); +} + +void +gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter ) +{ + GncPluginPageRegisterPrivate *priv; + GNCLedgerDisplayType ledger_type; + GNCLedgerDisplay *ld; + Account *leader; + gchar *default_filter = g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0"); + + priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); + ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); + leader = gnc_ledger_display_leader (ld); + + // save to gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + gnc_plugin_page_register_set_filter_gcm (leader, filter, default_filter); + else // save to kvp + { + if (leader != NULL) + { + if (!filter || (g_strcmp0 (filter, default_filter) == 0)) + xaccAccountSetFilter (leader, NULL); + else + xaccAccountSetFilter (leader, filter); + } + } g_free (default_filter); return; } +static const gchar * +gnc_plugin_page_register_get_sort_order_gcm (Account *leader) +{ + GKeyFile *state_file = gnc_state_get_current(); + gchar *state_section; + gchar *sort_text; + gchar acct_guid[GUID_ENCODING_LENGTH + 1]; + GError *error = NULL; + const char* sort_order = NULL; + + // get the sort_order from the .gcm file + guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); + state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); + sort_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_SORT, &error); + + if (error) + g_clear_error (&error); + else + { + sort_order = g_strdup (sort_text); + g_free (sort_text); + } + g_free (state_section); + return sort_order; +} + static gchar * gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page) { @@ -1866,12 +1920,6 @@ gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page) Account *leader; const char* sort_order = NULL; - GKeyFile *state_file = gnc_state_get_current(); - gchar *state_section; - gchar *sort_text; - gchar acct_guid[GUID_ENCODING_LENGTH + 1]; - GError *error = NULL; - g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown")); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); @@ -1879,48 +1927,25 @@ gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page) ledger_type = gnc_ledger_display_type (ld); leader = gnc_ledger_display_leader (ld); - // get the sort_order from the .gcm file - guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); - state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); - sort_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_SORT, &error); - - if (error) + // load from gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + sort_order = gnc_plugin_page_register_get_sort_order_gcm (leader); + else // load from kvp { if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) sort_order = xaccAccountGetSortOrder (leader); - g_clear_error (&error); - } - else - { - sort_order = g_strdup (sort_text); - g_free (sort_text); } return g_strdup(sort_order ? sort_order : DEFAULT_SORT_ORDER); } -void -gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order ) +static void +gnc_plugin_page_register_set_sort_order_gcm (Account *leader, const gchar *sort_order ) { - GncPluginPageRegisterPrivate *priv; - GNCLedgerDisplay *ld; - Account *leader; - GKeyFile *state_file = gnc_state_get_current(); gchar *state_section; gchar acct_guid[GUID_ENCODING_LENGTH + 1]; - priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); - ld = priv->ledger; - leader = gnc_ledger_display_leader (ld); - - if (leader != NULL) - { - if (!sort_order || (g_strcmp0 (sort_order, DEFAULT_SORT_ORDER) == 0)) - xaccAccountSetSortOrder (leader, NULL); - else - xaccAccountSetSortOrder (leader, sort_order); - } - // save sort_order to the .gcm file also guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); @@ -1932,9 +1957,59 @@ gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar else g_key_file_set_string (state_file, state_section, KEY_PAGE_SORT, sort_order); + g_free (state_section); +} +void +gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order ) +{ + GncPluginPageRegisterPrivate *priv; + GNCLedgerDisplayType ledger_type; + GNCLedgerDisplay *ld; + Account *leader; + + priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); + ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); + leader = gnc_ledger_display_leader (ld); + + // save to gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + gnc_plugin_page_register_set_sort_order_gcm (leader, sort_order); + else // save to kvp + { + if (leader != NULL) + { + if (!sort_order || (g_strcmp0 (sort_order, DEFAULT_SORT_ORDER) == 0)) + xaccAccountSetSortOrder (leader, NULL); + else + xaccAccountSetSortOrder (leader, sort_order); + } + } return; } +static gboolean +gnc_plugin_page_register_get_sort_reversed_gcm (Account *leader) +{ + GKeyFile *state_file = gnc_state_get_current(); + gchar *state_section; + gchar acct_guid[GUID_ENCODING_LENGTH + 1]; + GError *error = NULL; + gboolean sort_reversed = FALSE; + + // get the sort_reversed from the .gcm file + guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); + state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); + sort_reversed = g_key_file_get_boolean (state_file, state_section, KEY_PAGE_SORT_REV, &error); + + if (error) + g_clear_error (&error); + + g_free (state_section); + return sort_reversed; +} + static gboolean gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page) { @@ -1944,11 +2019,6 @@ gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page) Account *leader; gboolean sort_reversed = FALSE; - GKeyFile *state_file = gnc_state_get_current(); - gchar *state_section; - gchar acct_guid[GUID_ENCODING_LENGTH + 1]; - GError *error = NULL; - g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), FALSE); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); @@ -1956,38 +2026,25 @@ gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page) ledger_type = gnc_ledger_display_type (ld); leader = gnc_ledger_display_leader (ld); - // get the sort_reversed from the .gcm file - guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); - state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); - sort_reversed = g_key_file_get_boolean (state_file, state_section, KEY_PAGE_SORT_REV, &error); - - if (error) + // load from gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + sort_reversed = gnc_plugin_page_register_get_sort_reversed_gcm (leader); + else // load from kvp { if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) sort_reversed = xaccAccountGetSortReversed (leader); - g_clear_error (&error); } return sort_reversed; } -void -gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean reverse_order) +static void +gnc_plugin_page_register_set_sort_reversed_gcm (Account *leader, gboolean reverse_order) { - GncPluginPageRegisterPrivate *priv; - GNCLedgerDisplay *ld; - Account *leader; - GKeyFile *state_file = gnc_state_get_current(); gchar *state_section; gchar acct_guid[GUID_ENCODING_LENGTH + 1]; - priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); - ld = priv->ledger; - leader = gnc_ledger_display_leader (ld); - - if (leader != NULL) - xaccAccountSetSortReversed (leader, reverse_order); - // save reverse_order to the .gcm file also guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid); state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL); @@ -1999,6 +2056,31 @@ gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean else g_key_file_set_boolean (state_file, state_section, KEY_PAGE_SORT_REV, reverse_order); + g_free (state_section); +} + +void +gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean reverse_order) +{ + GncPluginPageRegisterPrivate *priv; + GNCLedgerDisplayType ledger_type; + GNCLedgerDisplay *ld; + Account *leader; + + priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page); + ld = priv->ledger; + ledger_type = gnc_ledger_display_type (ld); + leader = gnc_ledger_display_leader (ld); + + // save to gcm file for LD_GL or when feature is set + if (ledger_type == LD_GL || + gnc_features_check_used (gnc_get_current_book (), GNC_FEATURE_REG_SORT_FILTER)) + gnc_plugin_page_register_set_sort_reversed_gcm (leader, reverse_order); + else // save to kvp + { + if (leader != NULL) + xaccAccountSetSortReversed (leader, reverse_order); + } return; }