plugins/pep.lua

changeset 216
3aac084855e6
parent 164
d862093d9f91
child 232
5b49de3aa0f3
equal deleted inserted replaced
215:f86e0b0a0be3 216:3aac084855e6
1 1
2 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; 2 local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
3 local xmlns_pubsub_event = xmlns_pubsub.."#event"; 3 local xmlns_pubsub_event = xmlns_pubsub.."#event";
4 4
5 function verse.plugins.pep(stream) 5 function verse.plugins.pep(stream)
6 stream:add_plugin("pubsub");
6 stream.pep = {}; 7 stream.pep = {};
7 8
8 stream:hook("message", function (message) 9 stream:hook("pubsub/event", function(event)
9 local event = message:get_child("event", xmlns_pubsub_event); 10 return stream:event("pep/"..event.node, { from = event.from, item = event.item[1] } );
10 if not event then return; end
11 local items = event:get_child("items");
12 if not items then return; end
13 local node = items.attr.node;
14 for item in items:childtags() do
15 if item.name == "item" and item.attr.xmlns == xmlns_pubsub_event then
16 stream:event("pep/"..node, {
17 from = message.attr.from,
18 item = item.tags[1],
19 });
20 end
21 end
22 end); 11 end);
23 12
24 function stream:hook_pep(node, callback, priority) 13 function stream:hook_pep(node, callback, priority)
25 local handlers = stream.events._handlers["pep/"..node]; 14 local handlers = stream.events._handlers["pep/"..node];
26 if not(handlers) or #handlers == 0 then 15 if not(handlers) or #handlers == 0 then
36 stream:remove_disco_feature(node.."+notify"); 25 stream:remove_disco_feature(node.."+notify");
37 end 26 end
38 end 27 end
39 28
40 function stream:publish_pep(item, node) 29 function stream:publish_pep(item, node)
41 local publish = verse.iq({ type = "set" }) 30 return stream.pubsub:publish(nil, node or item.attr.xmlns, nil, item)
42 :tag("pubsub", { xmlns = xmlns_pubsub })
43 :tag("publish", { node = node or item.attr.xmlns })
44 :tag("item")
45 :add_child(item);
46 return stream:send_iq(publish);
47 end 31 end
48 end 32 end

mercurial