Software /
code /
prosody
Comparison
plugins/mod_pep.lua @ 1401:a3ce55c1e43a
mod_pep: Remove data when a user disables a node
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 24 Jun 2009 19:38:28 +0500 |
parent | 1400:cbbb4f4fed68 |
child | 1402:34723bbd5acb |
comparison
equal
deleted
inserted
replaced
1400:cbbb4f4fed68 | 1401:a3ce55c1e43a |
---|---|
4 local st = require "util.stanza"; | 4 local st = require "util.stanza"; |
5 local hosts = hosts; | 5 local hosts = hosts; |
6 local user_exists = require "core.usermanager".user_exists; | 6 local user_exists = require "core.usermanager".user_exists; |
7 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; | 7 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; |
8 local pairs, ipairs = pairs, ipairs; | 8 local pairs, ipairs = pairs, ipairs; |
9 local next = next; | |
9 local load_roster = require "core.rostermanager".load_roster; | 10 local load_roster = require "core.rostermanager".load_roster; |
10 | 11 |
11 local data = {}; | 12 local data = {}; |
12 local recipients = {}; | 13 local recipients = {}; |
13 | 14 |
14 module:add_identity("pubsub", "pep"); | 15 module:add_identity("pubsub", "pep"); |
15 module:add_feature("http://jabber.org/protocol/pubsub#publish"); | 16 module:add_feature("http://jabber.org/protocol/pubsub#publish"); |
16 | 17 |
17 local function publish(session, node, item) | 18 local function publish(session, node, item) |
19 local disable = #item.tags ~= 1 or #item.tags[1].tags == 0; | |
18 local stanza = st.message({from=session.full_jid, type='headline'}) | 20 local stanza = st.message({from=session.full_jid, type='headline'}) |
19 :tag('event', {xmlns='http://jabber.org/protocol/pubsub#event'}) | 21 :tag('event', {xmlns='http://jabber.org/protocol/pubsub#event'}) |
20 :tag('items', {node=node}) | 22 :tag('items', {node=node}) |
21 :add_child(item) | 23 :add_child(item) |
22 :up() | 24 :up() |
23 :up(); | 25 :up(); |
24 | 26 |
25 local bare = session.username..'@'..session.host; | 27 local bare = session.username..'@'..session.host; |
26 -- store for the future | 28 -- store for the future |
27 local user_data = data[bare]; | 29 local user_data = data[bare]; |
28 if not user_data then user_data = {}; data[bare] = user_data; end | 30 if disable then |
29 user_data[node] = stanza; | 31 if user_data then user_data[node] = nil; end |
32 if not next(user_data) then data[bare] = nil; end | |
33 else | |
34 if not user_data then user_data = {}; data[bare] = user_data; end | |
35 user_data[node] = stanza; | |
36 end | |
30 | 37 |
31 -- broadcast to resources | 38 -- broadcast to resources |
32 stanza.attr.to = bare; | 39 stanza.attr.to = bare; |
33 core_route_stanza(session, stanza); | 40 core_route_stanza(session, stanza); |
34 | 41 |