diff options
author | Kim Alvefur <zash@zash.se> | 2018-12-29 21:49:32 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2018-12-29 21:49:32 +0100 |
commit | e23c17c3a040717e97287b3ea525002f1b58ffcd (patch) | |
tree | 498e285c672879ef0fb570aa419d07e536d58fb4 | |
parent | 5eb327274aa1ab27ec45b49e419943c264bd237d (diff) | |
parent | 9f19a48ee2c20e4269f3e3c53a9330bd25f48621 (diff) | |
download | prosody-e23c17c3a040717e97287b3ea525002f1b58ffcd.tar.gz prosody-e23c17c3a040717e97287b3ea525002f1b58ffcd.zip |
Merge 0.11->trunk
-rw-r--r-- | spec/util_pubsub_spec.lua | 30 | ||||
-rw-r--r-- | util/pubsub.lua | 14 |
2 files changed, 44 insertions, 0 deletions
diff --git a/spec/util_pubsub_spec.lua b/spec/util_pubsub_spec.lua index c44832f7..6386100b 100644 --- a/spec/util_pubsub_spec.lua +++ b/spec/util_pubsub_spec.lua @@ -375,4 +375,34 @@ describe("util.pubsub", function () end); end); end); + + describe("restoring data from nodestore", function () + local nodestore = { + data = { + test = { + name = "test"; + config = {}; + affiliations = {}; + subscribers = { + ["someone"] = true; + }; + } + } + }; + function nodestore:users() + return pairs(self.data) + end + function nodestore:get(key) + return self.data[key]; + end + local service = pubsub.new({ + nodestore = nodestore; + }); + it("subscriptions", function () + local ok, ret = service:get_subscriptions(nil, true, nil) + assert.is_true(ok); + assert.same({ { node = "test", jid = "someone", subscription = true, } }, ret); + end); + end); + end); diff --git a/util/pubsub.lua b/util/pubsub.lua index fafae50a..47e526a7 100644 --- a/util/pubsub.lua +++ b/util/pubsub.lua @@ -177,6 +177,20 @@ local function new(config) for node_name in config.nodestore:users() do service.nodes[node_name] = load_node_from_store(service, node_name); service.data[node_name] = config.itemstore(service.nodes[node_name].config, node_name); + + for jid in pairs(service.nodes[node_name].subscribers) do + local normal_jid = service.config.normalize_jid(jid); + local subs = service.subscriptions[normal_jid]; + if subs then + if not subs[jid] then + subs[jid] = { [node_name] = true }; + else + subs[jid][node_name] = true; + end + else + service.subscriptions[normal_jid] = { [jid] = { [node_name] = true } }; + end + end end end |