Software /
code /
prosody
Comparison
plugins/mod_pubsub/mod_pubsub.lua @ 9045:4336a2b97aba
mod_pubsub: Make generation of notification body into an event to allow extensibility
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 14 Jul 2018 21:34:22 +0200 |
parent | 9044:18cd5102253c |
child | 9100:e01c7d0cbbf4 |
comparison
equal
deleted
inserted
replaced
9044:18cd5102253c | 9045:4336a2b97aba |
---|---|
53 | 53 |
54 local summary; | 54 local summary; |
55 -- Compose a sensible textual representation of at least Atom payloads | 55 -- Compose a sensible textual representation of at least Atom payloads |
56 if item and item.tags[1] then | 56 if item and item.tags[1] then |
57 local payload = item.tags[1]; | 57 local payload = item.tags[1]; |
58 if payload.attr.xmlns == "http://www.w3.org/2005/Atom" then | 58 summary = module:fire_event("pubsub-summary/"..payload.attr.xmlns, { |
59 local title = payload:get_child_text("title"); | 59 kind = kind, node = node, jids = jids, actor = actor, item = item, payload = payload, |
60 summary = payload:get_child_text("summary"); | 60 }); |
61 if not summary and title then | |
62 local author = payload:find("author/name#"); | |
63 summary = title; | |
64 if author then | |
65 summary = author .. " posted " .. summary; | |
66 end | |
67 end | |
68 end | |
69 end | 61 end |
70 | 62 |
71 for jid, options in pairs(jids) do | 63 for jid, options in pairs(jids) do |
72 local new_stanza = st.clone(message); | 64 local new_stanza = st.clone(message); |
73 if summary and type(options) == "table" and options["pubsub#include_body"] then | 65 if summary and type(options) == "table" and options["pubsub#include_body"] then |
79 end | 71 end |
80 | 72 |
81 function is_item_stanza(item) | 73 function is_item_stanza(item) |
82 return st.is_stanza(item) and item.attr.xmlns == xmlns_pubsub and item.name == "item"; | 74 return st.is_stanza(item) and item.attr.xmlns == xmlns_pubsub and item.name == "item"; |
83 end | 75 end |
76 | |
77 module:hook("pubsub-summary/http://www.w3.org/2005/Atom", function (event) | |
78 local payload = event.item; | |
79 local title = payload:get_child_text("title"); | |
80 local summary = payload:get_child_text("summary"); | |
81 if not summary and title then | |
82 local author = payload:find("author/name#"); | |
83 summary = title; | |
84 if author then | |
85 summary = author .. " posted " .. summary; | |
86 end | |
87 end | |
88 return summary; | |
89 end); | |
84 | 90 |
85 module:hook("iq/host/"..xmlns_pubsub..":pubsub", handle_pubsub_iq); | 91 module:hook("iq/host/"..xmlns_pubsub..":pubsub", handle_pubsub_iq); |
86 module:hook("iq/host/"..xmlns_pubsub_owner..":pubsub", handle_pubsub_iq); | 92 module:hook("iq/host/"..xmlns_pubsub_owner..":pubsub", handle_pubsub_iq); |
87 | 93 |
88 local function add_disco_features_from_service(service) --luacheck: ignore 431/service | 94 local function add_disco_features_from_service(service) --luacheck: ignore 431/service |