From a37cb1ece9d185cc5071fc0cc9f8e5c1b6f1fe79 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 20 Dec 2023 20:45:14 +0300 Subject: =?UTF-8?q?fixes=20#3758=20(ICQ:=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BF=D0=BE=D0=B4=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D1=83=20"=D0=98=D0=B7=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/ICQ-WIM/src/mra.cpp | 4 +--- protocols/ICQ-WIM/src/options.cpp | 2 +- protocols/ICQ-WIM/src/proto.h | 2 ++ protocols/ICQ-WIM/src/server.cpp | 30 ++++++++++++++++++++++++++---- 4 files changed, 30 insertions(+), 8 deletions(-) (limited to 'protocols') 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 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 LONG m_msgId = 1; int m_iRClientId; HGENMENU m_hUploadGroups; + MCONTACT m_hFavContact = INVALID_CONTACT_ID; mir_cs m_csOwnIds; OBJLIST 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; -- cgit v1.2.3