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 |