Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/EionRobb/skype4pidgin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEion Robb <eion@robbmob.com>2020-07-12 13:24:41 +0300
committerEion Robb <eion@robbmob.com>2020-07-12 13:24:41 +0300
commit2e2b75599e7b8d8bd2e44cd4ecb2f4b6ec74af3a (patch)
treebaf677aabeb633d3a6c3e3f29b3fd9cddf454af2
parent77f94b55bfb8b0dbc7fafa7461057d33b6802236 (diff)
Manually request contact statuses as a one-off to help spur later status updates
See issue #649
-rw-r--r--skypeweb/skypeweb_messages.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c
index 233a998..70f3f7e 100644
--- a/skypeweb/skypeweb_messages.c
+++ b/skypeweb/skypeweb_messages.c
@@ -1031,6 +1031,34 @@ skypeweb_unsubscribe_from_contact_status(SkypeWebAccount *sa, const gchar *who)
g_free(url);
}
+static void
+skypeweb_got_contact_status(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
+{
+ JsonObject *obj = json_node_get_object(node);
+ JsonArray *responses = json_object_get_array_member(obj, "Responses");
+
+ if (responses != NULL) {
+ guint length = json_array_get_length(responses);
+ gint index;
+ for(index = length - 1; index >= 0; index--)
+ {
+ JsonObject *response = json_array_get_object_element(responses, index);
+ JsonObject *payload = json_object_get_object_member(response, "Payload");
+ process_userpresence_resource(sa, payload);
+ }
+ }
+}
+
+static void
+skypeweb_lookup_contact_status(SkypeWebAccount *sa, const gchar *contact)
+{
+ // Allowed to be up to 10 at once, but be lazy and do one at a time
+ gchar *url = g_strdup_printf("/v1/users/ME/contacts/ALL/presenceDocs/messagingService?cMri=%s%s", skypeweb_user_url_prefix(contact), purple_url_encode(contact));
+ skypeweb_post_or_get(sa, SKYPEWEB_METHOD_GET | SKYPEWEB_METHOD_SSL, sa->messages_host, url, NULL, skypeweb_got_contact_status, NULL, TRUE);
+
+ g_free(url);
+}
+
void
skypeweb_subscribe_to_contact_status(SkypeWebAccount *sa, GSList *contacts)
{
@@ -1064,6 +1092,8 @@ skypeweb_subscribe_to_contact_status(SkypeWebAccount *sa, GSList *contacts)
g_free(id);
+ skypeweb_lookup_contact_status(sa, cur->data);
+
if (count++ >= 100) {
// Send off the current batch and continue
json_object_set_array_member(obj, "contacts", contacts_array);