From 1418e434c8734277480da28e828705d0336058b8 Mon Sep 17 00:00:00 2001 From: ikeblaster Date: Sat, 15 Jun 2019 14:55:37 +0200 Subject: Facebook - alternative loading of contacts' statuses --- protocols/FacebookRM/src/json.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'protocols/FacebookRM/src/json.cpp') 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::vectorsubstr(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); -- cgit v1.2.3