[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