Skip to content

Commit

Permalink
Change saving to .gcm and Kvp for GNC_FEATURE_REG_SORT_FILTER
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Bob-IT committed Aug 19, 2018
1 parent 6ba4784 commit 4a3c6f8
Showing 1 changed file with 164 additions and 82 deletions.
246 changes: 164 additions & 82 deletions gnucash/gnome/gnc-plugin-page-register.c
Expand Up @@ -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"
Expand Down Expand Up @@ -1771,72 +1772,68 @@ gnc_plugin_page_register_get_tab_color (GncPluginPage *plugin_page)
return g_strdup(color ? color : "Not Set");
}

static gchar *
gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page)
static const gchar *
gnc_plugin_page_register_get_filter_gcm (Account *leader)
{
GncPluginPageRegisterPrivate *priv;
GNCLedgerDisplayType ledger_type;
GNCLedgerDisplay *ld;
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);
ld = priv->ledger;
ledger_type = gnc_ledger_display_type (ld);
leader = gnc_ledger_display_leader (ld);
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)
{
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");
g_free (state_section);
return filter;
}

void
gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter )
static gchar *
gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page)
{
GncPluginPageRegisterPrivate *priv;
GNCLedgerDisplayType ledger_type;
GNCLedgerDisplay *ld;
Account *leader;
gchar *default_filter = g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0");
const char* filter = NULL;

GKeyFile *state_file = gnc_state_get_current();
gchar *state_section;
gchar *filter_text;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown"));

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);

if (leader != NULL)
// 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 (!filter || (g_strcmp0 (filter, default_filter) == 0))
xaccAccountSetFilter (leader, NULL);
else
xaccAccountSetFilter (leader, filter);
if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
filter = xaccAccountGetFilter (leader);
}
return filter ? g_strdup(filter) : g_strdup_printf("%s,%s,%s,%s", DEFAULT_FILTER, "0", "0", "0");
}

static void
gnc_plugin_page_register_set_filter_gcm (Account *leader, const gchar *filter, gchar *default_filter)
{
GKeyFile *state_file = gnc_state_get_current();
gchar *state_section;
gchar *filter_text;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];

// save the filter to the .gcm file also
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
Expand All @@ -1853,73 +1850,101 @@ 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 (default_filter);
return;
g_free (state_section);
}

static gchar *
gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page)
void
gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter )
{
GncPluginPageRegisterPrivate *priv;
GNCLedgerDisplayType ledger_type;
GNCLedgerDisplay *ld;
Account *leader;
const char* sort_order = NULL;
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;

g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown"));

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);
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)
{
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);
g_free (state_section);
return sort_order;
}

void
gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order )
static gchar *
gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page)
{
GncPluginPageRegisterPrivate *priv;
GNCLedgerDisplayType ledger_type;
GNCLedgerDisplay *ld;
Account *leader;
const char* sort_order = NULL;

GKeyFile *state_file = gnc_state_get_current();
gchar *state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown"));

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);

if (leader != NULL)
// 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 (!sort_order || (g_strcmp0 (sort_order, DEFAULT_SORT_ORDER) == 0))
xaccAccountSetSortOrder (leader, NULL);
else
xaccAccountSetSortOrder (leader, sort_order);
if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
sort_order = xaccAccountGetSortOrder (leader);
}
return g_strdup(sort_order ? sort_order : DEFAULT_SORT_ORDER);
}

static void
gnc_plugin_page_register_set_sort_order_gcm (Account *leader, const gchar *sort_order )
{
GKeyFile *state_file = gnc_state_get_current();
gchar *state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];

// save sort_order to the .gcm file also
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
Expand All @@ -1932,61 +1957,93 @@ 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);

return;
g_free (state_section);
}

static gboolean
gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page)
void
gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order )
{
GncPluginPageRegisterPrivate *priv;
GNCLedgerDisplayType ledger_type;
GNCLedgerDisplay *ld;
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);
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)
{
if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
sort_reversed = xaccAccountGetSortReversed (leader);
g_clear_error (&error);
}

g_free (state_section);
return sort_reversed;
}

void
gnc_plugin_page_register_set_sort_reversed (GncPluginPage *plugin_page, gboolean reverse_order)
static gboolean
gnc_plugin_page_register_get_sort_reversed (GncPluginPage *plugin_page)
{
GncPluginPageRegisterPrivate *priv;
GNCLedgerDisplayType ledger_type;
GNCLedgerDisplay *ld;
Account *leader;
gboolean sort_reversed = FALSE;

GKeyFile *state_file = gnc_state_get_current();
gchar *state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), FALSE);

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);

if (leader != NULL)
xaccAccountSetSortReversed (leader, reverse_order);
// 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);
}
return sort_reversed;
}

static void
gnc_plugin_page_register_set_sort_reversed_gcm (Account *leader, gboolean reverse_order)
{
GKeyFile *state_file = gnc_state_get_current();
gchar *state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];

// save reverse_order to the .gcm file also
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
Expand All @@ -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;
}

Expand Down

0 comments on commit 4a3c6f8

Please sign in to comment.