summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-06-17 19:26:25 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-06-17 19:26:25 +0300
commit2d76859d808f2f3576d0a1784c8350752f31da37 (patch)
tree432fb2d717502a82c8a419fab6259f3b8e8ccfae /plugins
parent8a0b58acdb668cb469bcce87052d20b42f0ead7c (diff)
fix for a last message time storing
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Clist_modern/src/modern_clc.cpp3
-rw-r--r--plugins/Clist_modern/src/modern_clistsettings.cpp7
-rw-r--r--plugins/Clist_modern/src/modern_contact.cpp11
-rw-r--r--plugins/Clist_modern/src/modern_global_structure.h13
4 files changed, 22 insertions, 12 deletions
diff --git a/plugins/Clist_modern/src/modern_clc.cpp b/plugins/Clist_modern/src/modern_clc.cpp
index 828ee36779..622deee541 100644
--- a/plugins/Clist_modern/src/modern_clc.cpp
+++ b/plugins/Clist_modern/src/modern_clc.cpp
@@ -164,7 +164,8 @@ static int clcHookDbEventAdded(WPARAM hContact, LPARAM hDbEvent)
ClcCacheEntry *pdnce = Clist_GetCacheEntry(hContact);
if (pdnce) {
pdnce->dwLastMsgTime = dbei.timestamp;
- Clist_Broadcast(CLM_AUTOREBUILD, hContact, 0);
+ if (g_CluiData.hasSort(SORTBY_LASTMSG))
+ Clist_Broadcast(CLM_AUTOREBUILD, hContact, 0);
}
}
}
diff --git a/plugins/Clist_modern/src/modern_clistsettings.cpp b/plugins/Clist_modern/src/modern_clistsettings.cpp
index 89fdb63d6c..2a91f698a9 100644
--- a/plugins/Clist_modern/src/modern_clistsettings.cpp
+++ b/plugins/Clist_modern/src/modern_clistsettings.cpp
@@ -63,11 +63,8 @@ void cliCheckCacheItem(ClcCacheEntry *pdnce)
pdnce->m_iStatus = GetStatusForContact(pdnce->hContact, pdnce->szProto);
// this variable isn't filled inside cliCreateCacheItem() because the filter could be changed dynamically
- if (pdnce->dwLastMsgTime == -1 && g_CluiData.bFilterEffective & (CLVM_FILTER_LASTMSG | CLVM_FILTER_LASTMSG_NEWERTHAN | CLVM_FILTER_LASTMSG_OLDERTHAN)) {
- pdnce->dwLastMsgTime = g_plugin.getDword(pdnce->hContact, "mf_lastmsg");
- if (pdnce->dwLastMsgTime == 0)
- pdnce->dwLastMsgTime = CompareContacts2_getLMTime(pdnce->hContact);
- }
+ if (pdnce->dwLastMsgTime == -1 && g_CluiData.bFilterEffective & (CLVM_FILTER_LASTMSG | CLVM_FILTER_LASTMSG_NEWERTHAN | CLVM_FILTER_LASTMSG_OLDERTHAN))
+ pdnce->dwLastMsgTime = CompareContacts2_getLMTime(pdnce->hContact);
corecli.pfnCheckCacheItem(pdnce);
}
diff --git a/plugins/Clist_modern/src/modern_contact.cpp b/plugins/Clist_modern/src/modern_contact.cpp
index eb4285f2eb..2654b00063 100644
--- a/plugins/Clist_modern/src/modern_contact.cpp
+++ b/plugins/Clist_modern/src/modern_contact.cpp
@@ -58,13 +58,16 @@ static int GetStatusModeOrdering(int statusMode)
DWORD CompareContacts2_getLMTime(MCONTACT hContact)
{
- MEVENT hDbEvent = db_event_last(hContact);
- while (hDbEvent) {
+ DWORD ret = g_plugin.getDword(hContact, "mf_lastmsg");
+ if (ret != 0)
+ return ret;
+
+ DB::ECPTR pCursor(DB::EventsRev(hContact));
+ while (MEVENT hDbEvent = pCursor.FetchNext()) {
DBEVENTINFO dbei = {};
db_event_get(hDbEvent, &dbei);
- if (dbei.eventType == EVENTTYPE_MESSAGE && !(dbei.flags & DBEF_SENT))
+ if ((dbei.eventType == EVENTTYPE_MESSAGE || dbei.eventType == EVENTTYPE_FILE) && !(dbei.flags & DBEF_SENT))
return dbei.timestamp;
- hDbEvent = db_event_prev(hContact, hDbEvent);
}
return 0;
}
diff --git a/plugins/Clist_modern/src/modern_global_structure.h b/plugins/Clist_modern/src/modern_global_structure.h
index 03d45eef0c..ba134cdaae 100644
--- a/plugins/Clist_modern/src/modern_global_structure.h
+++ b/plugins/Clist_modern/src/modern_global_structure.h
@@ -3,7 +3,7 @@
#ifndef modern_global_structure_h__
#define modern_global_structure_h__
-typedef struct tagCLUIDATA
+struct CLUIDATA
{
/************************************
** Global variables **
@@ -75,7 +75,16 @@ typedef struct tagCLUIDATA
HANDLE hEventSkinServicesCreated;
int nGapBetweenTitlebar;
-} CLUIDATA;
+
+ __inline bool hasSort(int order) const
+ {
+ for (auto &it : bSortByOrder)
+ if (it == order)
+ return true;
+
+ return false;
+ }
+};
EXTERN_C CLUIDATA g_CluiData;