From 35780da54a30840b50313ebf6ca2a0b7367d6c49 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 18 Jan 2021 21:15:51 +0300 Subject: =?UTF-8?q?fixes=20#2700=20(Scriver:=20=D0=BF=D1=80=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D0=B8=20=D0=BE=D0=BA=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=BF=D0=BE=D0=BF?= =?UTF-8?q?=D0=B0=D0=BF=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=8F=20=D0=BB=D0=B8=D1=88=D1=8C=20=D0=BE?= =?UTF-8?q?=D0=B4=D0=BD=D0=BE=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/stdmsg/src/msgdialog.cpp | 96 ++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 53 deletions(-) (limited to 'src/core/stdmsg') diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index a5185eb762..8bfbfb1d31 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -151,68 +151,58 @@ bool CMsgDialog::OnInitDialog() // This finds the first message to display, it works like shit m_hDbEventFirst = db_event_firstUnread(m_hContact); - switch (g_dat.iLoadHistory) { - case LOADHISTORY_COUNT: - for (int i = g_dat.nLoadCount; i--;) { - MEVENT hPrevEvent; - if (m_hDbEventFirst == 0) - hPrevEvent = db_event_last(m_hContact); - else - hPrevEvent = db_event_prev(m_hContact, m_hDbEventFirst); - if (hPrevEvent == 0) - break; + { + DB::ECPTR pCursor(DB::EventsRev(m_hContact, m_hDbEventFirst)); + + switch (g_dat.iLoadHistory) { + case LOADHISTORY_COUNT: + for (int i = g_dat.nLoadCount; i--;) { + MEVENT hPrevEvent = pCursor.FetchNext(); + if (hPrevEvent == 0) + break; + + DBEVENTINFO dbei = {}; + m_hDbEventFirst = hPrevEvent; + db_event_get(hPrevEvent, &dbei); + if (!DbEventIsShown(&dbei)) + i++; + } + break; + case LOADHISTORY_TIME: DBEVENTINFO dbei = {}; - m_hDbEventFirst = hPrevEvent; - db_event_get(hPrevEvent, &dbei); - if (!DbEventIsShown(&dbei)) - i++; - } - break; - - case LOADHISTORY_TIME: - DBEVENTINFO dbei = {}; - if (m_hDbEventFirst == 0) - dbei.timestamp = (DWORD)time(0); - else - db_event_get(m_hDbEventFirst, &dbei); - - DWORD firstTime = dbei.timestamp - 60 * g_dat.nLoadTime; - for (;;) { - MEVENT hPrevEvent; if (m_hDbEventFirst == 0) - hPrevEvent = db_event_last(m_hContact); + dbei.timestamp = (DWORD)time(0); else - hPrevEvent = db_event_prev(m_hContact, m_hDbEventFirst); - if (hPrevEvent == 0) - break; - - dbei.cbBlob = 0; - db_event_get(hPrevEvent, &dbei); - if (dbei.timestamp < firstTime) - break; - m_hDbEventFirst = hPrevEvent; + db_event_get(m_hDbEventFirst, &dbei); + + DWORD firstTime = dbei.timestamp - 60 * g_dat.nLoadTime; + while (MEVENT hPrevEvent = pCursor.FetchNext()) { + dbei.cbBlob = 0; + db_event_get(hPrevEvent, &dbei); + if (dbei.timestamp < firstTime) + break; + m_hDbEventFirst = hPrevEvent; + } + break; } - break; } - MEVENT hdbEvent = db_event_last(m_hContact); - if (hdbEvent) { - bool bUpdate = false; - do { - DBEVENTINFO dbei = {}; - db_event_get(hdbEvent, &dbei); - if ((dbei.eventType == EVENTTYPE_MESSAGE) && !(dbei.flags & DBEF_SENT)) { - m_lastMessage = dbei.timestamp; - bUpdate = true; - break; - } - } while (hdbEvent = db_event_prev(m_hContact, hdbEvent)); - - if (bUpdate) - UpdateLastMessage(); + bool bUpdate = false; + DB::ECPTR pCursor(DB::EventsRev(m_hContact)); + while (MEVENT hdbEvent = pCursor.FetchNext()) { + DBEVENTINFO dbei = {}; + db_event_get(hdbEvent, &dbei); + if ((dbei.eventType == EVENTTYPE_MESSAGE) && !(dbei.flags & DBEF_SENT)) { + m_lastMessage = dbei.timestamp; + bUpdate = true; + break; + } } + if (bUpdate) + UpdateLastMessage(); + OnOptionsApplied(false); // restore saved msg if any... -- cgit v1.2.3