[telepathy-gabble/telepathy-gabble-0.8] vcard-manager: Iterate over hashtable instead of usin g_hash_table_find to check if vcard changed.
Andre Moreira Magalhaes (andrunko)
andrunko at andrunko.cbg.collabora.co.uk
Wed Dec 9 09:15:48 PST 2009
---
src/vcard-manager.c | 36 ++++++++++++++++++------------------
1 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/src/vcard-manager.c b/src/vcard-manager.c
index ee00ce1..9ccd633 100644
--- a/src/vcard-manager.c
+++ b/src/vcard-manager.c
@@ -1000,19 +1000,12 @@ vcard_copy (LmMessageNode *parent, LmMessageNode *src)
return new;
}
-typedef struct {
- GabbleConnection *connection;
- LmMessageNode *vcard_node;
-} CheckVCardContext;
-
static gboolean
-check_vcard_changed (gpointer k, gpointer v, gpointer user_data)
+vcard_node_changed (GabbleConnection *conn,
+ const gchar *key,
+ const gchar *value,
+ LmMessageNode *vcard_node)
{
- const gchar *key = k;
- const gchar *value = v;
- CheckVCardContext *check_vcard_ctx = user_data;
- GabbleConnection *conn = check_vcard_ctx->connection;
- LmMessageNode *vcard_node = check_vcard_ctx->vcard_node;
LmMessageNode *node;
if (conn->features & GABBLE_CONNECTION_FEATURES_GOOGLE_ROSTER &&
@@ -1043,7 +1036,9 @@ manager_patch_vcard (GabbleVCardManager *self,
LmMessage *msg;
LmMessageNode *patched_vcard;
GList *li;
- CheckVCardContext *check_vcard_ctx;
+ GHashTableIter iter;
+ gpointer key, value;
+ gboolean vcard_changed = FALSE;
/* Bail out if we don't have outstanding edits to make, or if we already
* have a set request in progress.
@@ -1051,10 +1046,17 @@ manager_patch_vcard (GabbleVCardManager *self,
if (priv->edits == NULL || priv->edit_pipeline_item != NULL)
return;
- check_vcard_ctx = g_new (CheckVCardContext, 1);
- check_vcard_ctx->connection = priv->connection;
- check_vcard_ctx->vcard_node = vcard_node;
- if (g_hash_table_find (priv->edits, check_vcard_changed, check_vcard_ctx) == NULL)
+ g_hash_table_iter_init (&iter, priv->edits);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ if (vcard_node_changed (priv->connection, key, value, vcard_node))
+ {
+ vcard_changed = TRUE;
+ break;
+ }
+ }
+
+ if (!vcard_changed)
{
DEBUG ("nothing changed, not updating vcard");
goto out;
@@ -1082,8 +1084,6 @@ manager_patch_vcard (GabbleVCardManager *self,
lm_message_unref (msg);
out:
- g_free (check_vcard_ctx);
-
/* We've applied those, forget about them */
g_hash_table_destroy (priv->edits);
priv->edits = NULL;
--
1.5.6.5
More information about the telepathy-commits
mailing list