summaryrefslogtreecommitdiff
path: root/plugins/MessageState/src/utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MessageState/src/utils.cpp')
-rw-r--r--plugins/MessageState/src/utils.cpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/plugins/MessageState/src/utils.cpp b/plugins/MessageState/src/utils.cpp
index 9dd3110133..683e4f8a98 100644
--- a/plugins/MessageState/src/utils.cpp
+++ b/plugins/MessageState/src/utils.cpp
@@ -1,14 +1,23 @@
#include "stdafx.h"
+static mir_cs csContacts;
+OBJLIST<ContactData> g_arContacts(50, NumericKeySortT);
+
+// always returns an object, creates an empty one if missing
+ContactData* FindContact(MCONTACT hContact)
+{
+ mir_cslock lck(csContacts);
+
+ auto *p = g_arContacts.find((ContactData *)&hContact);
+ if (p == nullptr)
+ g_arContacts.insert(p = new ContactData(hContact));
+
+ return p;
+}
+
time_t GetLastSentMessageTime(MCONTACT hContact)
{
- for (MEVENT hDbEvent = db_event_last(hContact); hDbEvent; hDbEvent = db_event_prev(hContact, hDbEvent)) {
- DBEVENTINFO dbei = {};
- db_event_get(hDbEvent, &dbei);
- if (dbei.flags & DBEF_SENT)
- return dbei.timestamp;
- }
- return -1;
+ return FindContact(hContact)->dwLastSentTime;
}
bool HasUnread(MCONTACT hContact)
@@ -16,8 +25,9 @@ bool HasUnread(MCONTACT hContact)
if (!CheckProtoSupport(Proto_GetBaseAccountName(hContact)))
return false;
- if (GetLastSentMessageTime(hContact) <= g_plugin.getDword(hContact, DBKEY_MESSAGE_READ_TIME, 0))
+ auto *p = FindContact(hContact);
+ if (p->dwLastSentTime <= p->dwLastReadTime)
return false;
- return g_plugin.getDword(hContact, DBKEY_MESSAGE_READ_TIME, 0) != 0;
+ return p->dwLastReadTime != 0;
}