[Telepathy-commits] [telepathy-gabble/master] olpc-view: store GabbleOlpcActivity objects instead of just the handles

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Fri Sep 26 10:02:19 PDT 2008


20080610132434-7fe3f-57a3de10a639aec98fd70d242445ae656af2981c.gz
---
 src/conn-olpc.c |   25 ++++++++++---------------
 src/olpc-view.c |   38 +++++++++++++++++++++++---------------
 src/olpc-view.h |    4 +---
 3 files changed, 34 insertions(+), 33 deletions(-)

diff --git a/src/conn-olpc.c b/src/conn-olpc.c
index a47326b..5e92eb5 100644
--- a/src/conn-olpc.c
+++ b/src/conn-olpc.c
@@ -3451,7 +3451,7 @@ activity_query_result_cb (GabbleConnection *conn,
                           gpointer user_data)
 {
   LmMessageNode *view_node, *activity_node;
-  TpHandleSet *activities;
+  GHashTable *activities;
   TpHandleRepoIface *room_repo = tp_base_connection_get_handles (
       (TpBaseConnection*) conn, TP_HANDLE_TYPE_ROOM);
   GabbleOlpcView *view = GABBLE_OLPC_VIEW (_view);
@@ -3461,7 +3461,9 @@ activity_query_result_cb (GabbleConnection *conn,
   if (view_node == NULL)
     return LM_HANDLER_RESULT_REMOVE_MESSAGE;
 
-  activities = tp_handle_set_new (room_repo);
+  activities = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL,
+      g_object_unref );
+
   for (activity_node = view_node->children; activity_node != NULL;
       activity_node = activity_node->next)
     {
@@ -3491,13 +3493,10 @@ activity_query_result_cb (GabbleConnection *conn,
       if (handle == 0)
         {
           DEBUG ("Invalid jid: %s", jid);
-          tp_handle_set_destroy (activities);
+          g_hash_table_destroy (activities);
           return LM_HANDLER_RESULT_REMOVE_MESSAGE;
         }
 
-      tp_handle_set_add (activities, handle);
-      tp_handle_unref (room_repo, handle);
-
       properties_node = lm_message_node_get_child_with_namespace (activity_node,
           "properties", NS_OLPC_ACTIVITY_PROPS);
       properties = lm_message_node_extract_properties (properties_node,
@@ -3518,6 +3517,9 @@ activity_query_result_cb (GabbleConnection *conn,
           g_object_ref (activity);
         }
 
+      g_hash_table_insert (activities, GUINT_TO_POINTER (handle), activity);
+      tp_handle_unref (room_repo, handle);
+
       if (tp_strdiff (activity->id, act_id))
         {
           DEBUG ("Assigning new ID <%s> to room #%u", act_id, handle);
@@ -3544,10 +3546,10 @@ activity_query_result_cb (GabbleConnection *conn,
       g_ptr_array_free (buddies_properties, TRUE);
     }
 
-  /* TODO: remove activities when needed and unref Activity */
+  /* TODO: remove activities when needed */
   gabble_olpc_view_add_activities (view, activities);
 
-  tp_handle_set_destroy (activities);
+  g_hash_table_destroy (activities);
   return LM_HANDLER_RESULT_REMOVE_MESSAGE;
 }
 
@@ -3556,13 +3558,6 @@ activity_view_closed_cb (GabbleOlpcView *view,
                          GabbleConnection *conn)
 {
   guint id;
-  TpHandleSet *activities;
-
-  /* decrement Activity */
-  activities = gabble_olpc_view_get_activities (view);
-
-  tp_handle_set_foreach (activities,
-      decrement_contacts_activities_set_foreach, conn);
 
   g_object_get (view, "id", &id, NULL);
   g_hash_table_remove (conn->olpc_views, GUINT_TO_POINTER (id));
diff --git a/src/olpc-view.c b/src/olpc-view.c
index 185eb92..60a19e8 100644
--- a/src/olpc-view.c
+++ b/src/olpc-view.c
@@ -33,6 +33,7 @@
 #include "extensions/extensions.h"
 #include "gabble-connection.h"
 #include "gabble-signals-marshal.h"
+#include "olpc-activity.h"
 #include "namespaces.h"
 #include "util.h"
 
@@ -65,7 +66,8 @@ struct _GabbleOlpcViewPrivate
   guint id;
 
   TpHandleSet *buddies;
-  TpHandleSet *activities;
+  /* TpHandle => GabbleOlpcActivity * */
+  GHashTable *activities;
 
   /* TpHandle (owned in priv->buddies) => GHashTable * */
   GHashTable *buddy_properties;
@@ -115,9 +117,10 @@ gabble_olpc_view_dispose (GObject *object)
 
   if (priv->activities != NULL)
     {
-      tp_handle_set_destroy (priv->activities);
+      g_hash_table_destroy (priv->activities);
       priv->activities = NULL;
     }
+
   if (priv->buddy_properties != NULL)
     {
       g_hash_table_destroy (priv->buddy_properties);
@@ -224,7 +227,8 @@ gabble_olpc_view_constructor (GType type,
       TP_HANDLE_TYPE_ROOM);
 
   priv->buddies = tp_handle_set_new (contact_handles);
-  priv->activities = tp_handle_set_new (room_handles);
+  priv->activities = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL,
+      g_object_unref );
 
   return obj;
 }
@@ -331,6 +335,14 @@ olpc_view_get_buddies (GabbleSvcOLPCView *iface,
 }
 
 static void
+add_handle_to_array (TpHandle handle,
+                     GabbleOlpcActivity *activity,
+                     GArray *array)
+{
+  g_array_append_val (array, handle);
+}
+
+static void
 olpc_view_get_activities (GabbleSvcOLPCView *iface,
                           DBusGMethodInvocation *context)
 {
@@ -338,7 +350,9 @@ olpc_view_get_activities (GabbleSvcOLPCView *iface,
   GabbleOlpcViewPrivate *priv = GABBLE_OLPC_VIEW_GET_PRIVATE (self);
   GArray *activities;
 
-  activities = tp_handle_set_to_array (priv->activities);
+  activities = g_array_new (FALSE, FALSE, sizeof (TpHandle));
+  g_hash_table_foreach (priv->activities, (GHFunc) add_handle_to_array,
+      activities);
 
   gabble_svc_olpc_view_return_from_get_activities (context, activities);
 
@@ -491,14 +505,16 @@ gabble_olpc_view_get_buddy_properties (GabbleOlpcView *self,
 
 void
 gabble_olpc_view_add_activities (GabbleOlpcView *self,
-                                 TpHandleSet *activities)
+                                 GHashTable *activities)
 {
   GabbleOlpcViewPrivate *priv = GABBLE_OLPC_VIEW_GET_PRIVATE (self);
   GArray *added, *empty;
 
-  tp_handle_set_update (priv->activities, tp_handle_set_peek (activities));
+  tp_g_hash_table_update (priv->activities, activities, NULL, g_object_ref);
+
+  added = g_array_new (FALSE, FALSE, sizeof (TpHandle));
+  g_hash_table_foreach (activities, (GHFunc) add_handle_to_array, added);
 
-  added = tp_handle_set_to_array (activities);
   empty = g_array_new (FALSE, FALSE, sizeof (TpHandle));
 
   gabble_svc_olpc_view_emit_activities_changed (self, added, empty);
@@ -507,14 +523,6 @@ gabble_olpc_view_add_activities (GabbleOlpcView *self,
   g_array_free (empty, TRUE);
 }
 
-TpHandleSet *
-gabble_olpc_view_get_activities (GabbleOlpcView *self)
-{
-  GabbleOlpcViewPrivate *priv = GABBLE_OLPC_VIEW_GET_PRIVATE (self);
-
-  return priv->activities;
-}
-
 static void
 view_iface_init (gpointer g_iface,
                  gpointer iface_data)
diff --git a/src/olpc-view.h b/src/olpc-view.h
index 5b9bdbf..c1608bd 100644
--- a/src/olpc-view.h
+++ b/src/olpc-view.h
@@ -83,9 +83,7 @@ GHashTable * gabble_olpc_view_get_buddy_properties (GabbleOlpcView *self,
     TpHandle buddy);
 
 void gabble_olpc_view_add_activities (GabbleOlpcView *self,
-    TpHandleSet *activities);
-
-TpHandleSet * gabble_olpc_view_get_activities (GabbleOlpcView *self);
+    GHashTable *activities);
 
 G_END_DECLS
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list