diff options
author | Charlie Brej <cbrej@cs.man.ac.uk> | 2010-08-05 00:27:40 +0100 |
---|---|---|
committer | Charlie Brej <cbrej@cs.man.ac.uk> | 2010-08-05 00:27:40 +0100 |
commit | 48823cf9c583255b6f1b68ee4cb5c8fb710274e1 (patch) | |
tree | 2bc7bc31b6dbf4ecd3d5e9e84fed1d0b4457f81b | |
parent | d34a26c006c3555b28e61b3eea94477d658d1936 (diff) |
Attempt to add the query interface to the dbus frontend
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/tidbit-dbus.c | 28 | ||||
-rw-r--r-- | src/tidbit-dbus.h | 7 | ||||
-rw-r--r-- | src/tidbit-dbus.xml | 7 |
4 files changed, 42 insertions, 2 deletions
@@ -32,7 +32,7 @@ void print_guid (PtrTidbitGuid guid, gpointer database) { PtrTidbitRecord record = tidbit_database_fetch_record (database, guid); - g_print("Fetch: %s\n", record->raw); + g_print("Got: %s\n", record->raw); tidbit_record_unref (record); } diff --git a/src/tidbit-dbus.c b/src/tidbit-dbus.c index 3c615c0..a043e17 100644 --- a/src/tidbit-dbus.c +++ b/src/tidbit-dbus.c @@ -93,3 +93,31 @@ gboolean tidbit_dbus_fetch (TidbitDbus *object, gchar *signature, gchar **reply_ return TRUE; } +#define DBUS_STRUCT_STRING_STRING_INT (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID)) + +gboolean tidbit_dbus_query (TidbitDbus *object, gchar *table_name, GPtrArray *elements, char ***guids, gpointer userdata) +{ + TidbitDbus *tidbit_dbus = TIDBIT_DBUS (object); + PtrTidbitQuery query = tidbit_query_new (table_name); + + GValue *dbus_value = g_new0 (GValue, 1); + g_value_init (dbus_value, DBUS_STRUCT_STRING_STRING_INT); + + for (int i=0; i < elements->len; i++){ + g_value_set_boxed (dbus_value, g_ptr_array_index (elements, i)); + char* key; + char* value; + guint32 type; + dbus_g_type_struct_get (dbus_value, 0, &key, 1, &value, 2, &type, G_MAXUINT); + tidbit_query_add_exp (query, key, value, type); + g_print("%s %s %s %d\n", table_name, key, value, type); + } + g_free (dbus_value); + PtrTidbitGuidSet guid_set = tidbit_database_query (tidbit_dbus->database, query); + *guids = g_new(char *, 3); + (*guids)[0] = g_strdup("fgdg"); + (*guids)[1] = g_strdup("fgdg"); + (*guids)[2] = NULL; + return TRUE; +} + diff --git a/src/tidbit-dbus.h b/src/tidbit-dbus.h index b7a87e8..2a63c69 100644 --- a/src/tidbit-dbus.h +++ b/src/tidbit-dbus.h @@ -50,8 +50,15 @@ struct _TidbitDbusClass { GObjectClass parent; }; +struct DbusQueryElement { + char* key; + char* value; + guint32 type; +}; + gboolean tidbit_dbus_insert (TidbitDbus *object, gchar *record, gboolean *success, gpointer userdata); gboolean tidbit_dbus_fetch (TidbitDbus *object, gchar *signature, gchar **reply_record, gpointer userdata); +gboolean tidbit_dbus_query (TidbitDbus *object, gchar *table_name, GPtrArray *elements, char ***guids, gpointer userdata); TidbitDbus *tidbit_dbus_new (void); diff --git a/src/tidbit-dbus.xml b/src/tidbit-dbus.xml index e14ba10..e8402cf 100644 --- a/src/tidbit-dbus.xml +++ b/src/tidbit-dbus.xml @@ -6,8 +6,13 @@ <arg type="b" name="success" direction="out" /> </method> <method name="Fetch"> - <arg type="s" name="signature" direction="in" /> + <arg type="s" name="guid" direction="in" /> <arg type="s" name="record" direction="out" /> </method> + <method name="Query"> + <arg type="s" name="table" direction="in" /> + <arg type="a(ssu)" name="elements" direction="in" /> + <arg type="as" name="guids" direction="out" /> + </method> </interface> </node> |