summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Brej <cbrej@cs.man.ac.uk>2010-08-05 00:27:40 +0100
committerCharlie Brej <cbrej@cs.man.ac.uk>2010-08-05 00:27:40 +0100
commit48823cf9c583255b6f1b68ee4cb5c8fb710274e1 (patch)
tree2bc7bc31b6dbf4ecd3d5e9e84fed1d0b4457f81b
parentd34a26c006c3555b28e61b3eea94477d658d1936 (diff)
Attempt to add the query interface to the dbus frontend
-rw-r--r--src/main.c2
-rw-r--r--src/tidbit-dbus.c28
-rw-r--r--src/tidbit-dbus.h7
-rw-r--r--src/tidbit-dbus.xml7
4 files changed, 42 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 21e07b7..1ad3710 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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>