diff options
author | George Hazan <george.hazan@gmail.com> | 2023-12-20 20:45:14 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-12-20 20:45:14 +0300 |
commit | a37cb1ece9d185cc5071fc0cc9f8e5c1b6f1fe79 (patch) | |
tree | 6cbffdbbe0fbefcf8be0656ed87b1072498882be /protocols | |
parent | 78cf4cb0dc9e9ec06a7a7fd12a77e8fdf229644d (diff) |
fixes #3758 (ICQ: реализовать поддержку "Избранного")
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/ICQ-WIM/src/mra.cpp | 4 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/options.cpp | 2 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/proto.h | 2 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/server.cpp | 30 |
4 files changed, 30 insertions, 8 deletions
diff --git a/protocols/ICQ-WIM/src/mra.cpp b/protocols/ICQ-WIM/src/mra.cpp index 0c1422ddab..cfe427a136 100644 --- a/protocols/ICQ-WIM/src/mra.cpp +++ b/protocols/ICQ-WIM/src/mra.cpp @@ -101,9 +101,7 @@ void CIcqProto::OnCheckMrimLogin(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *) m_szSessionKey = data["sessionKey"].as_mstring();
- CMStringW szUin = data["loginId"].as_mstring();
- if (szUin)
- m_szOwnId = szUin;
+ SetOwnId(data["loginId"].as_mstring());
int srvTS = data["hostTime"].as_int();
m_iTimeShift = (srvTS) ? time(0) - srvTS : 0;
diff --git a/protocols/ICQ-WIM/src/options.cpp b/protocols/ICQ-WIM/src/options.cpp index ab17121a30..b06ee210a1 100644 --- a/protocols/ICQ-WIM/src/options.cpp +++ b/protocols/ICQ-WIM/src/options.cpp @@ -207,7 +207,7 @@ void CIcqProto::OnLoginViaPhone(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pRe m_szSessionKey = data["sessionKey"].as_mstring();
setString(DB_KEY_SESSIONKEY, m_szSessionKey);
- m_szOwnId = data["loginId"].as_mstring();
+ SetOwnId(data["loginId"].as_mstring());
setByte(DB_KEY_PHONEREG, 1);
}
diff --git a/protocols/ICQ-WIM/src/proto.h b/protocols/ICQ-WIM/src/proto.h index c373a6f184..f665094ad3 100644 --- a/protocols/ICQ-WIM/src/proto.h +++ b/protocols/ICQ-WIM/src/proto.h @@ -217,6 +217,7 @@ class CIcqProto : public PROTO<CIcqProto> void RetrieveUserHistory(MCONTACT, __int64 startMsgId, bool bCreateRead);
void RetrieveUserInfo(MCONTACT hContact);
void SendMrimLogin(NETLIBHTTPREQUEST *pReply);
+ void SetOwnId(const CMStringW &wszId);
void SetServerStatus(int iNewStatus);
void ShutdownSession(void);
void StartSession(void);
@@ -300,6 +301,7 @@ class CIcqProto : public PROTO<CIcqProto> LONG m_msgId = 1;
int m_iRClientId;
HGENMENU m_hUploadGroups;
+ MCONTACT m_hFavContact = INVALID_CONTACT_ID;
mir_cs m_csOwnIds;
OBJLIST<IcqOwnMessage> m_arOwnIds;
diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp index 0b4213c09d..b160cea08a 100644 --- a/protocols/ICQ-WIM/src/server.cpp +++ b/protocols/ICQ-WIM/src/server.cpp @@ -320,6 +320,8 @@ void CIcqProto::OnLoggedIn() for (auto &it : m_arCache)
it->m_timer1 = it->m_timer2 = 0;
+ setWord(m_hFavContact, "Status", ID_STATUS_ONLINE);
+
SetServerStatus(m_iDesiredStatus);
RetrieveUserInfo(0);
GetPermitDeny();
@@ -412,7 +414,7 @@ MCONTACT CIcqProto::ParseBuddyInfo(const JSONNode &buddy, MCONTACT hContact, boo else delSetting(hContact, "MirVer");
const JSONNode &var = buddy["friendly"];
- if (var)
+ if (var && hContact != m_hFavContact)
setWString(hContact, "Nick", var.as_mstring());
if (buddy["deleted"].as_bool()) {
@@ -903,6 +905,28 @@ void CIcqProto::RetrieveHistoryChunk(MCONTACT hContact, __int64 patchVer, __int6 /////////////////////////////////////////////////////////////////////////////////////////
+void CIcqProto::SetOwnId(const CMStringW &wszId)
+{
+ if (wszId.IsEmpty())
+ return;
+
+ m_szOwnId = wszId;
+
+ auto *pUser = FindUser(wszId);
+ if (!pUser) {
+ MCONTACT hContact = CreateContact(wszId, false);
+ Clist_SetGroup(hContact, TranslateT("Conferences"));
+ pUser = FindUser(wszId);
+ }
+
+ setWString(pUser->m_hContact, "Nick", TranslateT("Favorites"));
+
+ if (m_hFavContact == INVALID_CONTACT_ID) {
+ m_hFavContact = pUser->m_hContact;
+ pUser->m_hContact = 0;
+ }
+}
+
void CIcqProto::SetServerStatus(int iStatus)
{
const char *szStatus = "online";
@@ -1079,9 +1103,7 @@ void CIcqProto::OnCheckPassword(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*) m_szSessionKey = ptrA(mir_base64_encode(hashOut, sizeof(hashOut)));
setString(DB_KEY_SESSIONKEY, m_szSessionKey);
- CMStringW szUin = data["loginId"].as_mstring();
- if (szUin)
- m_szOwnId = szUin;
+ SetOwnId(data["loginId"].as_mstring());
int srvTS = data["hostTime"].as_int();
m_iTimeShift = (srvTS) ? time(0) - srvTS : 0;
|