diff options
author | Robert Pösel <robyer@seznam.cz> | 2017-04-23 13:17:10 +0200 |
---|---|---|
committer | Robert Pösel <robyer@seznam.cz> | 2017-04-23 15:20:16 +0200 |
commit | a78ba173862dbc4a3a6565257135e8b8c354cdc4 (patch) | |
tree | cdfdbd95ebdbd2d35ebcffdc072345c5db5dc4b7 /protocols/FacebookRM/src/connection.cpp | |
parent | 3aac528057ce49c8497211a4348df5363af17e1e (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.cpp | 15 |
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; |