5 |
5 |
6 function verse.plugins.pep(stream) |
6 function verse.plugins.pep(stream) |
7 stream:add_plugin("disco"); |
7 stream:add_plugin("disco"); |
8 stream:add_plugin("pubsub"); |
8 stream:add_plugin("pubsub"); |
9 stream.pep = {}; |
9 stream.pep = {}; |
10 |
10 |
11 stream:hook("pubsub/event", function(event) |
11 stream:hook("pubsub/event", function(event) |
12 return stream:event("pep/"..event.node, { from = event.from, item = event.item.tags[1] } ); |
12 return stream:event("pep/"..event.node, { from = event.from, item = event.item.tags[1] } ); |
13 end); |
13 end); |
14 |
14 |
15 function stream:hook_pep(node, callback, priority) |
15 function stream:hook_pep(node, callback, priority) |
16 local handlers = stream.events._handlers["pep/"..node]; |
16 local handlers = stream.events._handlers["pep/"..node]; |
17 if not(handlers) or #handlers == 0 then |
17 if not(handlers) or #handlers == 0 then |
18 stream:add_disco_feature(node.."+notify"); |
18 stream:add_disco_feature(node.."+notify"); |
19 end |
19 end |
20 stream:hook("pep/"..node, callback, priority); |
20 stream:hook("pep/"..node, callback, priority); |
21 end |
21 end |
22 |
22 |
23 function stream:unhook_pep(node, callback) |
23 function stream:unhook_pep(node, callback) |
24 stream:unhook("pep/"..node, callback); |
24 stream:unhook("pep/"..node, callback); |
25 local handlers = stream.events._handlers["pep/"..node]; |
25 local handlers = stream.events._handlers["pep/"..node]; |
26 if not(handlers) or #handlers == 0 then |
26 if not(handlers) or #handlers == 0 then |
27 stream:remove_disco_feature(node.."+notify"); |
27 stream:remove_disco_feature(node.."+notify"); |
28 end |
28 end |
29 end |
29 end |
30 |
30 |
31 function stream:publish_pep(item, node) |
31 function stream:publish_pep(item, node) |
32 return stream.pubsub:service(nil):node(node or item.attr.xmlns):publish(nil, nil, item) |
32 return stream.pubsub:service(nil):node(node or item.attr.xmlns):publish(nil, nil, item) |
33 end |
33 end |
34 end |
34 end |