From 7d792ed6fb393548f886d30c2fa69f0a8555d01b Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 23 Dec 2023 15:10:58 +0300 Subject: =?UTF-8?q?fixes=20#3803=20(ICQ:=20=D0=9D=D0=B5=D1=82=20=D1=83?= =?UTF-8?q?=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=BE=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=D1=85,=20=D0=B5=D1=81?= =?UTF-8?q?=D0=BB=D0=B8=20=D1=8F=20=D0=BF=D0=B8=D1=88=D1=83=20=D1=81=20?= =?UTF-8?q?=D0=B4=D1=80=D1=83=D0=B3=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BB=D0=B8?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=20=D1=81=D0=B0=D0=BC=D0=BE=D0=BC=D1=83?= =?UTF-8?q?=20=D1=81=D0=B5=D0=B1=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/ICQ-WIM/src/poll.cpp | 14 ++++++++------ protocols/ICQ-WIM/src/proto.h | 4 ++-- protocols/ICQ-WIM/src/utils.cpp | 7 ++++++- 3 files changed, 16 insertions(+), 9 deletions(-) (limited to 'protocols') diff --git a/protocols/ICQ-WIM/src/poll.cpp b/protocols/ICQ-WIM/src/poll.cpp index a75b972e15..cbf17cfa54 100644 --- a/protocols/ICQ-WIM/src/poll.cpp +++ b/protocols/ICQ-WIM/src/poll.cpp @@ -179,7 +179,7 @@ void CIcqProto::ProcessHistData(const JSONNode &ev) break; } - if ((si = CreateGroupChat(wszId, wszNick)) == nullptr) + if ((si = GcCreate(wszId, wszNick)) == nullptr) return; } @@ -328,12 +328,13 @@ void CIcqProto::ProcessPresence(const JSONNode &ev) if (pUser == nullptr) return; - int iNewStatus = StatusFromPresence(ev, pUser->m_hContact); + MCONTACT hContact = GetRealContact(pUser); + int iNewStatus = StatusFromPresence(ev, hContact); if (iNewStatus != -1) ProcessStatus(pUser, iNewStatus); - Json2string(pUser->m_hContact, ev, "friendly", "Nick", true); - CheckAvatarChange(pUser->m_hContact, ev); + Json2string(hContact, ev, "friendly", "Nick", true); + CheckAvatarChange(hContact, ev); } void CIcqProto::ProcessSessionEnd(const JSONNode &/*ev*/) @@ -352,10 +353,11 @@ void CIcqProto::ProcessTyping(const JSONNode &ev) auto *pUser = FindUser(aimId); if (pUser) { + MCONTACT hContact = GetRealContact(pUser); if (wszStatus == "typing") - CallService(MS_PROTO_CONTACTISTYPING, pUser->m_hContact, 60); + CallService(MS_PROTO_CONTACTISTYPING, hContact, 60); else - CallService(MS_PROTO_CONTACTISTYPING, pUser->m_hContact, PROTOTYPE_CONTACTTYPING_OFF); + CallService(MS_PROTO_CONTACTISTYPING, hContact, PROTOTYPE_CONTACTTYPING_OFF); } } diff --git a/protocols/ICQ-WIM/src/proto.h b/protocols/ICQ-WIM/src/proto.h index 1afe659e85..1771a37e43 100644 --- a/protocols/ICQ-WIM/src/proto.h +++ b/protocols/ICQ-WIM/src/proto.h @@ -265,7 +265,6 @@ class CIcqProto : public PROTO void OnGetUserCaps(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnGetUserHistory(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnGetUserInfo(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); - void OnLastSeen(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnLeaveChat(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnLoginViaPhone(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnNormalizePhone(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); @@ -354,7 +353,7 @@ class CIcqProto : public PROTO void InitContactCache(void); IcqUser* FindUser(const CMStringW &pwszId); MCONTACT CreateContact(const CMStringW &pwszId, bool bTemporary); - + void GetAvatarFileName(MCONTACT hContact, wchar_t *pszDest, size_t cbLen); //////////////////////////////////////////////////////////////////////////////////////// @@ -450,6 +449,7 @@ public: CMOption m_iStatus2; void CheckStatus(void); + MCONTACT GetRealContact(IcqUser *pUser); CMStringW GetUserId(MCONTACT); __forceinline int TS() const diff --git a/protocols/ICQ-WIM/src/utils.cpp b/protocols/ICQ-WIM/src/utils.cpp index e0c39c27a6..6af29df66d 100644 --- a/protocols/ICQ-WIM/src/utils.cpp +++ b/protocols/ICQ-WIM/src/utils.cpp @@ -94,7 +94,7 @@ MCONTACT CIcqProto::CreateContact(const CMStringW &wszId, bool bTemporary) { auto *pUser = FindUser(wszId); if (pUser != nullptr) - return pUser->m_hContact; + return GetRealContact(pUser); MCONTACT hContact = db_add_contact(); setWString(hContact, DB_KEY_ID, wszId); @@ -149,6 +149,11 @@ void CIcqProto::Json2string(MCONTACT hContact, const JSONNode &node, const char ///////////////////////////////////////////////////////////////////////////////////////// +MCONTACT CIcqProto::GetRealContact(IcqUser *pUser) +{ + return (pUser->m_hContact == 0) ? m_hFavContact : pUser->m_hContact; +} + CMStringW CIcqProto::GetUserId(MCONTACT hContact) { return getMStringW(hContact, DB_KEY_ID); -- cgit v1.2.3