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.
This commit is contained in:
Robert Fewell 2018-08-17 11:11:38 +01:00
parent 6ba47846c0
commit 4a3c6f8f85

View File

@ -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;
}