Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Get Bayesian values, needed to change Qof function
as values are stored under FRAME,FRAME,VALUE so
changed to test for a FRAME and returns NULL.
  • Loading branch information
Bob-IT authored and jralls committed Jan 11, 2016
1 parent 837e068 commit 96edb94
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 1 deletion.
68 changes: 68 additions & 0 deletions src/gnome/dialog-bayes-editor.c
Expand Up @@ -184,6 +184,68 @@ add_to_store (gpointer user_data)
g_free (map_fullname);
}

static void
build_bayes_layer_two (const char *key, const GValue *value, gpointer data)
{
QofBook *book;
gchar *kvp_path;
gchar *probability;

struct kvp_info *kvpInfo = (struct kvp_info*)data;

// Get the book
book = gnc_get_current_book();

PINFO("build_bayes_layer_two: account '%s', token_count: '%ld'", (char*)key, (long)g_value_get_int64(value));

probability = g_strdup_printf ("%ld", g_value_get_int64 (value));

kvp_path = g_strconcat (kvpInfo->kvp_path_head, "/", key, NULL);

PINFO("build_bayes_layer_two: kvp_path is '%s'", kvp_path);

kvpInfo->map_account = gnc_account_lookup_by_full_name (gnc_book_get_root_account (book), key);

kvpInfo->kvp_path = kvp_path;
kvpInfo->probability = probability;

// Add kvp data to store
add_to_store (kvpInfo);

g_free (kvp_path);
g_free (probability);
}

static void
build_bayes (const char *key, const GValue *value, gpointer data)
{
char *kvp_path;
struct kvp_info *kvpInfo = (struct kvp_info*)data;
struct kvp_info kvpInfol2;

PINFO("build_bayes: match string '%s'", (char*)key);

if (G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value) == NULL)
{
kvp_path = g_strdup_printf (IMAP_FRAME_BAYES "/%s", key);

if (qof_instance_has_slot (QOF_INSTANCE(kvpInfo->source_account), kvp_path))
{
PINFO("build_bayes: kvp_path is '%s', key '%s'", kvp_path, key);

kvpInfol2.store = kvpInfo->store;
kvpInfol2.source_account = kvpInfo->source_account;
kvpInfol2.based_on = _("Bayesian");
kvpInfol2.match_string = key;
kvpInfol2.kvp_path_head = kvp_path;

qof_instance_foreach_slot (QOF_INSTANCE(kvpInfo->source_account), kvp_path,
build_bayes_layer_two, &kvpInfol2);
}
g_free (kvp_path);
}
}

static void
build_non_bayes (const char *key, const GValue *value, gpointer data)
{
Expand Down Expand Up @@ -246,6 +308,12 @@ get_account_info (BayesDialog *bayes_dialog)
// Save source account
kvpInfo.source_account = acc;

if (bayes_dialog->type == BAYES)
{
if (qof_instance_has_slot (QOF_INSTANCE(acc), IMAP_FRAME_BAYES))
qof_instance_foreach_slot(QOF_INSTANCE(acc), IMAP_FRAME_BAYES, build_bayes, &kvpInfo);
}

if (bayes_dialog->type == NBAYES)
{
kvp_path_head = g_strdup_printf (IMAP_FRAME "/%s", IMAP_FRAME_DESC);
Expand Down
10 changes: 9 additions & 1 deletion src/libqof/qof/qofinstance.cpp
Expand Up @@ -1280,8 +1280,16 @@ struct wrap_param
static void
wrap_gvalue_function (const char* key, KvpValue *val, gpointer data)
{
GValue *gv;
auto param = static_cast<wrap_param*>(data);
GValue *gv = gvalue_from_kvp_value(val);
if (val->get_type() != KvpValue::Type::FRAME)
gv = gvalue_from_kvp_value(val);
else
{
gv = g_slice_new0 (GValue);
g_value_init (gv, G_TYPE_STRING);
g_value_set_string (gv, nullptr);
}
param->proc(key, gv, param->user_data);
g_slice_free (GValue, gv);
}
Expand Down

0 comments on commit 96edb94

Please sign in to comment.