Software / code / prosody
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 {}; |