mod_storage_*: Also include timestmap of first message in :summary API
authorKim Alvefur <zash@zash.se>
Fri, 23 Aug 2019 01:15:44 +0200
changeset 10226 51f145094648
parent 10225 068692cb9e78
child 10227 d185c4961ee0
mod_storage_*: Also include timestmap of first message in :summary API For completeness along with most recent timestamp. Might be nice to be able to order by oldest unread message.
plugins/mod_storage_internal.lua
plugins/mod_storage_memory.lua
plugins/mod_storage_sql.lua
--- a/plugins/mod_storage_internal.lua	Fri Aug 23 01:10:27 2019 +0200
+++ b/plugins/mod_storage_internal.lua	Fri Aug 23 01:15:44 2019 +0200
@@ -218,13 +218,18 @@
 	local iter, err = self:find(username, query)
 	if not iter then return iter, err; end
 	local counts = {};
+	local earliest = {};
 	local latest = {};
 	for _, _, when, with in iter do
 		counts[with] = (counts[with] or 0) + 1;
+		if earliest[with] == nil then
+			earliest[with] = when;
+		end
 		latest[with] = when;
 	end
 	return {
 		counts = counts;
+		earliest = earliest;
 		latest = latest;
 	};
 end
--- a/plugins/mod_storage_memory.lua	Fri Aug 23 01:10:27 2019 +0200
+++ b/plugins/mod_storage_memory.lua	Fri Aug 23 01:15:44 2019 +0200
@@ -171,13 +171,18 @@
 	local iter, err = self:find(username, query)
 	if not iter then return iter, err; end
 	local counts = {};
+	local earliest = {};
 	local latest = {};
 	for _, _, when, with in iter do
 		counts[with] = (counts[with] or 0) + 1;
+		if earliest[with] == nil then
+			earliest[with] = when;
+		end
 		latest[with] = when;
 	end
 	return {
 		counts = counts;
+		earliest = earliest;
 		latest = latest;
 	};
 end
--- a/plugins/mod_storage_sql.lua	Fri Aug 23 01:10:27 2019 +0200
+++ b/plugins/mod_storage_sql.lua	Fri Aug 23 01:15:44 2019 +0200
@@ -424,7 +424,7 @@
 	local user,store = username,self.store;
 	local ok, result = engine:transaction(function()
 		local sql_query = [[
-		SELECT DISTINCT "with", COUNT(*), MAX("when")
+		SELECT DISTINCT "with", COUNT(*), MIN("when"), MAX("when")
 		FROM "prosodyarchive"
 		WHERE %s
 		GROUP BY "with"
@@ -447,14 +447,16 @@
 	end);
 	if not ok then return ok, result end
 	local counts = {};
-	local latest = {};
+	local earliest, latest = {}, {};
 	for row in result do
 		local with, count = row[1], row[2];
 		counts[with] = count;
-		latest[with] = row[3];
+		earliest[with] = row[3];
+		latest[with] = row[4];
 	end
 	return {
 		counts = counts;
+		earliest = earliest;
 		latest = latest;
 	};
 end