diff options
Diffstat (limited to 'protocols/ICQ-WIM/src/utils.cpp')
-rw-r--r-- | protocols/ICQ-WIM/src/utils.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/protocols/ICQ-WIM/src/utils.cpp b/protocols/ICQ-WIM/src/utils.cpp index 6db1050801..b6712ce8c9 100644 --- a/protocols/ICQ-WIM/src/utils.cpp +++ b/protocols/ICQ-WIM/src/utils.cpp @@ -167,6 +167,15 @@ bool IsValidType(const JSONNode &n) /////////////////////////////////////////////////////////////////////////////////////////
+void CIcqProto::ProcessOnline(const JSONNode &presence, MCONTACT hContact)
+{
+ int onlineTime = presence["onlineTime"].as_int();
+ if (onlineTime)
+ setDword(hContact, DB_KEY_ONLINETS, time(0) - onlineTime);
+ else
+ delSetting(hContact, DB_KEY_ONLINETS);
+}
+
int CIcqProto::StatusFromPresence(const JSONNode &presence, MCONTACT hContact)
{
auto *pUser = FindUser(GetUserId(hContact));
@@ -178,7 +187,6 @@ int CIcqProto::StatusFromPresence(const JSONNode &presence, MCONTACT hContact) if (wszStatus == L"online") {
pUser->m_bWasOnline = true;
iStatus = ID_STATUS_ONLINE;
- setDword(hContact, DB_KEY_ONLINETS, time(0));
}
else if (wszStatus == L"offline")
iStatus = ID_STATUS_OFFLINE;
@@ -201,16 +209,10 @@ int CIcqProto::StatusFromPresence(const JSONNode &presence, MCONTACT hContact) setDword(hContact, DB_KEY_LASTSEEN, iLastSeen);
}
else {
- if (pUser->m_bWasOnline) {
- iStatus = ID_STATUS_ONLINE;
- setDword(hContact, DB_KEY_ONLINETS, time(0));
- }
- else {
- mir_cslock lck(m_csLastSeenQueue);
- m_arLastSeenQueue.insert(pUser);
- m_impl.m_lastSeen.Start(500);
+ if (!pUser->m_bWasOnline)
return -1;
- }
+
+ iStatus = ID_STATUS_ONLINE;
}
return iStatus;
|