diff options
author | George Hazan <george.hazan@gmail.com> | 2023-08-08 19:36:30 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-08-08 19:36:30 +0300 |
commit | a3ca46d8ea78bc7deab5a1fdbc51ad8a480fff70 (patch) | |
tree | 729b9249c73e6273056908de15d700bb029869d7 | |
parent | 3202c1bcb7e8ea98c75580b4b18f36faad01c2ce (diff) |
NewStory: fix for message grouping
-rw-r--r-- | plugins/NewStory/src/history_array.cpp | 27 | ||||
-rw-r--r-- | plugins/NewStory/src/history_array.h | 3 |
2 files changed, 12 insertions, 18 deletions
diff --git a/plugins/NewStory/src/history_array.cpp b/plugins/NewStory/src/history_array.cpp index 6b3f34d4de..6824862726 100644 --- a/plugins/NewStory/src/history_array.cpp +++ b/plugins/NewStory/src/history_array.cpp @@ -60,35 +60,30 @@ ItemData::~ItemData() MTextDestroy(data); } -void ItemData::checkPrev() +ItemData* ItemData::checkPrev(ItemData *pPrev) { - // not set yet - if (m_grouping != (uint8_t)-1) - return; - m_grouping = GROUPING_NONE; - if (!pPrev) - return; + if (!pPrev || !g_plugin.bMsgGrouping) + return this; // we don't group anything but messages - load(false); + if (db_event_get(hEvent, &dbe)) + return this; + if (dbe.eventType != EVENTTYPE_MESSAGE) - return; + return this; - pPrev->load(false); if (pPrev->hContact == hContact && pPrev->dbe.eventType == dbe.eventType && (pPrev->dbe.flags & DBEF_SENT) == (dbe.flags & DBEF_SENT)) { - if (pPrev->m_grouping != GROUPING_ITEM) { + if (pPrev->m_grouping != GROUPING_ITEM) pPrev->m_grouping = GROUPING_HEAD; - pPrev->setText(); - } m_grouping = GROUPING_ITEM; } + return this; } void ItemData::checkCreate(HWND hwnd) { if (data == nullptr) { - checkPrev(); setText(); MTextSetParent(data, hwnd); MTextActivate(data, true); @@ -389,7 +384,7 @@ bool HistoryArray::addEvent(MCONTACT hContact, MEVENT hEvent, int count) auto &p = allocateItem(); p.hContact = hContact; p.hEvent = hEvent; - p.pPrev = pPrev; pPrev = &p; + pPrev = p.checkPrev(pPrev); } return true; @@ -404,7 +399,7 @@ void HistoryArray::addResults(OBJLIST<SearchResult> *pArray) auto &p = allocateItem(); p.hContact = it->hContact; p.hEvent = it->hEvent; - p.pPrev = pPrev; pPrev = &p; + pPrev = p.checkPrev(pPrev); } } diff --git a/plugins/NewStory/src/history_array.h b/plugins/NewStory/src/history_array.h index d7e55433fa..804ebebeb2 100644 --- a/plugins/NewStory/src/history_array.h +++ b/plugins/NewStory/src/history_array.h @@ -26,12 +26,11 @@ struct ItemData wchar_t *wszNick; HANDLE data; - ItemData *pPrev; ItemData(); ~ItemData(); - void checkPrev(); + ItemData* checkPrev(ItemData *pPrev); void checkCreate(HWND hwnd); void setText(); |