diff options
author | Eion Robb <eion@robbmob.com> | 2014-12-01 08:44:07 +0300 |
---|---|---|
committer | Eion Robb <eion@robbmob.com> | 2014-12-01 08:44:07 +0300 |
commit | edeb6bcf8657f3ee4d3ddd027f958fc4c0d44d65 (patch) | |
tree | 026e16b6dcf4a07f845f8f1ac4037b6a32115342 | |
parent | 9d240e67a4e5d7366031a551c478337b111ccca3 (diff) |
SkypeWeb : Fix for all buddies showing as offline because we weren't asking for any presence events for them
-rw-r--r-- | skypeweb/skypeweb_contacts.c | 2 | ||||
-rw-r--r-- | skypeweb/skypeweb_messages.c | 37 | ||||
-rw-r--r-- | skypeweb/skypeweb_messages.h | 3 |
3 files changed, 42 insertions, 0 deletions
diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c index 6b35fd3..db77546 100644 --- a/skypeweb/skypeweb_contacts.c +++ b/skypeweb/skypeweb_contacts.c @@ -2,6 +2,7 @@ #include "skypeweb_contacts.h"
#include "skypeweb_connection.h"
+#include "skypeweb_messages.h"
#include "skypeweb_util.h"
static guint active_icon_downloads = 0;
@@ -432,6 +433,7 @@ skypeweb_get_friend_list_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_d if (users_to_fetch)
{
skypeweb_get_friend_profiles(sa, users_to_fetch);
+ skypeweb_subscribe_to_contact_status(sa, users_to_fetch);
g_slist_free(users_to_fetch);
}
}
diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c index daa8069..8147be1 100644 --- a/skypeweb/skypeweb_messages.c +++ b/skypeweb/skypeweb_messages.c @@ -142,6 +142,43 @@ skypeweb_poll(SkypeWebAccount *sa) }
+void
+skypeweb_subscribe_to_contact_status(SkypeWebAccount *sa, GSList *contacts)
+{
+ const gchar *contacts_url = "/v1/users/ME/contacts";
+ gchar *post;
+ GSList *cur = contacts;
+ JsonObject *obj;
+ JsonArray *contacts_array;
+
+ if (contacts == NULL)
+ return;
+
+ obj = json_object_new();
+ contacts_array = json_array_new();
+
+ do {
+ JsonObject *contact = json_object_new();
+ gchar *id;
+
+ id = g_strconcat("8:", cur->data, NULL);
+ json_object_set_string_member(contact, "id", id);
+ json_array_add_object_element(contacts_array, contact);
+
+ g_free(id);
+ } while((cur = g_slist_next(cur)));
+
+ json_object_set_array_member(obj, "contacts", contacts_array);
+ post = skypeweb_jsonobj_to_string(obj);
+
+ skypeweb_post_or_get(sa, SKYPEWEB_METHOD_POST | SKYPEWEB_METHOD_SSL, SKYPEWEB_MESSAGES_HOST, contacts_url, post, NULL, NULL, TRUE);
+
+ g_free(post);
+ json_object_unref(obj);
+ json_array_unref(contacts_array);
+}
+
+
static void
skypeweb_subscribe_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
{
diff --git a/skypeweb/skypeweb_messages.h b/skypeweb/skypeweb_messages.h index 2fd39e0..fe46377 100644 --- a/skypeweb/skypeweb_messages.h +++ b/skypeweb/skypeweb_messages.h @@ -11,4 +11,7 @@ guint skypeweb_send_typing(PurpleConnection *pc, const gchar *name, PurpleTyping void skypeweb_poll(SkypeWebAccount *sa); void skypeweb_get_registration_token(SkypeWebAccount *sa); + +void skypeweb_subscribe_to_contact_status(SkypeWebAccount *sa, GSList *contacts); + #endif /* SKYPEWEB_MESSAGES_H */ |