diff options
author | George Hazan <george.hazan@gmail.com> | 2023-12-23 15:10:58 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-12-23 15:10:58 +0300 |
commit | 7d792ed6fb393548f886d30c2fa69f0a8555d01b (patch) | |
tree | b5ab0bed484eae85ae01c1ecbd63c7c00c537467 | |
parent | 371ac8f6da293e5f4b69d51e3bcb511ba5c1b6e1 (diff) |
fixes #3803 (ICQ: Нет уведомлений о новых сообщениях, если я пишу с другого клиента самому себе)
-rw-r--r-- | protocols/ICQ-WIM/src/poll.cpp | 14 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/proto.h | 4 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/utils.cpp | 7 |
3 files changed, 16 insertions, 9 deletions
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<CIcqProto> 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<CIcqProto> 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<uint32_t> 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);
|