From 2d2fa8dd248ba2e3e22f13533fef4c69bfbc3c2b Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 21 Mar 2025 14:31:09 +0300 Subject: =?UTF-8?q?fixes=20#4863=20(NewStory:=20=D0=BE=D1=82=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D1=8B=20=D0=BF=D0=BE-=D1=80=D0=B0=D0=B7=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=D1=83=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20=D0=B2=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D1=81=D0=B0=D1=85=20=D0=B8=20=D0=B2=20=D0=B8=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/Scriver/src/msgs.cpp | 6 +++--- plugins/TabSRMM/src/globals.cpp | 6 +++--- plugins/TabSRMM/src/msgdlgother.cpp | 39 +++++++++++++++++-------------------- src/core/stdmsg/src/msgs.cpp | 6 +++--- src/mir_app/src/filexferdlg.cpp | 2 +- src/mir_app/src/srmm_base.cpp | 6 ++++-- 6 files changed, 32 insertions(+), 33 deletions(-) diff --git a/plugins/Scriver/src/msgs.cpp b/plugins/Scriver/src/msgs.cpp index 47f692d0a4..ed86c8b0ce 100644 --- a/plugins/Scriver/src/msgs.cpp +++ b/plugins/Scriver/src/msgs.cpp @@ -249,7 +249,7 @@ struct MSavedEvent static void RestoreUnreadMessageAlerts(void) { - OBJLIST arEvents(10, NumericKeySortT); + OBJLIST events(10, NumericKeySortT); for (auto &hContact : Contacts()) { if (Contact::IsGroupChat(hContact) || !Proto_GetBaseAccountName(hContact)) @@ -269,11 +269,11 @@ static void RestoreUnreadMessageAlerts(void) if (IsAutoPopup(hContact) && !windowAlreadyExists) (new CMsgDialog(hContact, true))->Show(); else - arEvents.insert(new MSavedEvent(hContact, hDbEvent)); + events.insert(new MSavedEvent(hContact, hDbEvent)); } } - for (auto &e : arEvents) + for (auto &e : events) Srmm_AddEvent(e->hContact, e->hEvent); } diff --git a/plugins/TabSRMM/src/globals.cpp b/plugins/TabSRMM/src/globals.cpp index f46d7b6fdd..a6ab43374d 100644 --- a/plugins/TabSRMM/src/globals.cpp +++ b/plugins/TabSRMM/src/globals.cpp @@ -442,7 +442,7 @@ struct MSavedEvent void CGlobals::RestoreUnreadMessageAlerts(void) { - OBJLIST arEvents(10, NumericKeySortT); + OBJLIST events(10, NumericKeySortT); for (auto &hContact : Contacts()) { if (Proto_GetBaseAccountName(hContact) == nullptr) @@ -459,12 +459,12 @@ void CGlobals::RestoreUnreadMessageAlerts(void) if (!dbei.markedRead() && dbei.isAlertable()) if (!Srmm_FindWindow(hContact)) - arEvents.insert(new MSavedEvent(hContact, hDbEvent)); + events.insert(new MSavedEvent(hContact, hDbEvent)); } } } - for (auto &e : arEvents) + for (auto &e : events) Srmm_AddEvent(e->hContact, e->hEvent); } diff --git a/plugins/TabSRMM/src/msgdlgother.cpp b/plugins/TabSRMM/src/msgdlgother.cpp index 1bf3dde416..56cdf162d7 100644 --- a/plugins/TabSRMM/src/msgdlgother.cpp +++ b/plugins/TabSRMM/src/msgdlgother.cpp @@ -401,35 +401,31 @@ void CMsgDialog::EventAdded(MEVENT hDbEvent, const DB::EventInfo &dbei) bool CMsgDialog::GetFirstEvent() { int historyMode = g_plugin.getByte(m_hContact, "LoadHistory", Srmm::iHistoryMode); - - m_hDbEventFirst = db_event_firstUnread(m_hContact); - if (m_bActualHistory) historyMode = LOADHISTORY_COUNT; DB::EventInfo dbei; - DB::ECPTR pCursor(DB::EventsRev(m_hContact, m_hDbEventFirst)); switch (historyMode) { - case LOADHISTORY_COUNT: - int i; - - // ability to load only current session's history - if (m_bActualHistory) - i = m_cache->getSessionMsgCount(); - else - i = g_plugin.getWord(SRMSGSET_LOADCOUNT, SRMSGDEFSET_LOADCOUNT); + case LOADHISTORY_UNREAD: + m_hDbEventFirst = db_event_firstUnread(m_hContact); + break; - for (; i > 0; i--) { - MEVENT hPrevEvent = pCursor.FetchNext(); - if (hPrevEvent == 0) - break; + case LOADHISTORY_COUNT: + { + DB::ECPTR pCursor(DB::EventsRev(m_hContact)); + int n = (m_bActualHistory) ? m_cache->getSessionMsgCount() : g_plugin.getWord(SRMSGSET_LOADCOUNT, SRMSGDEFSET_LOADCOUNT); + while (n > 0) { + MEVENT hPrevEvent = pCursor.FetchNext(); + if (hPrevEvent == 0) + break; - dbei.cbBlob = 0; - m_hDbEventFirst = hPrevEvent; - db_event_get(m_hDbEventFirst, &dbei); - if (!DbEventIsShown(dbei)) - i++; + dbei.cbBlob = 0; + m_hDbEventFirst = hPrevEvent; + db_event_get(m_hDbEventFirst, &dbei); + if (DbEventIsShown(dbei)) + n--; + } } break; @@ -441,6 +437,7 @@ bool CMsgDialog::GetFirstEvent() uint32_t firstTime = dbei.getUnixtime() - 60 * g_plugin.getWord(SRMSGSET_LOADTIME, SRMSGDEFSET_LOADTIME); + DB::ECPTR pCursor(DB::EventsRev(m_hContact)); while (MEVENT hPrevEvent = pCursor.FetchNext()) { dbei.cbBlob = 0; db_event_get(hPrevEvent, &dbei); diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp index 6bbf995d52..6e7e0f2ceb 100644 --- a/src/core/stdmsg/src/msgs.cpp +++ b/src/core/stdmsg/src/msgs.cpp @@ -277,7 +277,7 @@ struct MSavedEvent static void RestoreUnreadMessageAlerts(void) { - OBJLIST arEvents(10, NumericKeySortT); + OBJLIST events(10, NumericKeySortT); for (auto &hContact : Contacts()) { if (Contact::IsGroupChat(hContact) || !Proto_GetBaseAccountName(hContact)) @@ -305,12 +305,12 @@ static void RestoreUnreadMessageAlerts(void) if (autoPopup && !windowAlreadyExists) GetContainer()->AddPage(hContact); else - arEvents.insert(new MSavedEvent(hContact, hDbEvent)); + events.insert(new MSavedEvent(hContact, hDbEvent)); } } } - for (auto &e : arEvents) + for (auto &e : events) Srmm_AddEvent(e->hContact, e->hEvent); } diff --git a/src/mir_app/src/filexferdlg.cpp b/src/mir_app/src/filexferdlg.cpp index d946f4c65f..1abb90673d 100644 --- a/src/mir_app/src/filexferdlg.cpp +++ b/src/mir_app/src/filexferdlg.cpp @@ -595,7 +595,7 @@ INT_PTR CALLBACK DlgProcFileTransfer(HWND hwndDlg, UINT msg, WPARAM wParam, LPAR DB::EventInfo dbei; dbei.szModule = Proto_GetBaseAccountName(dat->hContact); dbei.eventType = EVENTTYPE_FILE; - dbei.flags = DBEF_SENT | DBEF_UTF; + dbei.flags = DBEF_SENT | DBEF_READ | DBEF_UTF; dbei.iTimestamp = time(0); DB::FILE_BLOB blob(dat->szFilenames, dat->szMsg); diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index 734428756f..fa4f27ce57 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -841,7 +841,7 @@ void CSrmmBaseDialog::UpdateChatLog() auto *szProto = Proto_GetBaseAccountName(m_hContact); for (MEVENT hDbEvent = m_hDbEventFirst; hDbEvent; hDbEvent = db_event_next(m_hContact, hDbEvent)) { DB::EventInfo dbei(hDbEvent); - if (dbei && !mir_strcmp(szProto, dbei.szModule) && g_chatApi.DbEventIsShown(dbei) && dbei.szUserId) { + if (dbei && !mir_strcmp(szProto, dbei.szModule) && g_chatApi.DbEventIsShown(dbei)) { if (iHistoryMode == LOADHISTORY_UNREAD && dbei.bRead) continue; @@ -855,7 +855,9 @@ void CSrmmBaseDialog::UpdateChatLog() gce.time = dbei.getUnixtime(); gce.hEvent = hDbEvent; - if (USERINFO *ui = g_chatApi.UM_FindUser(m_si, wszUserId)) + if (dbei.szUserId == nullptr) + gce.bIsMe = true; + else if (USERINFO *ui = g_chatApi.UM_FindUser(m_si, wszUserId)) gce.pszNick.w = ui->pszNick; else gce.pszNick.w = wszUserId; -- cgit v1.2.3