summaryrefslogtreecommitdiff
path: root/protocols/FacebookRM/src/connection.cpp
diff options
context:
space:
mode:
authorRobert Pösel <robyer@seznam.cz>2017-04-23 13:17:10 +0200
committerRobert Pösel <robyer@seznam.cz>2017-04-23 15:20:16 +0200
commita78ba173862dbc4a3a6565257135e8b8c354cdc4 (patch)
treecdfdbd95ebdbd2d35ebcffdc072345c5db5dc4b7 /protocols/FacebookRM/src/connection.cpp
parent3aac528057ce49c8497211a4348df5363af17e1e (diff)
Facebook: Fix reporting idle time in away/invisible
Previously Miranda wasn't reporting "idle" at all when invisible, but it was probably represented as "active" by Facebook. Now when user is invisible, it reports idle as number of seconds since switching to invisible (or away). NOTE: Facebook determine last active time of user based not only of this "idle" argument, but also on last time when user was TYPING message.
Diffstat (limited to 'protocols/FacebookRM/src/connection.cpp')
-rw-r--r--protocols/FacebookRM/src/connection.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/protocols/FacebookRM/src/connection.cpp b/protocols/FacebookRM/src/connection.cpp
index 23fb2f528e..613e25427f 100644
--- a/protocols/FacebookRM/src/connection.cpp
+++ b/protocols/FacebookRM/src/connection.cpp
@@ -177,11 +177,18 @@ void FacebookProto::ChangeStatus(void*)
}
}
- m_invisible = (new_status == ID_STATUS_INVISIBLE);
-
- // Remember time of switching to away (and if we are idle already, use the idle time)
- m_awayTS = (new_status == ID_STATUS_AWAY ? (m_idleTS > 0 ? m_idleTS : ::time(NULL)) : 0);
+ bool wasAwayOrInvisible = (old_status == ID_STATUS_AWAY || old_status == ID_STATUS_INVISIBLE);
+ bool isAwayOrInvisible = (new_status == ID_STATUS_AWAY || new_status == ID_STATUS_INVISIBLE);
+ if (!wasAwayOrInvisible && isAwayOrInvisible) {
+ // Switching from "not-away" to "away" state, remember timestamp of this change (and if we are idle already, use the idle time)
+ m_awayTS = (m_idleTS > 0 ? m_idleTS : ::time(NULL));
+ }
+ else if (wasAwayOrInvisible && !isAwayOrInvisible) {
+ // Switching from "away" to "not-away" state, reset the timestamp
+ m_awayTS = 0;
+ }
+ m_invisible = (new_status == ID_STATUS_INVISIBLE);
facy.chat_state(!m_invisible);
m_iStatus = facy.self_.status_id = new_status;