Mercurial > prosody-modules
annotate mod_map/mod_map.lua @ 5571:ca3c2d11823c
mod_pubsub_feeds: Track latest timestamp seen in feeds instead of last poll
This should ensure that an entry that has a publish timestmap after the
previously oldest post, but before the time of the last poll check, is
published to the node.
Previously if an entry would be skipped if it was published at 13:00
with a timestamp of 12:30, where the last poll was at 12:45.
For feeds that lack a timestamp, it now looks for the first post that is
not published, assuming that the feed is in reverse chronological order,
then iterates back up from there.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 25 Jun 2023 16:27:55 +0200 |
| parents | d0c2f001735f |
| children |
| rev | line source |
|---|---|
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 local st = require "util.stanza"; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 local jid_bare = require "util.jid".bare; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 local rsm = require "util.rsm"; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 local dataform = require "util.dataforms".new; |
|
3651
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
6 local datetime = require "util.datetime".datetime; |
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local archive = module:open_store("archive", "archive"); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local query_form = dataform { |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 { name = "with"; type = "jid-single"; }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 { name = "start"; type = "text-single" }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 { name = "end"; type = "text-single"; }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 if not archive.summary then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 module:log("error", "The archive:summary() API is not supported by %s", archive._provided_by); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 return |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 module:hook("iq-get/self/xmpp:prosody.im/mod_map:summary", function(event) |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 local origin, stanza = event.origin, event.stanza; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 local query = stanza.tags[1]; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 -- Search query parameters |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 local qwith, qstart, qend; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 local form = query:get_child("x", "jabber:x:data"); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 if form then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 local err; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 form, err = query_form:data(form); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 if err then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 return true; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 qwith, qstart, qend = form["with"], form["start"], form["end"]; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 qwith = qwith and jid_bare(qwith); -- dataforms does jidprep |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 local qset = rsm.get(query); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 local qmax = qset and qset.max; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 local before, after = qset and qset.before, qset and qset.after; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 if type(before) ~= "string" then before = nil; end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 local summary = archive:summary(origin.username, { |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 start = qstart; ["end"] = qend; -- Time range |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 with = qwith; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 limit = qmax; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 before = before; after = after; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 }); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 if not summary then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 module:send(st.error_reply(stanza, "wait", "internal-server-error")); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 return true; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 local reply = st.reply(stanza); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 reply:tag("summary", { xmlns = "xmpp:prosody.im/mod_map" }); |
|
3650
30743ae1fe1a
mod_map: Update for new API in prosody 1e2b444acb72
Kim Alvefur <zash@zash.se>
parents:
3496
diff
changeset
|
58 for jid, count in pairs(summary.counts) do |
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 reply:tag("item", { jid = jid }); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 if type(count) == "number" then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 reply:text_tag("count", ("%d"):format(count)); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 end |
|
3651
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
63 if summary.earliest and summary.earliest[jid] then |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
64 reply:text_tag("start", datetime(summary.earliest[jid])); |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
65 end |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
66 if summary.latest and summary.latest[jid] then |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
67 reply:text_tag("end", datetime(summary.latest[jid])); |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
68 end |
|
3652
d0c2f001735f
mod_map: Include last body text
Kim Alvefur <zash@zash.se>
parents:
3651
diff
changeset
|
69 if summary.body and summary.body[jid] then |
|
d0c2f001735f
mod_map: Include last body text
Kim Alvefur <zash@zash.se>
parents:
3651
diff
changeset
|
70 reply:text_tag("body", summary.body[jid]); |
|
d0c2f001735f
mod_map: Include last body text
Kim Alvefur <zash@zash.se>
parents:
3651
diff
changeset
|
71 end |
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 reply:up(); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 module:send(reply); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 return true; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 end); |
