Software /
code /
verse
Annotate
plugins/pep.lua @ 500:674daff6c73b
use util.bitcompat from Prosody for bitwise compat layer
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 23 Jun 2023 12:26:43 +0200 |
parent | 470:e690759c5072 |
rev | line source |
---|---|
250 | 1 local verse = require "verse"; |
114
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local xmlns_pubsub_event = xmlns_pubsub.."#event"; |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 function verse.plugins.pep(stream) |
268
06e6c6de6438
plugins.pep: Load disco, since PEP depends on it
Kim Alvefur <zash@zash.se>
parents:
250
diff
changeset
|
7 stream:add_plugin("disco"); |
216
3aac084855e6
plugins.pep: Reuse the pubsub plugin.
Kim Alvefur <zash@zash.se>
parents:
164
diff
changeset
|
8 stream:add_plugin("pubsub"); |
114
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 stream.pep = {}; |
380 | 10 |
216
3aac084855e6
plugins.pep: Reuse the pubsub plugin.
Kim Alvefur <zash@zash.se>
parents:
164
diff
changeset
|
11 stream:hook("pubsub/event", function(event) |
470
e690759c5072
pep: Include item id in event
Matthew Wild <mwild1@gmail.com>
parents:
415
diff
changeset
|
12 return stream:event("pep/"..event.node, { from = event.from, id = event.item.attr.id, item = event.item.tags[1] } ); |
114
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 end); |
380 | 14 |
114
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 function stream:hook_pep(node, callback, priority) |
164
d862093d9f91
plugins.pep: Only add +notify feature if there weren't any handlers for it already
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
16 local handlers = stream.events._handlers["pep/"..node]; |
d862093d9f91
plugins.pep: Only add +notify feature if there weren't any handlers for it already
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
17 if not(handlers) or #handlers == 0 then |
d862093d9f91
plugins.pep: Only add +notify feature if there weren't any handlers for it already
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
18 stream:add_disco_feature(node.."+notify"); |
d862093d9f91
plugins.pep: Only add +notify feature if there weren't any handlers for it already
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
19 end |
114
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 stream:hook("pep/"..node, callback, priority); |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 end |
380 | 22 |
114
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 function stream:unhook_pep(node, callback) |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 stream:unhook("pep/"..node, callback); |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 local handlers = stream.events._handlers["pep/"..node]; |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 if not(handlers) or #handlers == 0 then |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 stream:remove_disco_feature(node.."+notify"); |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 end |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 end |
380 | 30 |
415
37674f8ce263
verse.plugins.pep: Support taking an item id, default to "current"
Kim Alvefur <zash@zash.se>
parents:
380
diff
changeset
|
31 function stream:publish_pep(item, node, id) |
37674f8ce263
verse.plugins.pep: Support taking an item id, default to "current"
Kim Alvefur <zash@zash.se>
parents:
380
diff
changeset
|
32 return stream.pubsub:service(nil):node(node or item.attr.xmlns):publish(id or "current", nil, item) |
114
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 end |
37f5966cff15
verse.plugins.pep: New plugin to add an API for sending and catching PEP events
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 end |