[telepathy-gabble/master] Break do_search into smaller pieces

Will Thompson will.thompson at collabora.co.uk
Wed Aug 26 09:21:51 PDT 2009


---
 src/search-channel.c |   65 ++++++++++++++++++++++++++++++++++---------------
 1 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/src/search-channel.c b/src/search-channel.c
index 43303f2..db4a7fd 100644
--- a/src/search-channel.c
+++ b/src/search-channel.c
@@ -555,46 +555,72 @@ search_reply_cb (GabbleConnection *conn,
 }
 
 static gboolean
-do_search (GabbleSearchChannel *chan,
-           GHashTable *terms,
-           GError **error)
+validate_terms (GabbleSearchChannel *chan,
+                GHashTable *terms,
+                GError **error)
 {
   const gchar * const *asks =
       (const gchar * const *) chan->priv->available_search_keys;
-  LmMessage *msg;
-  LmMessageNode *query;
   GHashTableIter iter;
-  gpointer key, value;
-  gboolean ret;
-
-  DEBUG ("called");
-
-  msg = lm_message_new_with_sub_type (chan->priv->server, LM_MESSAGE_TYPE_IQ,
-      LM_MESSAGE_SUB_TYPE_GET);
-  query = lm_message_node_add_child (msg->node, "query", NULL);
-  lm_message_node_set_attribute (query, "xmlns", NS_SEARCH);
+  gpointer key;
 
   g_hash_table_iter_init (&iter, terms);
 
-  while (g_hash_table_iter_next (&iter, &key, &value))
+  while (g_hash_table_iter_next (&iter, &key, NULL))
     {
       gchar *field = key;
-      gchar *xmpp_field;
 
       if (!tp_strv_contains (asks, field))
         {
           DEBUG ("%s is not in AvailableSearchKeys", field);
           g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
               "%s is not in AvailableSearchKeys", field);
-          ret = FALSE;
-          goto out;
+          return FALSE;
         }
+    }
+
+  return TRUE;
+}
+
+static void
+build_unextended_query (LmMessageNode *query,
+                        GHashTable *terms)
+{
+  GHashTableIter iter;
+  gpointer key, value;
+
+  g_hash_table_iter_init (&iter, terms);
+
+  while (g_hash_table_iter_next (&iter, &key, &value))
+    {
+      gchar *xmpp_field = g_hash_table_lookup (tp_to_xmpp, key);
 
-      xmpp_field = g_hash_table_lookup (tp_to_xmpp, field);
       g_assert (xmpp_field != NULL);
 
       lm_message_node_add_child (query, xmpp_field, value);
     }
+}
+
+static gboolean
+do_search (GabbleSearchChannel *chan,
+           GHashTable *terms,
+           GError **error)
+{
+  LmMessage *msg;
+  LmMessageNode *query;
+  gboolean ret;
+
+  DEBUG ("called");
+
+  if (!validate_terms (chan, terms, error))
+    return FALSE;
+
+  msg = lm_message_new_with_sub_type (chan->priv->server, LM_MESSAGE_TYPE_IQ,
+      LM_MESSAGE_SUB_TYPE_GET);
+  query = lm_message_node_add_child (msg->node, "query", NULL);
+  lm_message_node_set_attribute (query, "xmlns", NS_SEARCH);
+
+  build_unextended_query (query, terms);
 
   DEBUG ("Sending search");
 
@@ -611,7 +637,6 @@ do_search (GabbleSearchChannel *chan,
       ret = FALSE;
     }
 
-out:
   lm_message_unref (msg);
   return ret;
 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list