summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanielle Madeley <danielle.madeley@collabora.co.uk>2010-08-11 16:44:04 +1000
committerDanielle Madeley <danielle.madeley@collabora.co.uk>2010-08-11 17:02:57 +1000
commitb6ccd9e76887bdd33b63f93b3d7655d43377fb8a (patch)
tree49b5a5465e283b6801c113315b8c3d41a483abeb
parenta78841005b87ed4e258853f67d50852dfc6efd07 (diff)
Port glib_get_user_defined_groups to TpAccount
-rw-r--r--docs/examples/glib_get_user_defined_groups/example.c327
1 files changed, 138 insertions, 189 deletions
diff --git a/docs/examples/glib_get_user_defined_groups/example.c b/docs/examples/glib_get_user_defined_groups/example.c
index 0e7907a..958092a 100644
--- a/docs/examples/glib_get_user_defined_groups/example.c
+++ b/docs/examples/glib_get_user_defined_groups/example.c
@@ -2,241 +2,190 @@
#include <glib.h>
-#include <telepathy-glib/connection-manager.h>
-#include <telepathy-glib/connection.h>
-#include <telepathy-glib/interfaces.h>
-#include <telepathy-glib/gtypes.h>
-#include <telepathy-glib/util.h>
-#include <telepathy-glib/enums.h>
-#include <telepathy-glib/debug.h>
+#include <telepathy-glib/telepathy-glib.h>
static GMainLoop *loop = NULL;
-static TpDBusDaemon *bus_daemon = NULL;
-static TpConnection *conn = NULL;
static void
handle_error (const GError *error)
{
- if (error)
- {
- g_print ("ERROR: %s\n", error->message);
- tp_cli_connection_call_disconnect (conn, -1, NULL,
- NULL, NULL, NULL);
- }
+ if (error != NULL)
+ {
+ g_print ("ERROR: %s\n", error->message);
+ g_main_loop_quit (loop);
+ }
}
+
/* begin ex.channel.contactlist.user-defined.glib */
static void
-new_channels_cb (TpConnection *conn,
- const GPtrArray *channels,
- gpointer user_data,
- GObject *weak_obj)
+new_channels_cb (TpConnection *conn,
+ const GPtrArray *channels,
+ gpointer user_data,
+ GObject *weak_obj)
{
- GError *error = NULL;
-
- /* channels has the D-Bus type a(oa{sv}), which decomposes to:
- * - a GPtrArray containing a GValueArray for each channel
- * - each GValueArray contains
- * - an object path
- * - an a{sv} map
- */
-
- int i;
- for (i = 0; i < channels->len; i++)
- {
- GValueArray *channel = g_ptr_array_index (channels, i);
- char *object_path;
- GHashTable *map;
-
- tp_value_array_unpack (channel, 2,
- &object_path,
- &map);
-
- const char *type = tp_asv_get_string (map,
- TP_IFACE_CHANNEL ".ChannelType");
- int handle_type = tp_asv_get_uint32 (map,
- TP_IFACE_CHANNEL ".TargetHandleType", NULL);
- const char *id = tp_asv_get_string (map,
- TP_IFACE_CHANNEL ".TargetID");
-
- if (!strcmp (type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST) &&
- handle_type == TP_HANDLE_TYPE_GROUP)
- {
- g_print ("Got user-defined contact group: %s\n", id);
- }
- }
+ int i;
+ GError *error = NULL;
+
+ /* @channels has the D-Bus type a(oa{sv}), which decomposes to:
+ * - a GPtrArray containing a GValueArray for each channel
+ * - each GValueArray contains
+ * - an object path
+ * - an a{sv} map
+ */
+ for (i = 0; i < channels->len; i++)
+ {
+ GValueArray *channel = g_ptr_array_index (channels, i);
+ char *object_path;
+ GHashTable *map;
+
+ const char *channel_type, *target_id;
+ int handle_type;
+
+ tp_value_array_unpack (channel, 2,
+ &object_path,
+ &map);
+
+ channel_type = tp_asv_get_string (map, TP_PROP_CHANNEL_CHANNEL_TYPE);
+ handle_type = tp_asv_get_uint32 (map, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE,
+ NULL);
+ target_id = tp_asv_get_string (map, TP_PROP_CHANNEL_TARGET_ID);
+
+ /* ensure this channel is a contact group */
+ if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST) &&
+ handle_type == TP_HANDLE_TYPE_GROUP)
+ {
+ g_print ("Got user-defined contact group: %s\n", target_id);
+ }
+ }
}
/* end ex.channel.contactlist.user-defined.glib */
+
static void
-get_channels_cb (TpProxy *proxy,
- const GValue *value,
- const GError *in_error,
- gpointer user_data,
- GObject *weak_obj)
+get_channels_cb (TpProxy *conn,
+ const GValue *value,
+ const GError *in_error,
+ gpointer user_data,
+ GObject *weak_obj)
{
- handle_error (in_error);
+ handle_error (in_error);
- g_return_if_fail (G_VALUE_HOLDS (value,
- TP_ARRAY_TYPE_CHANNEL_DETAILS_LIST));
+ g_return_if_fail (G_VALUE_HOLDS (value,
+ TP_ARRAY_TYPE_CHANNEL_DETAILS_LIST));
- GPtrArray *channels = g_value_get_boxed (value);
+ GPtrArray *channels = g_value_get_boxed (value);
- new_channels_cb (conn, channels, user_data, weak_obj);
+ new_channels_cb (TP_CONNECTION (conn), channels, user_data, weak_obj);
}
-static void
-conn_ready (TpConnection *conn,
- const GError *in_error,
- gpointer user_data)
-{
- GError *error = NULL;
-
- g_print (" > conn_ready\n");
-
- handle_error (in_error);
-
- /* check if the Requests interface is available */
- if (tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS))
- {
- /* request the current channels */
- tp_cli_dbus_properties_call_get (conn, -1,
- TP_IFACE_CONNECTION_INTERFACE_REQUESTS,
- "Channels",
- get_channels_cb,
- NULL, NULL, NULL);
-
- /* notify of all new channels */
- tp_cli_connection_interface_requests_connect_to_new_channels (
- conn, new_channels_cb,
- NULL, NULL, NULL, &error);
- handle_error (error);
- }
-}
static void
-status_changed_cb (TpConnection *conn,
- guint status,
- guint reason,
- gpointer user_data,
- GObject *weak_object)
+_conn_ready (GObject *conn,
+ GAsyncResult *res,
+ gpointer user_data)
{
- if (status == TP_CONNECTION_STATUS_DISCONNECTED)
- {
- g_print ("Disconnected\n");
- g_main_loop_quit (loop);
- }
- else if (status == TP_CONNECTION_STATUS_CONNECTED)
- {
- g_print ("Connected\n");
- }
+ GError *error = NULL;
+
+ if (!tp_proxy_prepare_finish (conn, res, &error))
+ {
+ handle_error (error);
+ }
+
+ g_print (" > conn ready\n");
+
+ /* check if the Requests interface is available */
+ if (tp_proxy_has_interface_by_id (conn,
+ TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS))
+ {
+ /* request the current channels */
+ tp_cli_dbus_properties_call_get (conn, -1,
+ TP_IFACE_CONNECTION_INTERFACE_REQUESTS,
+ "Channels",
+ get_channels_cb,
+ NULL, NULL, NULL);
+
+ /* notify of all new channels */
+ tp_cli_connection_interface_requests_connect_to_new_channels (
+ TP_CONNECTION (conn), new_channels_cb,
+ NULL, NULL, NULL, &error);
+ handle_error (error);
+ }
+ else
+ {
+ g_error ("No requests interface, antique CM?");
+ }
}
-static void
-request_connection_cb (TpConnectionManager *cm,
- const char *bus_name,
- const char *object_path,
- const GError *in_error,
- gpointer user_data,
- GObject *weak_object)
-{
- GError *error = NULL;
-
- if (in_error) g_error ("%s", in_error->message);
-
- conn = tp_connection_new (bus_daemon, bus_name, object_path, &error);
- if (error) g_error ("%s", error->message);
-
- tp_connection_call_when_ready (conn, conn_ready, NULL);
-
- tp_cli_connection_connect_to_status_changed (conn, status_changed_cb,
- NULL, NULL, NULL, &error);
- handle_error (error);
-
- /* initiate the connection */
- tp_cli_connection_call_connect (conn, -1, NULL, NULL, NULL, NULL);
-}
static void
-cm_ready (TpConnectionManager *cm,
- const GError *in_error,
- gpointer user_data,
- GObject *weak_obj)
+_account_ready (GObject *account,
+ GAsyncResult *res,
+ gpointer user_data)
{
- char *username = (char *) user_data;
-
- g_print (" > cm_ready\n");
-
- if (in_error) g_error ("%s", in_error->message);
+ TpConnection *conn;
+ GError *error = NULL;
- const TpConnectionManagerProtocol *prot = tp_connection_manager_get_protocol (cm, "jabber");
- if (!prot) g_error ("Protocol is not supported");
+ if (!tp_proxy_prepare_finish (account, res, &error))
+ {
+ handle_error (error);
+ }
- char *password = getpass ("Password: ");
+ g_print (" > account ready\n");
- /* request a new connection */
- GHashTable *parameters = tp_asv_new (
- "account", G_TYPE_STRING, username,
- "password", G_TYPE_STRING, password,
- NULL);
+ /* get the connection */
+ conn = tp_account_get_connection (TP_ACCOUNT (account));
- tp_cli_connection_manager_call_request_connection (cm, -1,
- "jabber",
- parameters,
- request_connection_cb,
- NULL, NULL, NULL);
-
- g_hash_table_destroy (parameters);
+ /* prepare the connection */
+ tp_proxy_prepare_async (conn, NULL, _conn_ready, NULL);
}
-static void
-interrupt_cb (int signal)
-{
- g_print ("Interrupt\n");
- /* disconnect */
- tp_cli_connection_call_disconnect (conn, -1, NULL, NULL, NULL, NULL);
-}
int
-main (int argc, char **argv)
+main (int argc,
+ char **argv)
{
- GError *error = NULL;
+ TpDBusDaemon *dbus;
+ TpAccount *account;
+ char *account_path;
+ GError *error = NULL;
+
+ g_type_init ();
- g_type_init ();
+ if (argc != 2)
+ {
+ g_error ("Must provide an account!");
+ }
- if (argc != 2)
- {
- g_error ("Must provide username!");
- }
- char *username = argv[1];
+ /* create a main loop */
+ loop = g_main_loop_new (NULL, FALSE);
- /* create a main loop */
- loop = g_main_loop_new (NULL, FALSE);
+ /* acquire a connection to the D-Bus daemon */
+ dbus = tp_dbus_daemon_dup (&error);
+ if (dbus == NULL)
+ {
+ handle_error (error);
+ }
- /* acquire a connection to the D-Bus daemon */
- bus_daemon = tp_dbus_daemon_dup (&error);
- if (bus_daemon == NULL)
- {
- g_error ("%s", error->message);
- }
+ /* get the complete path of the account */
+ account_path = g_strconcat (TP_ACCOUNT_OBJECT_PATH_BASE, argv[1], NULL);
- /* we want to request the gabble CM */
- TpConnectionManager *cm = tp_connection_manager_new (bus_daemon,
- "gabble", NULL, &error);
- if (error) g_error ("%s", error->message);
+ /* get the account */
+ account = tp_account_new (dbus, account_path, &error);
+ if (account == NULL)
+ {
+ handle_error (error);
+ }
- tp_connection_manager_call_when_ready (cm, cm_ready,
- username, NULL, NULL);
+ g_free (account_path);
- /* set up a signal handler */
- struct sigaction sa = { 0 };
- sa.sa_handler = interrupt_cb;
- sigaction (SIGINT, &sa, NULL);
+ /* prepare the account */
+ tp_proxy_prepare_async (account, NULL, _account_ready, NULL);
- g_main_loop_run (loop);
+ g_main_loop_run (loop);
- g_object_unref (bus_daemon);
+ g_object_unref (dbus);
+ g_object_unref (account);
- return 0;
+ return 0;
}