diff options
Diffstat (limited to 'protocols/FacebookRM/src')
-rw-r--r-- | protocols/FacebookRM/src/json.cpp | 35 | ||||
-rw-r--r-- | protocols/FacebookRM/src/version.h | 2 |
2 files changed, 25 insertions, 12 deletions
diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp index 493569346f..71d706a4e1 100644 --- a/protocols/FacebookRM/src/json.cpp +++ b/protocols/FacebookRM/src/json.cpp @@ -754,6 +754,8 @@ int facebook_json_parser::parse_messages(std::string *pData, std::vector<faceboo if (!buddyList) continue; + time_t offlineThreshold = time(NULL) - 15 * 60; // contacts last active more than 15 minutes will be marked offline + for (auto itNodes = buddyList.begin(); itNodes != buddyList.end(); ++itNodes) { std::string id = (*itNodes).name(); @@ -796,6 +798,12 @@ int facebook_json_parser::parse_messages(std::string *pData, std::vector<faceboo else proto->delSetting(hContact, "LastActiveTS"); } + + // Set users inactive for too long as offline + if (last_active > 0 && last_active < offlineThreshold) { + if (proto->getWord(hContact, "Status", 0) != ID_STATUS_OFFLINE) + proto->setWord(hContact, "Status", ID_STATUS_OFFLINE); + } } // Probably means client: guess 0 = web, 8 = messenger, 10 = something else? @@ -829,6 +837,8 @@ int facebook_json_parser::parse_messages(std::string *pData, std::vector<faceboo if (!overlay) continue; + time_t offlineThreshold = time(NULL) - 15 * 60; // contacts last active more than 15 minutes will be marked offline + for (auto itNodes = overlay.begin(); itNodes != overlay.end(); ++itNodes) { std::string id = (*itNodes).name(); @@ -887,20 +897,16 @@ int facebook_json_parser::parse_messages(std::string *pData, std::vector<faceboo status = ID_STATUS_OFFLINE; } - if (proto->getWord(hContact, "Status", 0) != status) - proto->setWord(hContact, "Status", status); - - - if (la_ && status != ID_STATUS_ONLINE) { + if (la_ /*&& status != ID_STATUS_ONLINE*/) { time_t last_active = utils::time::from_string(la_.as_string()); // we should set IdleTS only when contact is IDLE, or OFFLINE - if (proto->getDword(hContact, "IdleTS", 0) != last_active) { - if (/*(fbu->idle || status == ID_STATUS_OFFLINE) &&*/ last_active > 0) - proto->setDword(hContact, "IdleTS", last_active); - else - proto->delSetting(hContact, "IdleTS"); - } + //if (proto->getDword(hContact, "IdleTS", 0) != last_active) { + // if (/*(fbu->idle || status == ID_STATUS_OFFLINE) &&*/ last_active > 0) + // proto->setDword(hContact, "IdleTS", last_active); + // else + // proto->delSetting(hContact, "IdleTS"); + //} /*if (proto->getDword(hContact, "LastActiveTS", 0) != last_active) { if (last_active > 0) @@ -908,11 +914,18 @@ int facebook_json_parser::parse_messages(std::string *pData, std::vector<faceboo else proto->delSetting(hContact, "LastActiveTS"); }*/ + + // Set users inactive for too long as offline + if (last_active > 0 && last_active < offlineThreshold) + status = ID_STATUS_OFFLINE; } else { proto->delSetting(hContact, "IdleTS"); } + if (proto->getWord(hContact, "Status", 0) != status) + proto->setWord(hContact, "Status", status); + if (s_) { // what to do with this? } diff --git a/protocols/FacebookRM/src/version.h b/protocols/FacebookRM/src/version.h index 5f9b67272b..d5bae5255f 100644 --- a/protocols/FacebookRM/src/version.h +++ b/protocols/FacebookRM/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 2 #define __RELEASE_NUM 16 -#define __BUILD_NUM 0 +#define __BUILD_NUM 1 #include <stdver.h> |