diff options
author | George Hazan <ghazan@miranda.im> | 2023-02-10 19:46:31 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2023-02-10 19:46:31 +0300 |
commit | a7bf177e6e4aedcaafca186b50e6666788e45f98 (patch) | |
tree | 98b5d4a37a93b5f93eb2399ed38d696dea3c65bd /protocols/JabberG/src | |
parent | 2046bf33c966d9db3fbc98c1e067788408751104 (diff) |
ME_DB_EVENT_MARKED_READ: recursion prevention
Diffstat (limited to 'protocols/JabberG/src')
-rw-r--r-- | protocols/JabberG/src/jabber_events.cpp | 41 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_proto.cpp | 1 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_proto.h | 2 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_rc.cpp | 2 |
4 files changed, 19 insertions, 27 deletions
diff --git a/protocols/JabberG/src/jabber_events.cpp b/protocols/JabberG/src/jabber_events.cpp index da9f81c7bc..d2a863bfa5 100644 --- a/protocols/JabberG/src/jabber_events.cpp +++ b/protocols/JabberG/src/jabber_events.cpp @@ -61,6 +61,23 @@ void CJabberProto::OnContactDeleted(MCONTACT hContact) }
/////////////////////////////////////////////////////////////////////////////////////////
+// OnMarkRead - mark an event read
+
+void CJabberProto::OnMarkRead(MCONTACT hContact, MEVENT hDbEvent)
+{
+ auto *pMark = m_arChatMarks.find((CChatMark *)&hDbEvent);
+ if (pMark) {
+ if (IsSendAck(hContact)) {
+ XmlNode reply("message"); reply << XATTR("to", pMark->szFrom) << XATTR("id", pMark->szId)
+ << XCHILDNS("displayed", JABBER_FEAT_CHAT_MARKERS) << XATTR("id", pMark->szId);
+ m_ThreadInfo->send(reply);
+ }
+
+ m_arChatMarks.remove(pMark);
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
// JabberDbSettingChanged - process database changes
static char* sttSettingToTchar(DBCONTACTWRITESETTING *cws)
@@ -157,30 +174,6 @@ void __cdecl CJabberProto::OnAddContactForever(MCONTACT hContact) Contact::Hide(hContact, false);
}
-int __cdecl CJabberProto::OnDbMarkedRead(WPARAM, LPARAM hDbEvent)
-{
- MCONTACT hContact = db_event_getContact(hDbEvent);
- if (!hContact)
- return 0;
-
- // filter out only events of my protocol
- const char *szProto = Proto_GetBaseAccountName(hContact);
- if (mir_strcmp(szProto, m_szModuleName))
- return 0;
-
- auto *pMark = m_arChatMarks.find((CChatMark *)&hDbEvent);
- if (pMark) {
- if (IsSendAck(hContact)) {
- XmlNode reply("message"); reply << XATTR("to", pMark->szFrom) << XATTR("id", pMark->szId)
- << XCHILDNS("displayed", JABBER_FEAT_CHAT_MARKERS) << XATTR("id", pMark->szId);
- m_ThreadInfo->send(reply);
- }
-
- m_arChatMarks.remove(pMark);
- }
- return 0;
-}
-
int __cdecl CJabberProto::OnDbSettingChanged(WPARAM hContact, LPARAM lParam)
{
if (hContact == 0 || !m_bJabberOnline)
diff --git a/protocols/JabberG/src/jabber_proto.cpp b/protocols/JabberG/src/jabber_proto.cpp index 9762a297f8..6c425da2c4 100644 --- a/protocols/JabberG/src/jabber_proto.cpp +++ b/protocols/JabberG/src/jabber_proto.cpp @@ -199,7 +199,6 @@ CJabberProto::CJabberProto(const char *aProtoName, const wchar_t *aUserName) : HookProtoEvent(ME_LANGPACK_CHANGED, &CJabberProto::OnLangChanged);
HookProtoEvent(ME_OPT_INITIALISE, &CJabberProto::OnOptionsInit);
HookProtoEvent(ME_SKIN_ICONSCHANGED, &CJabberProto::OnReloadIcons);
- HookProtoEvent(ME_DB_EVENT_MARKED_READ, &CJabberProto::OnDbMarkedRead);
HookProtoEvent(ME_DB_CONTACT_SETTINGCHANGED, &CJabberProto::OnDbSettingChanged);
m_iqManager.FillPermanentHandlers();
diff --git a/protocols/JabberG/src/jabber_proto.h b/protocols/JabberG/src/jabber_proto.h index c2eaba0b3f..9f5d8d5c0b 100644 --- a/protocols/JabberG/src/jabber_proto.h +++ b/protocols/JabberG/src/jabber_proto.h @@ -150,6 +150,7 @@ struct CJabberProto : public PROTO<CJabberProto>, public IJabberInterface void OnBuildProtoMenu(void) override;
void OnContactDeleted(MCONTACT) override;
+ void OnMarkRead(MCONTACT, MEVENT) override;
void OnModulesLoaded() override;
void OnShutdown() override;
@@ -163,7 +164,6 @@ struct CJabberProto : public PROTO<CJabberProto>, public IJabberInterface //====| Events |======================================================================
void __cdecl OnAddContactForever(MCONTACT hContact);
- int __cdecl OnDbMarkedRead(WPARAM, LPARAM);
int __cdecl OnDbSettingChanged(WPARAM, LPARAM);
int __cdecl OnIdleChanged(WPARAM, LPARAM);
int __cdecl OnLangChanged(WPARAM, LPARAM);
diff --git a/protocols/JabberG/src/jabber_rc.cpp b/protocols/JabberG/src/jabber_rc.cpp index a5bae9e944..27d389cee3 100644 --- a/protocols/JabberG/src/jabber_rc.cpp +++ b/protocols/JabberG/src/jabber_rc.cpp @@ -564,7 +564,7 @@ int CJabberProto::AdhocForwardHandler(const TiXmlElement*, CJabberIqInfo *pInfo, nEventsSent++;
- db_event_markRead(hContact, hDbEvent);
+ db_event_markRead(hContact, hDbEvent, true);
if (bRemoveCListEvents)
g_clistApi.pfnRemoveEvent(hContact, hDbEvent);
}
|