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 --- src/mir_app/src/mir_app.def | 1 + src/mir_app/src/mir_app64.def | 1 + src/mir_app/src/proto_interface.cpp | 3 +++ src/mir_core/src/db.cpp | 12 ++++++++++-- 4 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 81f0512e7f..208d93904c 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -818,3 +818,4 @@ Srmm_CreateHotkey @886 NONAME ?Chat_Terminate@@YGHPBD_N@Z @933 NONAME ?Chat_Control@@YGHPBDH@Z @934 NONAME ?UpdateChatLog@CSrmmBaseDialog@@IAEXXZ @935 NONAME +?OnMarkRead@PROTO_INTERFACE@@UAEXII@Z @936 NONAME diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 901fc10164..451d75680a 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -818,3 +818,4 @@ Srmm_CreateHotkey @886 NONAME ?Chat_Terminate@@YAHPEBD_N@Z @933 NONAME ?Chat_Control@@YAHPEBDH@Z @934 NONAME ?UpdateChatLog@CSrmmBaseDialog@@IEAAXXZ @935 NONAME +?OnMarkRead@PROTO_INTERFACE@@UEAAXII@Z @936 NONAME diff --git a/src/mir_app/src/proto_interface.cpp b/src/mir_app/src/proto_interface.cpp index 801442d8fa..96c155a9a9 100644 --- a/src/mir_app/src/proto_interface.cpp +++ b/src/mir_app/src/proto_interface.cpp @@ -80,6 +80,9 @@ void PROTO_INTERFACE::OnEventEdited(MCONTACT, MEVENT) void PROTO_INTERFACE::OnErase() {} +void PROTO_INTERFACE::OnMarkRead(MCONTACT, MEVENT) +{} + void PROTO_INTERFACE::OnModulesLoaded() {} diff --git a/src/mir_core/src/db.cpp b/src/mir_core/src/db.cpp index 23584d2fb1..63afe4d66b 100644 --- a/src/mir_core/src/db.cpp +++ b/src/mir_core/src/db.cpp @@ -440,9 +440,17 @@ MIR_CORE_DLL(MEVENT) db_event_last(MCONTACT hContact) return (g_pCurrDb == nullptr) ? 0 : g_pCurrDb->FindLastEvent(hContact); } -MIR_CORE_DLL(int) db_event_markRead(MCONTACT hContact, MEVENT hDbEvent) +MIR_CORE_DLL(int) db_event_markRead(MCONTACT hContact, MEVENT hDbEvent, bool bFromServer) { - return (g_pCurrDb == nullptr) ? 0 : g_pCurrDb->MarkEventRead(hContact, hDbEvent); + if (g_pCurrDb == nullptr) + return 0; + + if (!g_pCurrDb->MarkEventRead(hContact, hDbEvent)) + return 0; + + if (!bFromServer) + if (auto *ppro = Proto_GetInstance(hContact)) + ppro->OnMarkRead(hContact, hDbEvent); } MIR_CORE_DLL(MEVENT) db_event_next(MCONTACT hContact, MEVENT hDbEvent) -- cgit v1.2.3