summaryrefslogtreecommitdiff
path: root/protocols/FacebookRM/src/json.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/FacebookRM/src/json.cpp')
-rw-r--r--protocols/FacebookRM/src/json.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp
index de642b4186..b6d4797e56 100644
--- a/protocols/FacebookRM/src/json.cpp
+++ b/protocols/FacebookRM/src/json.cpp
@@ -1192,6 +1192,36 @@ int FacebookProto::ParseMessages(std::string &pData, std::vector<facebook_messag
return EXIT_SUCCESS;
}
+
+int FacebookProto::ParseBuddylistUpdate(std::string* data)
+{
+ std::string jsonData = data->substr(9);
+
+ JSONNode root = JSONNode::parse(jsonData.c_str());
+ if (!root)
+ return EXIT_FAILURE;
+
+ const JSONNode &buddylist = root["payload"].at("buddylist");
+ if (!buddylist)
+ return EXIT_FAILURE;
+
+ setAllContactStatuses(ID_STATUS_OFFLINE);
+
+ for (auto &it : buddylist) {
+ const JSONNode &id = it["id"];
+ const JSONNode &status = it["status"];
+
+ // Facebook now sends info also about some nonfriends, so we just ignore status change of contacts we don't have in list
+ MCONTACT hContact = ContactIDToHContact(id.as_string());
+ if (!hContact)
+ continue;
+
+ setWord(hContact, "Status", ID_STATUS_ONLINE);
+ }
+
+ return EXIT_SUCCESS;
+}
+
int FacebookProto::ParseUnreadThreads(std::string *data, std::vector< std::string >* threads)
{
std::string jsonData = data->substr(9);