Comparison

plugins/mod_storage_sql.lua @ 10221:068692cb9e78

mod_storage_*: Include timestamp of latest message in :summary API Clients may want to show a list of conversations ordered by how timestamp of most recent message. The counts allow a badge with unread message counter.
author Kim Alvefur <zash@zash.se>
date Fri, 23 Aug 2019 01:10:27 +0200
parent 10220:1e2b444acb72
child 10222:51f145094648
comparison
equal deleted inserted replaced
10220:1e2b444acb72 10221:068692cb9e78
422 function archive_store:summary(username, query) 422 function archive_store:summary(username, query)
423 query = query or {}; 423 query = query or {};
424 local user,store = username,self.store; 424 local user,store = username,self.store;
425 local ok, result = engine:transaction(function() 425 local ok, result = engine:transaction(function()
426 local sql_query = [[ 426 local sql_query = [[
427 SELECT DISTINCT "with", COUNT(*) 427 SELECT DISTINCT "with", COUNT(*), MAX("when")
428 FROM "prosodyarchive" 428 FROM "prosodyarchive"
429 WHERE %s 429 WHERE %s
430 GROUP BY "with" 430 GROUP BY "with"
431 ORDER BY "sort_id" %s%s; 431 ORDER BY "sort_id" %s%s;
432 ]]; 432 ]];
445 and "DESC" or "ASC", query.limit and " LIMIT ?" or ""); 445 and "DESC" or "ASC", query.limit and " LIMIT ?" or "");
446 return engine:select(sql_query, unpack(args)); 446 return engine:select(sql_query, unpack(args));
447 end); 447 end);
448 if not ok then return ok, result end 448 if not ok then return ok, result end
449 local counts = {}; 449 local counts = {};
450 local latest = {};
450 for row in result do 451 for row in result do
451 local with, count = row[1], row[2]; 452 local with, count = row[1], row[2];
452 counts[with] = count; 453 counts[with] = count;
454 latest[with] = row[3];
453 end 455 end
454 return { 456 return {
455 counts = counts; 457 counts = counts;
458 latest = latest;
456 }; 459 };
457 end 460 end
458 461
459 function archive_store:delete(username, query) 462 function archive_store:delete(username, query)
460 query = query or {}; 463 query = query or {};