/soc/2015/nakulgulati/main: c18d42bec562: hangouts: refactor, ch...

[email protected]
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: c18d42bec562d1185d809330ef5597cb83524f9f
Author:	 Nakul Gulati
Date:	 2015-08-19 06:02 +0530
Branch:	 hangouts
URL: https://hg.pidgin.im/soc/2015/nakulgulati/main/rev/c18d42bec562

Description:

hangouts: refactor, chat-init signal

diffstat:

 libpurple/protocols/hangouts/api.c      |  195 ++++++++++++++++---------------
 libpurple/protocols/hangouts/api.h      |    7 +-
 libpurple/protocols/hangouts/hangouts.c |   28 ++++-
 libpurple/protocols/hangouts/json.c     |   18 ++
 libpurple/protocols/hangouts/json.h     |    3 +
 libpurple/protocols/hangouts/util.c     |    2 +-
 libpurple/protocols/hangouts/util.h     |    2 +-
 7 files changed, 152 insertions(+), 103 deletions(-)

diffs (truncated from 466 to 300 lines):

diff --git a/libpurple/protocols/hangouts/api.c b/libpurple/protocols/hangouts/api.c
--- a/libpurple/protocols/hangouts/api.c
+++ b/libpurple/protocols/hangouts/api.c
@@ -38,6 +38,16 @@ enum _HangoutsConversationOffTheRecordSt
   HANGOUTS_OFF_THE_RECORD = 1, HANGOUTS_ON_THE_RECORD = 2
 };
 
+enum HangoutsChatInitPathIndex
+{
+  HANGOUTS_CHAT_INIT_API_KEY = 0,
+  HANGOUTS_CHAT_INIT_EMAIL = 1,
+  HANGOUTS_CHAT_INIT_HEADER_DATE = 2,
+  HANGOUTS_CHAT_INIT_HEADER_ID = 3,
+  HANGOUTS_CHAT_INIT_HEADER_VERSION = 4,
+  HANGOUTS_CHAT_INIT_SYNC_TIMESTAMP = 5
+};
+
 struct _HangoutsApiCookies
 {
   gchar *APISID;
@@ -59,6 +69,8 @@ struct _HangoutsApiPrivate
 
   HangoutsApiCookies *cookies;
 
+  JsonNode *chat_init_dict;
+
   gchar *api_key;
   gchar *access_token;
   gchar *client_id;
@@ -66,9 +78,10 @@ struct _HangoutsApiPrivate
   gchar *header_date;
   gchar *header_version;
   gchar *header_id;
-  gchar *last_sync_timestamp;
   gchar *pvt_token;
   gchar *refresh_token;
+
+  guint sync_timestamp;
 };
 
 struct _HangoutsApiHttpInfo
@@ -78,6 +91,18 @@ struct _HangoutsApiHttpInfo
   gchar *method;
 };
 
+const gchar *chat_init_path[] =
+  {
+
+  "$.ds:7[0][2]",
+  "$.ds:34[0][2]",
+  "$.ds:2[0][4]",
+  "$.ds:2[0][6]",
+  "$.ds:4[0][7]",
+  "$.ds:21[0][1][4]"
+
+  };
+
 static void
 hangouts_api_dispose (GObject *obj)
 {
@@ -90,6 +115,8 @@ hangouts_api_dispose (GObject *obj)
 
   purple_http_cookie_jar_unref (priv->cookie_jar);
 
+  json_node_free(priv->chat_init_dict);
+
   g_free (priv->cookies);
   g_free (priv->access_token);
   g_free (priv->api_key);
@@ -98,7 +125,6 @@ hangouts_api_dispose (GObject *obj)
   g_free (priv->header_date);
   g_free (priv->header_id);
   g_free (priv->header_version);
-  g_free (priv->last_sync_timestamp);
   g_free (priv->pvt_token);
   g_free (priv->refresh_token);
 }
@@ -110,11 +136,21 @@ hangouts_api_class_init (HangoutsApiClas
   gobject_class->dispose = hangouts_api_dispose;
   g_type_class_add_private (klass, sizeof(HangoutsApiPrivate));
 
-  g_signal_new ("auth", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0,
-  NULL,
-		NULL, g_cclosure_marshal_VOID__VOID,
-		G_TYPE_NONE,
-		NULL);
+  g_signal_new ("auth",
+  		G_TYPE_FROM_CLASS(klass),
+  		G_SIGNAL_ACTION, 0,
+  		NULL, NULL,
+  		g_cclosure_marshal_VOID__VOID,
+    		G_TYPE_NONE,
+    		NULL);
+
+  g_signal_new ("get-chat-init",
+		G_TYPE_FROM_CLASS(klass),
+		G_SIGNAL_ACTION, 0,
+		NULL, NULL,
+		g_cclosure_marshal_VOID__VOID,
+  		G_TYPE_NONE,
+  		NULL);
 }
 
 static void
@@ -151,6 +187,16 @@ hangouts_api_set_refresh_token (Hangouts
   priv->refresh_token = g_strdup (refresh_token);
 }
 
+PurpleConnection *
+hangouts_api_get_connection (HangoutsApi *api)
+{
+  PurpleConnection *gc;
+
+  gc = api->priv->gc;
+
+  return gc;
+}
+
 void
 hangouts_api_parse_header (HangoutsApiCookies *cookies, GList *headers)
 {
@@ -228,7 +274,7 @@ hangouts_api_fetch_login_cookies (Hangou
   PurpleAccount *acct;
   PurpleHttpRequest *request;
   HangoutsApiPrivate *priv;
-  gchar *username, *password, *url, *request_body;
+  gchar *username, *password, *request_body;
 
   priv = api->priv;
   gc = priv->gc;
@@ -273,7 +319,6 @@ hangouts_api_get_galx_cookie_cb (PurpleH
 void
 hangouts_api_get_galx_cookie (HangoutsApi *api)
 {
-  gchar *url;
   PurpleHttpRequest *request;
   PurpleHttpCookieJar *cookieJar;
   HangoutsApiPrivate *priv;
@@ -422,25 +467,24 @@ hangouts_api_get_private_token_cb (Purpl
 				   gpointer user_data)
 {
   HangoutsApi *api;
-  gchar *raw_res;
-  gchar *start, *end, *pvt;
+  JsonNode *node;
+  const gchar *raw_response;
 
   api = user_data;
-  raw_res = purple_http_response_get_data (response, NULL);
+  raw_response = purple_http_response_get_data (response, NULL);
+  node = hangouts_json_node_new (raw_response, -1, FALSE);
 
-  purple_debug_misc ("hangouts_prpl", "res: %s", raw_res);
+  if (purple_http_response_is_successful (response))
+    {
+      api->priv->pvt_token = hangouts_json_node_get_str (node, "$[1]", NULL);
+      hangouts_api_get_chat_init (api);
+    }
+  else
+    {
+      //TODO: Handle pvt token request error
+    }
 
-  start = strchr (raw_res, ',');
-  start += 2;
-  end = strchr (start, ',');
-  end--;
-
-  api->priv->pvt_token = g_strndup (start, end - start);
-
-  purple_debug_misc ("hangouts_prpl", "pvt: %s", api->priv->pvt_token);
-
-  hangouts_api_get_chat_init (api);
-
+  json_node_free (node);
 }
 
 void
@@ -472,17 +516,40 @@ hangouts_api_get_chat_init_cb (PurpleHtt
   GHashTable *chat_init_tab;
   JsonNode *root;
   HangoutsApi *api;
+  HangoutsApiPrivate *priv;
 
   raw_res = purple_http_response_get_data (response, NULL);
   api = user_data;
+  priv = api->priv;
 
-  chat_init_tab = hangouts_util_parse (raw_res);
-  root = hangouts_util_construct_json_dictionary (chat_init_tab);
+  if (purple_http_response_is_successful (response))
+    {
+      chat_init_tab = hangouts_util_parse (raw_res);
+      root = hangouts_util_construct_json_dictionary (chat_init_tab);
 
-  hangouts_api_set_chat_init_data (api, root);
+      priv->api_key = hangouts_json_node_get_str (
+	  root, chat_init_path[HANGOUTS_CHAT_INIT_API_KEY], NULL);
+      priv->email = hangouts_json_node_get_str (
+	  root, chat_init_path[HANGOUTS_CHAT_INIT_EMAIL], NULL);
+      priv->header_date = hangouts_json_node_get_str (
+	  root, chat_init_path[HANGOUTS_CHAT_INIT_HEADER_DATE], NULL);
+      priv->header_id = hangouts_json_node_get_str (
+	  root, chat_init_path[HANGOUTS_CHAT_INIT_HEADER_ID], NULL);
+      priv->header_version = hangouts_json_node_get_str (
+	  root, chat_init_path[HANGOUTS_CHAT_INIT_HEADER_VERSION], NULL);
+      priv->sync_timestamp = hangouts_json_node_get_int (
+	  root, chat_init_path[HANGOUTS_CHAT_INIT_SYNC_TIMESTAMP], NULL);
 
-  g_hash_table_destroy (chat_init_tab);
-  json_node_free (root);
+      priv->chat_init_dict = root;
+
+      g_signal_emit_by_name (api, "get-chat-init");
+      g_hash_table_destroy(chat_init_tab);
+    }
+  else
+    {
+      //TODO: handle error chat init data
+    }
+
 }
 
 void
@@ -497,7 +564,8 @@ hangouts_api_get_chat_init (HangoutsApi 
   gc = priv->gc;
 
   url_with_param = g_strconcat (HANGOUTS_API_CHAT_INIT_URL, "?",
-				HANGOUTS_API_CHAT_INIT_PARAMS(priv->pvt_token));
+				HANGOUTS_API_CHAT_INIT_PARAMS(priv->pvt_token),
+				NULL);
   request = purple_http_request_new (url_with_param);
 
   purple_http_request_set_method (request, "GET");
@@ -509,71 +577,6 @@ hangouts_api_get_chat_init (HangoutsApi 
 
 }
 
-void
-hangouts_api_set_chat_init_data (HangoutsApi *api, JsonNode *dict)
-{
-  /*
-   * api_key -> $.ds:7[0][2]
-   * email -> $.ds:34[0][2]
-   * header_date -> $.ds:2[0][4]
-   * header_version -> $.ds:2[0][6]
-   * header_id -> $.ds:4[0][7]
-   * sync_timestamp -> $.ds:21[0][1][4]
-   */
-
-  JsonPath *path;
-  JsonArray *j_array;
-  JsonNode *node;
-  gchar *value;
-  HangoutsApiPrivate *priv;
-
-  priv = api->priv;
-  path = json_path_new ();
-
-  json_path_compile (path, "$.ds:7[0][2]", NULL);
-  node = json_path_match (path, dict);
-
-  j_array = json_node_dup_array (node);
-  value = json_array_get_string_element (j_array, 0);
-  priv->api_key = value;
-
-  json_path_compile (path, "$.ds:34[0][2]", NULL);
-  node = json_path_match (path, dict);
-
-  j_array = json_node_dup_array (node);
-  value = json_array_get_string_element (j_array, 0);
-  priv->email = value;
-
-  json_path_compile (path, "$.ds:2[0][4]", NULL);
-  node = json_path_match (path, dict);
-
-  j_array = json_node_dup_array (node);
-  value = json_array_get_string_element (j_array, 0);
-  priv->header_date = value;
-
-  json_path_compile (path, "$.ds:2[0][6]", NULL);
-  node = json_path_match (path, dict);
-
-  j_array = json_node_dup_array (node);
-  value = json_array_get_string_element (j_array, 0);
-  priv->header_version = value;
-
-  json_path_compile (path, "$.ds:4[0][7]", NULL);
-  node = json_path_match (path, dict);
-
-  j_array = json_node_dup_array (node);
-  value = json_array_get_string_element (j_array, 0);
-  priv->header_id = value;
-
-  json_path_compile (path, "$.ds:21[0][1][4]", NULL);
-  node = json_path_match (path, dict);
-
-  j_array = json_node_dup_array (node);
-  value = json_array_get_string_element (j_array, 0);
-  priv->last_sync_timestamp = value;

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.