summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2023-08-08 19:36:30 +0300
committerGeorge Hazan <george.hazan@gmail.com>2023-08-08 19:36:30 +0300
commita3ca46d8ea78bc7deab5a1fdbc51ad8a480fff70 (patch)
tree729b9249c73e6273056908de15d700bb029869d7
parent3202c1bcb7e8ea98c75580b4b18f36faad01c2ce (diff)
NewStory: fix for message grouping
-rw-r--r--plugins/NewStory/src/history_array.cpp27
-rw-r--r--plugins/NewStory/src/history_array.h3
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();