[libsocialweb] lsw-client: Implements queries for contacts



commit bb13a0c9385263da428943e79d0d27a7c6cbe0eb
Author: Alban Crequy <alban crequy collabora co uk>
Date:   Mon Mar 28 13:25:14 2011 +0100

    lsw-client: Implements queries for contacts

 libsocialweb-client/sw-client-service.c |   95 +++++++++++++++++++++++++++++++
 libsocialweb-client/sw-client-service.h |   15 +++++
 2 files changed, 110 insertions(+), 0 deletions(-)
---
diff --git a/libsocialweb-client/sw-client-service.c b/libsocialweb-client/sw-client-service.c
index 367911d..2d9d78d 100644
--- a/libsocialweb-client/sw-client-service.c
+++ b/libsocialweb-client/sw-client-service.c
@@ -24,6 +24,7 @@
 
 #include <interfaces/sw-service-bindings.h>
 #include <interfaces/sw-status-update-bindings.h>
+#include <interfaces/sw-contacts-query-bindings.h>
 #include <interfaces/sw-query-bindings.h>
 #include <interfaces/sw-avatar-bindings.h>
 #include <interfaces/sw-banishable-bindings.h>
@@ -53,6 +54,7 @@ typedef enum
   SERVICE_IFACE,
   AVATAR_IFACE,
   QUERY_IFACE,
+  CONTACTS_QUERY_IFACE,
   STATUS_UPDATE_IFACE,
   BANISHABLE_IFACE,
   PHOTO_UPLOAD_IFACE,
@@ -72,6 +74,7 @@ static const gchar *interface_names[LAST_IFACE] = {
   "com.meego.libsocialweb.Service",
   "com.meego.libsocialweb.Avatar",
   "com.meego.libsocialweb.Query",
+  "com.meego.libsocialweb.ContactsQuery",
   "com.meego.libsocialweb.StatusUpdate",
   "com.meego.libsocialweb.Banishable",
   "com.meego.libsocialweb.PhotoUpload",
@@ -987,6 +990,98 @@ sw_client_service_query_open_view (SwClientService                      *service
     g_hash_table_unref (tmp_params);
 }
 
+static void
+_contacts_query_open_view_cb (DBusGProxy *proxy,
+                              gchar      *view_path,
+                              GError     *error,
+                              gpointer    userdata)
+{
+  SwClientContactView *contact_view = NULL;
+  SwClientServiceContactsQueryOpenViewCallback cb;
+  SwClientServiceCallClosure *closure = (SwClientServiceCallClosure *)userdata;
+
+  if (error)
+  {
+    SwClientServicePrivate *priv = GET_PRIVATE (closure->service);
+    g_warning (G_STRLOC ": Error calling OpenView on service %s: %s",
+               priv->name,
+               error->message);
+    g_error_free (error);
+  } else {
+    contact_view = _sw_client_contact_view_new_for_path (view_path);
+    g_free (view_path);
+  }
+
+  cb = (SwClientServiceContactsQueryOpenViewCallback)closure->cb;
+
+  cb (closure->service,
+      contact_view,
+      closure->userdata);
+
+  g_object_unref (closure->service);
+  g_slice_free (SwClientServiceCallClosure, closure);
+}
+
+/**
+ * SwClientServiceContactsQueryOpenViewCallback:
+ * @query:
+ * @contact_view: (allow-none):
+ * @userdata: (closure):
+ */
+
+/**
+ * sw_client_service_contacts_query_open_view:
+ * @service:
+ * @query:
+ * @params: (element-type gchar* gchar*):
+ * @cb: (scope async):
+ * @userdata: (closure):
+ */
+void
+sw_client_service_contacts_query_open_view (SwClientService        *service,
+       const gchar                     *query,
+       GHashTable                      *params,
+       SwClientServiceContactsQueryOpenViewCallback  cb,
+       gpointer                         userdata)
+{
+  SwClientServicePrivate *priv = GET_PRIVATE (service);
+  SwClientServiceCallClosure *closure;
+  GError *error = NULL;
+  GHashTable *tmp_params = NULL;
+
+  if (!_sw_client_service_setup_proxy_for_iface (service,
+                                                 priv->name,
+                                                 CONTACTS_QUERY_IFACE,
+                                                 &error))
+  {
+    g_critical (G_STRLOC ": Unable to setup proxy on Query interface: %s",
+                error->message);
+    g_clear_error (&error);
+    return;
+  }
+
+  closure = g_slice_new0 (SwClientServiceCallClosure);
+  closure->service = g_object_ref (service);
+  closure->cb = (GCallback)cb;
+  closure->userdata = userdata;
+
+  if (!params)
+  {
+    tmp_params = g_hash_table_new (g_str_hash, g_str_equal);
+    params = tmp_params;
+  }
+
+  com_meego_libsocialweb_ContactsQuery_open_view_async
+          (priv->proxies [CONTACTS_QUERY_IFACE],
+           query,
+           params,
+           _contacts_query_open_view_cb,
+           closure);
+
+  if (tmp_params)
+    g_hash_table_unref (tmp_params);
+}
+
 #define GROUP "LibSocialWebService"
 
 static void
diff --git a/libsocialweb-client/sw-client-service.h b/libsocialweb-client/sw-client-service.h
index 6a6b292..f85df2e 100644
--- a/libsocialweb-client/sw-client-service.h
+++ b/libsocialweb-client/sw-client-service.h
@@ -23,6 +23,8 @@
 #include <gio/gio.h>
 #include <libsocialweb-client/sw-item.h>
 #include <libsocialweb-client/sw-client-item-view.h>
+#include <libsocialweb-client/sw-contact.h>
+#include <libsocialweb-client/sw-client-contact-view.h>
 
 G_BEGIN_DECLS
 
@@ -155,6 +157,19 @@ sw_client_service_query_open_view (SwClientService                      *service
                                    SwClientServiceQueryOpenViewCallback  cb,
                                    gpointer                              userdata);
 
+typedef void (*SwClientServiceContactsQueryOpenViewCallback)
+        (SwClientService       *query,
+         SwClientContactView   *contact_view,
+         gpointer               userdata);
+
+void
+sw_client_service_contacts_query_open_view
+        (SwClientService                      *service,
+         const gchar                          *query,
+         GHashTable                           *params,
+         SwClientServiceContactsQueryOpenViewCallback  cb,
+         gpointer                              userdata);
+
 void
 sw_client_service_banishable_hide_item (SwClientService *service,
                                         const gchar     *uid);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]