[empathy/next: 79/79] Update for removal of TpDBusDaemon



commit 1dfa999e9a68135feb888786ebe054b325a768ae
Author: Simon McVittie <simon mcvittie collabora co uk>
Date:   Wed Apr 2 20:38:52 2014 +0100

    Update for removal of TpDBusDaemon
    
    The ubuntu-online-accounts parts are untested, and might not even
    compile.
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=76828

 libempathy/empathy-client-factory.c                |   10 +-
 libempathy/empathy-tp-chat.c                       |    1 -
 libempathy/empathy-utils.c                         |   16 ++--
 src/empathy-auth-client.c                          |   13 ++-
 src/empathy-debug-window.c                         |  108 +++++++++++--------
 telepathy-account-widgets                          |    2 +-
 tests/empathy-tls-test.c                           |   18 ++--
 .../account-plugins/empathy-accounts-plugin.c      |   28 +++--
 .../account-plugins/empathy-accounts-plugin.h      |    1 +
 .../cc-plugins/app-plugin/empathy-app-plugin.c     |   26 +++--
 .../cc-plugins/app-plugin/empathy-app-plugin.h     |    1 +
 11 files changed, 129 insertions(+), 95 deletions(-)
---
diff --git a/libempathy/empathy-client-factory.c b/libempathy/empathy-client-factory.c
index 960039e..856c925 100644
--- a/libempathy/empathy-client-factory.c
+++ b/libempathy/empathy-client-factory.c
@@ -201,10 +201,10 @@ empathy_client_factory_init (EmpathyClientFactory *self)
 }
 
 static EmpathyClientFactory *
-empathy_client_factory_new (TpDBusDaemon *dbus)
+empathy_client_factory_new (GDBusConnection *dbus)
 {
     return g_object_new (EMPATHY_TYPE_CLIENT_FACTORY,
-        "dbus-daemon", dbus,
+        "dbus-connection", dbus,
         NULL);
 }
 
@@ -212,16 +212,16 @@ EmpathyClientFactory *
 empathy_client_factory_dup (void)
 {
   static EmpathyClientFactory *singleton = NULL;
-  TpDBusDaemon *dbus;
+  GDBusConnection *dbus;
   GError *error = NULL;
 
   if (singleton != NULL)
     return g_object_ref (singleton);
 
-  dbus = tp_dbus_daemon_dup (&error);
+  dbus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
   if (dbus == NULL)
     {
-      g_warning ("Failed to get TpDBusDaemon: %s", error->message);
+      g_warning ("Failed to get GDBusConnection: %s", error->message);
       g_error_free (error);
       return NULL;
     }
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index 8f3f491..514bbde 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -1102,7 +1102,6 @@ empathy_tp_chat_new (TpClientFactory *factory,
   return g_object_new (EMPATHY_TYPE_TP_CHAT,
       "factory", factory,
        "connection", conn,
-       "dbus-daemon", tp_proxy_get_dbus_daemon (conn),
        "bus-name", tp_proxy_get_bus_name (conn),
        "object-path", object_path,
        "channel-properties", immutable_properties,
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index e8140de..3ed1a0f 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -76,11 +76,13 @@ void
 empathy_init (void)
 {
   static gboolean initialized = FALSE;
-  TpAccountManager *am;
-  EmpathyClientFactory *factory;
+  static EmpathyClientFactory *factory;
 
   if (initialized)
-    return;
+    {
+      g_assert (factory != NULL);
+      return;
+    }
 
   g_type_init ();
 
@@ -98,11 +100,9 @@ empathy_init (void)
   initialized = TRUE;
 
   factory = empathy_client_factory_dup ();
-  am = tp_account_manager_new_with_factory (TP_CLIENT_FACTORY (factory));
-  tp_account_manager_set_default (am);
-
-  g_object_unref (factory);
-  g_object_unref (am);
+  tp_client_factory_set_default (TP_CLIENT_FACTORY (factory));
+  /* Deliberately not unreffing @factory so it won't be disposed. It exists
+   * for the lifetime of our run. */
 }
 
 xmlNodePtr
diff --git a/src/empathy-auth-client.c b/src/empathy-auth-client.c
index 2097142..5ee20db 100644
--- a/src/empathy-auth-client.c
+++ b/src/empathy-auth-client.c
@@ -280,7 +280,6 @@ main (int argc,
   EmpathyAuthFactory *factory;
   TpDebugSender *debug_sender;
   TpClientFactory *tp_factory;
-  TpDBusDaemon *dbus;
 
   context = g_option_context_new (N_(" - Empathy authentication client"));
   g_option_context_add_group (context, gtk_get_option_group (TRUE));
@@ -315,15 +314,21 @@ main (int argc,
   g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN);
 #endif
 
-  dbus = tp_dbus_daemon_dup (NULL);
-  tp_factory = tp_client_factory_new (dbus);
+  tp_factory = tp_client_factory_dup (&error);
+
+  if (tp_factory == NULL)
+    {
+      g_printerr ("empathy-auth-client: unable to connect to D-Bus: %s",
+          error->message);
+      return EXIT_FAILURE;
+    }
+
   tp_client_factory_add_account_features_varargs (tp_factory,
       TP_ACCOUNT_FEATURE_STORAGE,
       0);
 
   factory = empathy_auth_factory_new (tp_factory);
   g_object_unref (tp_factory);
-  g_object_unref (dbus);
 
   g_signal_connect (factory, "new-server-tls-handler",
       G_CALLBACK (auth_factory_new_tls_handler_cb), NULL);
diff --git a/src/empathy-debug-window.c b/src/empathy-debug-window.c
index cb6ea12..cbe1caa 100644
--- a/src/empathy-debug-window.c
+++ b/src/empathy-debug-window.c
@@ -89,8 +89,8 @@ struct _EmpathyDebugWindowPriv
   gboolean view_visible;
 
   /* Connection */
-  TpDBusDaemon *dbus;
-  TpProxySignalConnection *name_owner_changed_signal;
+  GDBusConnection *dbus;
+  guint name_owner_changed_signal;
 
   /* Whether NewDebugMessage will be fired */
   gboolean paused;
@@ -442,7 +442,7 @@ debug_window_get_messages_cb (GObject *object,
 static void
 create_proxy_to_get_messages (EmpathyDebugWindow *self,
     GtkTreeIter *iter,
-    TpDBusDaemon *dbus)
+    TpClientFactory *factory)
 {
   gchar *bus_name, *name = NULL;
   TpDebugClient *new_proxy, *stored_proxy = NULL;
@@ -474,7 +474,7 @@ create_proxy_to_get_messages (EmpathyDebugWindow *self,
   gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), iter,
       COL_UNIQUE_NAME, &bus_name, -1);
 
-  new_proxy = tp_debug_client_new (dbus, bus_name, &error);
+  new_proxy = tp_client_factory_ensure_debug_client (factory, bus_name, &error);
 
   if (new_proxy == NULL)
     {
@@ -643,17 +643,16 @@ refresh_all_buffer (EmpathyDebugWindow *self)
           else
             {
               GError *error = NULL;
-              TpDBusDaemon *dbus = tp_dbus_daemon_dup (&error);
+              TpClientFactory *factory = tp_client_factory_dup (&error);
 
               if (error != NULL)
                 {
-                  DEBUG ("Failed at duping the dbus daemon: %s", error->message);
+                  DEBUG ("Failed to get client factory: %s", error->message);
                   g_error_free (error);
                 }
 
-              create_proxy_to_get_messages (self, &iter, dbus);
-
-              g_object_unref (dbus);
+              create_proxy_to_get_messages (self, &iter, factory);
+              g_object_unref (factory);
             }
         }
 
@@ -666,7 +665,7 @@ static void
 debug_window_service_chooser_changed_cb (GtkComboBox *chooser,
     EmpathyDebugWindow *self)
 {
-  TpDBusDaemon *dbus;
+  TpClientFactory *factory;
   GError *error = NULL;
   GtkListStore *stored_active_buffer = NULL;
   gchar *name = NULL;
@@ -708,16 +707,18 @@ debug_window_service_chooser_changed_cb (GtkComboBox *chooser,
 
   update_store_filter (self, stored_active_buffer);
 
-  dbus = tp_dbus_daemon_dup (&error);
+  factory = tp_client_factory_dup (&error);
 
   if (error != NULL)
     {
-      DEBUG ("Failed at duping the dbus daemon: %s", error->message);
+      DEBUG ("Failed to get client factory: %s", error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      create_proxy_to_get_messages (self, &iter, factory);
+      g_object_unref (factory);
     }
-
-  create_proxy_to_get_messages (self, &iter, dbus);
-
-  g_object_unref (dbus);
 
 finally:
   g_free (name);
@@ -894,24 +895,31 @@ service_dup_display_name (EmpathyDebugWindow *self,
 }
 
 static void
-debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
-    const gchar *out,
-    const GError *error,
-    gpointer user_data,
-    GObject *weak_object)
+debug_window_get_name_owner_cb (GObject *source_object,
+    GAsyncResult *result,
+    gpointer user_data)
 {
   FillServiceChooserData *data = (FillServiceChooserData *) user_data;
   EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (data->self);
   GtkTreeIter iter;
+  GError *error = NULL;
+  const gchar *out;
+  GVariant *tuple;
 
   self->priv->name_owner_cb_count++;
 
-  if (error != NULL)
+  tuple = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
+      result, &error);
+
+  if (tuple == NULL)
     {
       DEBUG ("GetNameOwner failed: %s", error->message);
+      g_error_free (error);
       goto OUT;
     }
 
+  g_variant_get (tuple, "(&s)", &out);
+
   if (!debug_window_service_is_in_model (data->self, out, NULL, FALSE))
     {
       char *name;
@@ -965,21 +973,31 @@ debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
         gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->chooser), 0);
       }
 
+  g_variant_unref (tuple);
 OUT:
   fill_service_chooser_data_free (data);
 }
 
 static void
-debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
-    const gchar *arg0,
-    const gchar *arg1,
-    const gchar *arg2,
-    gpointer user_data,
-    GObject *weak_object)
+debug_window_name_owner_changed_cb (GDBusConnection *connection,
+    const gchar *sender_name,
+    const gchar *object_path,
+    const gchar *interface_name,
+    const gchar *signal_name,
+    GVariant *parameters,
+    gpointer user_data)
 {
   EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (user_data);
   ServiceType type;
   const gchar *name;
+  const gchar *arg0;
+  const gchar *arg1;
+  const gchar *arg2;
+
+  if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(sss)")))
+    return;
+
+  g_variant_get (parameters, "(&s&s&s)", &arg0, &arg1, &arg2);
 
   if (g_str_has_prefix (arg0, TP_CM_BUS_NAME_BASE))
     {
@@ -1103,8 +1121,11 @@ add_service (EmpathyDebugWindow *self,
 
   data = fill_service_chooser_data_new (self, display_name, type);
 
-  tp_cli_dbus_daemon_call_get_name_owner (self->priv->dbus, -1,
-      bus_name, debug_window_get_name_owner_cb, data, NULL, NULL);
+  g_dbus_connection_call (self->priv->dbus, "org.freedesktop.DBus",
+      "/org/freedesktop/DBus", "org.freedesktop.DBus", "GetNameOwner",
+      g_variant_new ("(s)", bus_name), G_VARIANT_TYPE ("(s)"),
+      G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+      debug_window_get_name_owner_cb, data);
 
   self->priv->services_detected ++;
 }
@@ -1160,30 +1181,23 @@ out:
 static void
 debug_window_fill_service_chooser (EmpathyDebugWindow *self)
 {
-  GError *error = NULL;
-
-  self->priv->dbus = tp_dbus_daemon_dup (&error);
-
-  if (error != NULL)
-    {
-      DEBUG ("Failed to dup dbus daemon: %s", error->message);
-      g_error_free (error);
-      return;
-    }
-
   /* Keep a count of the services detected and added */
   self->priv->services_detected = 0;
   self->priv->name_owner_cb_count = 0;
 
-  g_dbus_connection_call (tp_proxy_get_dbus_connection (self->priv->dbus),
+  g_dbus_connection_call (self->priv->dbus,
       "org.freedesktop.DBus", "/org/freedesktop/DBus",
       "org.freedesktop.DBus", "ListNames", NULL,
       G_VARIANT_TYPE ("(as)"), G_DBUS_CALL_FLAGS_NONE, 2000, NULL,
       list_names_cb, g_object_ref (self));
 
+
   self->priv->name_owner_changed_signal =
-      tp_cli_dbus_daemon_connect_to_name_owner_changed (self->priv->dbus,
-      debug_window_name_owner_changed_cb, self, NULL, NULL, NULL);
+      g_dbus_connection_signal_subscribe (self->priv->dbus,
+          "org.freedesktop.DBus", "org.freedesktop.DBus",
+          "NameOwnerChanged", "/org/freedesktop/DBus", NULL,
+          G_DBUS_SIGNAL_FLAGS_NONE, debug_window_name_owner_changed_cb,
+          self, NULL);
 }
 
 static void
@@ -2105,6 +2119,8 @@ debug_window_constructed (GObject *object)
 
   self->priv->am = tp_account_manager_dup ();
   tp_proxy_prepare_async (self->priv->am, NULL, am_prepared_cb, object);
+
+  self->priv->dbus = tp_proxy_get_dbus_connection (self->priv->am);
 }
 
 static void
@@ -2186,8 +2202,8 @@ debug_window_dispose (GObject *object)
 {
   EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (object);
 
-  if (self->priv->name_owner_changed_signal != NULL)
-    tp_proxy_signal_connection_disconnect (
+  if (self->priv->name_owner_changed_signal != 0)
+    g_dbus_connection_signal_unsubscribe (self->priv->dbus,
         self->priv->name_owner_changed_signal);
 
   /* Disable Debug on all proxies */
diff --git a/telepathy-account-widgets b/telepathy-account-widgets
index dfe8d99..8e3f1e9 160000
--- a/telepathy-account-widgets
+++ b/telepathy-account-widgets
@@ -1 +1 @@
-Subproject commit dfe8d99243fc390f55662ece0d40382baa9d70f1
+Subproject commit 8e3f1e91d8eb421e01f49d41e9b0222592bd3258
diff --git a/tests/empathy-tls-test.c b/tests/empathy-tls-test.c
index df4f93a..535b4ea 100644
--- a/tests/empathy-tls-test.c
+++ b/tests/empathy-tls-test.c
@@ -229,7 +229,7 @@ mock_tls_certificate_assert_rejected (MockTLSCertificate *self,
 #endif
 
 static MockTLSCertificate *
-mock_tls_certificate_new_and_register (TpDBusDaemon *dbus,
+mock_tls_certificate_new_and_register (GDBusConnection *dbus,
         const gchar *path,
         ...)
 {
@@ -260,7 +260,7 @@ mock_tls_certificate_new_and_register (TpDBusDaemon *dbus,
   }
   va_end (va);
 
-  tp_dbus_daemon_register_object (dbus, MOCK_TLS_CERTIFICATE_PATH, cert);
+  tp_dbus_connection_register_object (dbus, MOCK_TLS_CERTIFICATE_PATH, cert);
   return cert;
 }
 
@@ -270,7 +270,8 @@ mock_tls_certificate_new_and_register (TpDBusDaemon *dbus,
 
 typedef struct {
   GMainLoop *loop;
-  TpDBusDaemon *dbus;
+  TpClientFactory *factory;
+  GDBusConnection *dbus;
   const gchar *dbus_name;
   MockTLSCertificate *mock;
   TpTLSCertificate *cert;
@@ -286,10 +287,11 @@ setup (Test *test, gconstpointer data)
 
   test->loop = g_main_loop_new (NULL, FALSE);
 
-  test->dbus = tp_dbus_daemon_dup (&error);
+  test->dbus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
   g_assert_no_error (error);
+  test->factory = tp_client_factory_new (test->dbus);
 
-  test->dbus_name = tp_dbus_daemon_get_unique_name (test->dbus);
+  test->dbus_name = g_dbus_connection_get_unique_name (test->dbus);
 
   test->result = NULL;
   test->cert = NULL;
@@ -312,7 +314,7 @@ teardown (Test *test, gconstpointer data)
 
   if (test->mock)
     {
-      tp_dbus_daemon_unregister_object (test->dbus, test->mock);
+      tp_dbus_connection_unregister_object (test->dbus, test->mock);
       g_object_unref (test->mock);
       test->mock = NULL;
     }
@@ -328,6 +330,8 @@ teardown (Test *test, gconstpointer data)
   g_main_loop_unref (test->loop);
   test->loop = NULL;
 
+  g_clear_object (&test->factory);
+
   g_object_unref (test->dbus);
   test->dbus = NULL;
 }
@@ -383,7 +387,7 @@ ensure_certificate_proxy (Test *test)
   /* Create and prepare a certificate */
   /* We don't use tp_tls_certificate_new() as we don't pass a parent */
   test->cert = g_object_new (TP_TYPE_TLS_CERTIFICATE,
-      "dbus-daemon", test->dbus,
+      "factory", test->factory,
       "bus-name", test->dbus_name,
       "object-path", MOCK_TLS_CERTIFICATE_PATH,
       NULL);
diff --git a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c 
b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c
index 145aa83..a0ed3d6 100644
--- a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c
+++ b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c
@@ -98,33 +98,37 @@ empathy_accounts_plugin_act_headless (ApPlugin *plugin)
 }
 
 static void
+empathy_accounts_plugin_dispose (GObject *obj)
+{
+  EmpathyAccountsPlugin *self = EMPATHY_ACCOUNTS_PLUGIN (obj);
+
+  g_clear_object (&self->factory);
+
+  G_OBJECT_CLASS (empathy_accounts_plugin_parent_class)->dispose (obj);
+}
+
+static void
 empathy_accounts_plugin_class_init (
     EmpathyAccountsPluginClass *klass)
 {
   ApPluginClass *pclass = AP_PLUGIN_CLASS (klass);
+  GObjectClass *oclass = G_OBJECT_CLASS (klass);
 
   pclass->build_widget = empathy_accounts_plugin_build_widget;
   pclass->delete_account = empathy_accounts_plugin_delete_account;
   pclass->act_headless = empathy_accounts_plugin_act_headless;
+
+  oclass->dispose = empathy_accounts_plugin_dispose;
 }
 
 static void
 empathy_accounts_plugin_init (EmpathyAccountsPlugin *self)
 {
-  if (tp_account_manager_can_set_default ())
+  if (tp_client_factory_can_set_default ())
     {
-      EmpathyClientFactory *factory;
-      TpAccountManager *am;
-
-      factory = empathy_client_factory_dup ();
-      am = tp_account_manager_new_with_factory (
-          TP_SIMPLE_CLIENT_FACTORY (factory));
-      tp_account_manager_set_default (am);
-
-      g_object_unref (factory);
-      g_object_unref (am);
+      self->factory = TP_CLIENT_FACTORY (empathy_client_factory_dup ());
+      tp_client_factory_set_default (self->factory);
     }
-
 }
 
 GType
diff --git a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h 
b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h
index 8f31025..5f9f043 100644
--- a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h
+++ b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h
@@ -38,6 +38,7 @@ struct _EmpathyAccountsPlugin
 {
   /*<private>*/
   ApPlugin parent;
+  TpClientFactory *factory;
 };
 
 GType empathy_accounts_plugin_get_type (void);
diff --git a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c 
b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c
index c22c6d5..6d9fa34 100644
--- a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c
+++ b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c
@@ -52,28 +52,32 @@ empathy_app_plugin_build_widget (ApApplicationPlugin *plugin)
 }
 
 static void
+empathy_app_plugin_dispose (GObject *obj)
+{
+  EmpathyAppPlugin *self = EMPATHY_APP_PLUGIN (obj);
+
+  g_clear_object (&self->factory);
+
+  G_OBJECT_CLASS (empathy_app_plugin_parent_class)->dispose (obj);
+}
+
+static void
 empathy_app_plugin_class_init (EmpathyAppPluginClass *klass)
 {
   ApApplicationPluginClass *app_class = AP_APPLICATION_PLUGIN_CLASS (klass);
+  GObjectClass *oclass = G_OBJECT_CLASS (klass);
 
   app_class->build_widget = empathy_app_plugin_build_widget;
+  oclass->dispose = empathy_accounts_plugin_dispose;
 }
 
 static void
 empathy_app_plugin_init (EmpathyAppPlugin *self)
 {
-  if (tp_account_manager_can_set_default ())
+  if (tp_client_factory_can_set_default ())
     {
-      EmpathyClientFactory *factory;
-      TpAccountManager *am;
-
-      factory = empathy_client_factory_dup ();
-      am = tp_account_manager_new_with_factory (
-          TP_SIMPLE_CLIENT_FACTORY (factory));
-      tp_account_manager_set_default (am);
-
-      g_object_unref (factory);
-      g_object_unref (am);
+      self->factory = TP_CLIENT_FACTORY (empathy_client_factory_dup ());
+      tp_client_factory_set_default (self->factory);
     }
 }
 
diff --git a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h 
b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h
index 6796396..ec2e665 100644
--- a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h
+++ b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h
@@ -39,6 +39,7 @@ struct _EmpathyAppPlugin
 {
   /*<private>*/
   ApApplicationPlugin parent;
+  TpClientFactory *factory;
 };
 
 GType empathy_app_plugin_get_type (void);


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