[telepathy-mission-control/master] McdHandlerMap: operate on TpChannel, not McdChannel

Simon McVittie simon.mcvittie at collabora.co.uk
Tue Oct 20 06:04:35 PDT 2009


---
 src/mcd-handler-map.c |   38 ++++++++++++++++++++++----------------
 1 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/mcd-handler-map.c b/src/mcd-handler-map.c
index 5ee6e44..455b63a 100644
--- a/src/mcd-handler-map.c
+++ b/src/mcd-handler-map.c
@@ -39,7 +39,7 @@ struct _McdHandlerMapPrivate
     GHashTable *channel_processes;
     /* owned gchar *unique_name => malloc'd gsize, number of channels */
     GHashTable *handler_processes;
-    /* owned gchar *object_path => ref'd McdChannel */
+    /* owned gchar *object_path => ref'd TpChannel */
     GHashTable *handled_channels;
 };
 
@@ -258,15 +258,18 @@ _mcd_handler_map_set_path_handled (McdHandlerMap *self,
 }
 
 static void
-handled_channel_aborted_cb (McdChannel *channel,
-                            gpointer user_data)
+handled_channel_invalidated_cb (TpChannel *channel,
+                                guint domain,
+                                gint code,
+                                const gchar *message,
+                                gpointer user_data)
 {
     McdHandlerMap *self = MCD_HANDLER_MAP (user_data);
-    const gchar *path = mcd_channel_get_object_path (channel);
+    const gchar *path = tp_proxy_get_object_path (channel);
     gchar *handler;
 
     g_signal_handlers_disconnect_by_func (channel,
-                                          handled_channel_aborted_cb,
+                                          handled_channel_invalidated_cb,
                                           user_data);
 
     handler = g_hash_table_lookup (self->priv->channel_processes, path);
@@ -297,13 +300,17 @@ _mcd_handler_map_set_channel_handled (McdHandlerMap *self,
                                       const gchar *unique_name)
 {
     const gchar *path = mcd_channel_get_object_path (channel);
+    TpChannel *tp_channel;
+
+    tp_channel = mcd_channel_get_tp_channel (channel);
+    g_return_if_fail (tp_channel != NULL);
 
     g_hash_table_insert (self->priv->handled_channels,
                          g_strdup (path),
-                         g_object_ref (channel));
+                         g_object_ref (tp_channel));
 
-    g_signal_connect (channel, "abort",
-                      G_CALLBACK (handled_channel_aborted_cb),
+    g_signal_connect (tp_channel, "invalidated",
+                      G_CALLBACK (handled_channel_invalidated_cb),
                       g_object_ref (self));
 
     _mcd_handler_map_set_path_handled (self, path, unique_name);
@@ -346,18 +353,17 @@ _mcd_handler_map_set_handler_crashed (McdHandlerMap *self,
         while (paths != NULL)
         {
             gchar *path = paths->data;
-            McdChannel *channel = g_hash_table_lookup (
+            TpChannel *channel = g_hash_table_lookup (
                 self->priv->handled_channels, path);
 
-            if (channel != NULL)
+            /* this is NULL-safe */
+            if (_mcd_tp_channel_should_close (channel, "closing"))
             {
                 DEBUG ("Closing channel %s", path);
-                /* channel will get aborted when it actually closes */
-                _mcd_channel_close (channel);
-            }
-            else
-            {
-                DEBUG ("No McdChannel for %s, not aborting it", path);
+                /* the corresponding McdChannel will get aborted when the
+                 * Channel actually closes */
+                tp_cli_channel_call_close (channel, -1,
+                                           NULL, NULL, NULL, NULL);
             }
 
             paths = g_list_delete_link (paths, paths);
-- 
1.5.6.5




More information about the telepathy-commits mailing list