From a7bf177e6e4aedcaafca186b50e6666788e45f98 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 10 Feb 2023 19:46:31 +0300 Subject: ME_DB_EVENT_MARKED_READ: recursion prevention --- protocols/Facebook/src/proto.cpp | 1 - protocols/Facebook/src/proto.h | 3 ++- protocols/Facebook/src/server.cpp | 16 +++------------- 3 files changed, 5 insertions(+), 15 deletions(-) (limited to 'protocols/Facebook') diff --git a/protocols/Facebook/src/proto.cpp b/protocols/Facebook/src/proto.cpp index f594a7ad91..82043fdf55 100644 --- a/protocols/Facebook/src/proto.cpp +++ b/protocols/Facebook/src/proto.cpp @@ -108,7 +108,6 @@ FacebookProto::FacebookProto(const char *proto_name, const wchar_t *username) : HookProtoEvent(ME_GC_EVENT, &FacebookProto::GroupchatEventHook); HookProtoEvent(ME_GC_BUILDMENU, &FacebookProto::GroupchatMenuHook); HookProtoEvent(ME_OPT_INITIALISE, &FacebookProto::OnOptionsInit); - HookProtoEvent(ME_DB_EVENT_MARKED_READ, &FacebookProto::OnMarkedRead); // Group chats GCREGISTER gcr = {}; diff --git a/protocols/Facebook/src/proto.h b/protocols/Facebook/src/proto.h index fa110918f4..20d218b4b1 100644 --- a/protocols/Facebook/src/proto.h +++ b/protocols/Facebook/src/proto.h @@ -532,10 +532,11 @@ public: int SetStatus(int iNewStatus) override; int UserIsTyping(MCONTACT hContact, int type) override; + void OnMarkRead(MCONTACT, MEVENT) override; + //////////////////////////////////////////////////////////////////////////////////////// // Events - int __cdecl OnMarkedRead(WPARAM, LPARAM); int __cdecl OnOptionsInit(WPARAM, LPARAM); int __cdecl GroupchatMenuHook(WPARAM, LPARAM); diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp index cae092fcbd..a8fd12ebc7 100644 --- a/protocols/Facebook/src/server.cpp +++ b/protocols/Facebook/src/server.cpp @@ -447,19 +447,10 @@ LBL_Begin: ///////////////////////////////////////////////////////////////////////////////////////// -int FacebookProto::OnMarkedRead(WPARAM, LPARAM hDbEvent) +void FacebookProto::OnMarkRead(MCONTACT hContact, MEVENT) { - 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; - if (m_bKeepUnread) - return 0; + return; JSONNode root; root << BOOL_PARAM("state", true) << INT_PARAM("syncSeqId", m_sid) << CHAR_PARAM("mark", "read"); if (isChatRoom(hContact)) @@ -467,7 +458,6 @@ int FacebookProto::OnMarkedRead(WPARAM, LPARAM hDbEvent) else root << CHAR_PARAM("otherUserFbId", getMStringA(hContact, DBKEY_ID)); MqttPublish("/mark_thread", root); - return 0; } ///////////////////////////////////////////////////////////////////////////////////////// @@ -977,7 +967,7 @@ void FacebookProto::OnPublishReadReceipt(const JSONNode &root) break; if (!dbei.markedRead()) - db_event_markRead(pUser->hContact, ev); + db_event_markRead(pUser->hContact, ev, true); } } -- cgit v1.2.3