diff options
author | Eion Robb <eion@robbmob.com> | 2018-03-15 01:05:29 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-15 01:05:29 +0300 |
commit | 69c30e6342c3c8b22f0be90c681cda91a47413f0 (patch) | |
tree | 5719c8e186cb90655f1d7617ffee7145fe1a96df | |
parent | 9db6c43619a5ec9e8d65cd1f20f2016c66fe53e1 (diff) | |
parent | c2422b64bd23162f5a4caf9e672e5cd1d83da859 (diff) |
Merge pull request #596 from xavery/suggested-contacts-no-config
Implement support for contact suggestions
-rw-r--r-- | skypeweb/libskypeweb.c | 3 | ||||
-rw-r--r-- | skypeweb/libskypeweb.h | 1 | ||||
-rw-r--r-- | skypeweb/skypeweb_connection.c | 6 | ||||
-rw-r--r-- | skypeweb/skypeweb_contacts.c | 83 | ||||
-rw-r--r-- | skypeweb/skypeweb_contacts.h | 2 |
5 files changed, 73 insertions, 22 deletions
diff --git a/skypeweb/libskypeweb.c b/skypeweb/libskypeweb.c index 8392073..bb43b96 100644 --- a/skypeweb/libskypeweb.c +++ b/skypeweb/libskypeweb.c @@ -730,6 +730,9 @@ PurpleConnection *pc act = purple_protocol_action_new(_("Search for friends..."), skypeweb_search_users);
m = g_list_append(m, act);
+
+ act = purple_protocol_action_new(_("People you might know..."), skypeweb_contact_suggestions);
+ m = g_list_append(m, act);
return m;
}
diff --git a/skypeweb/libskypeweb.h b/skypeweb/libskypeweb.h index a460fcb..bbc2abf 100644 --- a/skypeweb/libskypeweb.h +++ b/skypeweb/libskypeweb.h @@ -114,6 +114,7 @@ #define SKYPEWEB_GRAPH_HOST "skypegraph.skype.com" #define SKYPEWEB_STATIC_HOST "static.asm.skype.com" #define SKYPEWEB_STATIC_CDN_HOST "static-asm.secure.skypeassets.com" +#define SKYPEWEB_DEFAULT_CONTACT_SUGGESTIONS_HOST "peoplerecommendations.skype.com" #define SKYPEWEB_VDMS_TTL 300 diff --git a/skypeweb/skypeweb_connection.c b/skypeweb/skypeweb_connection.c index 097e806..e159fe0 100644 --- a/skypeweb/skypeweb_connection.c +++ b/skypeweb/skypeweb_connection.c @@ -123,6 +123,12 @@ SkypeWebConnection *skypeweb_post_or_get(SkypeWebAccount *sa, SkypeWebMethod met purple_http_request_header_set(request, "Referer", "https://web.skype.com/main"); purple_http_request_header_set(request, "Accept", "application/json; ver=1.0"); purple_http_request_header_set(request, "ClientInfo", "os=Windows; osVer=8.1; proc=Win32; lcid=en-us; deviceType=1; country=n/a; clientName=" SKYPEWEB_CLIENTINFO_NAME "; clientVer=" SKYPEWEB_CLIENTINFO_VERSION); + } else if (g_str_equal(host, SKYPEWEB_DEFAULT_CONTACT_SUGGESTIONS_HOST)) { + purple_http_request_header_set(request, "X-RecommenderServiceSettings", "{\"experiment\":\"default\",\"recommend\":\"true\"}"); + purple_http_request_header_set(request, "X-ECS-ETag", SKYPEWEB_CLIENTINFO_NAME); + purple_http_request_header_set(request, "X-Skypetoken", sa->skype_token); + purple_http_request_header_set(request, "Accept", "application/json"); + purple_http_request_header_set(request, "X-Skype-Client", SKYPEWEB_CLIENTINFO_VERSION); } else { purple_http_request_header_set(request, "Accept", "*/*"); purple_http_request_set_cookie_jar(request, sa->cookie_jar); diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c index 139b52e..21f6ef9 100644 --- a/skypeweb/skypeweb_contacts.c +++ b/skypeweb/skypeweb_contacts.c @@ -924,35 +924,26 @@ skypeweb_received_contacts(SkypeWebAccount *sa, PurpleXmlNode *contacts) purple_notify_searchresults(sa->pc, _("Received contacts"), NULL, NULL, results, NULL, NULL);
}
-void
-skypeweb_search_users_text_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
+static PurpleNotifySearchResults*
+create_search_results(JsonNode *node, gint *olength)
{
+ PurpleNotifySearchColumn *column;
+ gint index, length;
JsonObject *response = NULL;
JsonArray *resultsarray = NULL;
- gint index, length;
- gchar *search_term = user_data;
-
- PurpleNotifySearchResults *results;
- PurpleNotifySearchColumn *column;
response = json_node_get_object(node);
resultsarray = json_object_get_array_member(response, "results");
length = json_array_get_length(resultsarray);
- if (length == 0)
+ PurpleNotifySearchResults *results = purple_notify_searchresults_new();
+ if (results == NULL || length == 0)
{
- gchar *primary_text = g_strdup_printf("Your search for the user \"%s\" returned no results", search_term);
- purple_notify_warning(sa->pc, "No users found", primary_text, "", purple_request_cpar_from_connection(sa->pc));
- g_free(primary_text);
- g_free(search_term);
- return;
- }
-
- results = purple_notify_searchresults_new();
- if (results == NULL)
- {
- g_free(search_term);
- return;
+ if (olength)
+ {
+ *olength = 0;
+ }
+ return NULL;
}
/* columns: Friend ID, Name, Network */
@@ -994,9 +985,47 @@ skypeweb_search_users_text_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user purple_notify_searchresults_row_add(results, row);
}
+ if (olength)
+ {
+ *olength = length;
+ }
+ return results;
+}
+
+static void
+skypeweb_search_users_text_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
+{
+ gint length;
+ gchar *search_term = user_data;
+ PurpleNotifySearchResults *results = create_search_results(node, &length);
+
+ if (results == NULL || length == 0)
+ {
+ gchar *primary_text = g_strdup_printf("Your search for the user \"%s\" returned no results", search_term);
+ purple_notify_warning(sa->pc, _("No users found"), primary_text, "", purple_request_cpar_from_connection(sa->pc));
+ g_free(primary_text);
+ g_free(search_term);
+ return;
+ }
+
purple_notify_searchresults(sa->pc, NULL, search_term, NULL, results, NULL, NULL);
}
+static void
+skypeweb_contact_suggestions_received_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
+{
+ gint length;
+ PurpleNotifySearchResults *results = create_search_results(node, &length);
+
+ if (results == NULL || length == 0)
+ {
+ purple_notify_warning(sa->pc, _("No results"), _("There are no contact suggestions available for you"), "", purple_request_cpar_from_connection(sa->pc));
+ return;
+ }
+
+ purple_notify_searchresults(sa->pc, _("Contact suggestions"), NULL, NULL, results, NULL, NULL);
+}
+
void
skypeweb_search_users_text(gpointer user_data, const gchar *text)
{
@@ -1028,8 +1057,18 @@ skypeweb_search_users(PurpleProtocolAction *action) }
-
-
+void
+skypeweb_contact_suggestions(PurpleProtocolAction *action)
+{
+ PurpleConnection *pc = purple_protocol_action_get_connection(action);
+ SkypeWebAccount *sa = purple_connection_get_protocol_data(pc);
+
+ GString *url = g_string_new("/v1.1/recommend?requestId=1&locale=en-US&count=20");
+
+ skypeweb_post_or_get(sa, SKYPEWEB_METHOD_GET | SKYPEWEB_METHOD_SSL, SKYPEWEB_DEFAULT_CONTACT_SUGGESTIONS_HOST, url->str, NULL, skypeweb_contact_suggestions_received_cb, 0, FALSE);
+
+ g_string_free(url, TRUE);
+}
static void
skypeweb_got_friend_profiles(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
diff --git a/skypeweb/skypeweb_contacts.h b/skypeweb/skypeweb_contacts.h index dd5f298..e30f985 100644 --- a/skypeweb/skypeweb_contacts.h +++ b/skypeweb/skypeweb_contacts.h @@ -52,4 +52,6 @@ gboolean skypeweb_check_authrequests(SkypeWebAccount *sa); void skypeweb_set_mood_message(SkypeWebAccount *sa, const gchar *mood); +void skypeweb_contact_suggestions(PurpleProtocolAction *action); + #endif /* SKYPEWEB_CONTACTS_H */ |