diff options
author | George Hazan <ghazan@miranda.im> | 2021-01-18 21:15:51 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2021-01-18 21:15:51 +0300 |
commit | 35780da54a30840b50313ebf6ca2a0b7367d6c49 (patch) | |
tree | 3eb66fe2e3a7654544a74499344eeb66a13d46b0 /src/core/stdmsg | |
parent | 6436b0320228f42b696c8298ef30f92439af9872 (diff) |
fixes #2700 (Scriver: при открытии окна через попап отображается лишь одно сообщение)
Diffstat (limited to 'src/core/stdmsg')
-rw-r--r-- | src/core/stdmsg/src/msgdialog.cpp | 96 |
1 files changed, 43 insertions, 53 deletions
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...
|