diff options
author | George Hazan <ghazan@miranda.im> | 2022-11-14 20:04:02 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-11-14 20:04:02 +0300 |
commit | 2d74ff3a09c40efda6ad6e9c6b569820776a54f1 (patch) | |
tree | a30fa0bca0c7dec52fa5b554b7eccd0993d254fa /src/core/stdmsg | |
parent | e097a96ae55208292e1800c75b6a1f7766e38964 (diff) |
basic set for storing group chat messages in a database + reusing log settings like show 10 recent messages
Diffstat (limited to 'src/core/stdmsg')
-rw-r--r-- | src/core/stdmsg/src/msgdialog.cpp | 85 | ||||
-rw-r--r-- | src/core/stdmsg/src/msgs.h | 1 |
2 files changed, 47 insertions, 39 deletions
diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index 63ed7f47fa..8e0c4ff3ed 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -140,50 +140,16 @@ bool CMsgDialog::OnInitDialog() UpdateStatusBar();
UpdateTitle();
- NotifyEvent(MSG_WINDOW_EVT_OPEN);
+ if (m_si->pMI->bDatabase) {
+ FindFirstEvent();
+ RemakeLog();
+ }
}
else {
m_nickList.Hide();
m_splitterX.Hide();
- // This finds the first message to display, it works like shit
- m_hDbEventFirst = db_event_firstUnread(m_hContact);
- {
- DB::ECPTR pCursor(DB::EventsRev(m_hContact, m_hDbEventFirst));
-
- switch (g_plugin.iLoadHistory) {
- case LOADHISTORY_COUNT:
- for (int i = g_plugin.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 = {};
- if (m_hDbEventFirst == 0)
- dbei.timestamp = (uint32_t)time(0);
- else
- db_event_get(m_hDbEventFirst, &dbei);
-
- uint32_t firstTime = dbei.timestamp - 60 * g_plugin.nLoadTime;
- while (MEVENT hPrevEvent = pCursor.FetchNext()) {
- dbei.cbBlob = 0;
- db_event_get(hPrevEvent, &dbei);
- if (dbei.timestamp < firstTime)
- break;
- m_hDbEventFirst = hPrevEvent;
- }
- break;
- }
- }
+ FindFirstEvent();
bool bUpdate = false;
DB::ECPTR pCursor(DB::EventsRev(m_hContact));
@@ -1335,6 +1301,47 @@ void CMsgDialog::CloseTab() else SendMessage(m_hwndParent, WM_CLOSE, 0, 0);
}
+void CMsgDialog::FindFirstEvent()
+{
+ // This finds the first message to display, it works like shit
+ m_hDbEventFirst = db_event_firstUnread(m_hContact);
+
+ DB::ECPTR pCursor(DB::EventsRev(m_hContact, m_hDbEventFirst));
+
+ switch (g_plugin.iLoadHistory) {
+ case LOADHISTORY_COUNT:
+ for (int i = g_plugin.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 = {};
+ if (m_hDbEventFirst == 0)
+ dbei.timestamp = (uint32_t)time(0);
+ else
+ db_event_get(m_hDbEventFirst, &dbei);
+
+ uint32_t firstTime = dbei.timestamp - 60 * g_plugin.nLoadTime;
+ while (MEVENT hPrevEvent = pCursor.FetchNext()) {
+ dbei.cbBlob = 0;
+ db_event_get(hPrevEvent, &dbei);
+ if (dbei.timestamp < firstTime)
+ break;
+ m_hDbEventFirst = hPrevEvent;
+ }
+ break;
+ }
+}
+
void CMsgDialog::NotifyTyping(int mode)
{
if (!m_hContact)
diff --git a/src/core/stdmsg/src/msgs.h b/src/core/stdmsg/src/msgs.h index d9bc5f78dc..f21110e641 100644 --- a/src/core/stdmsg/src/msgs.h +++ b/src/core/stdmsg/src/msgs.h @@ -55,6 +55,7 @@ class CMsgDialog : public CSrmmBaseDialog friend class CTabbedWindow;
typedef CSrmmBaseDialog CSuper;
+ void FindFirstEvent();
void Init(void);
void NotifyTyping(int mode);
void SetButtonsPos(void);
|