util.pubsub: Restore subscription index from stored data (fixes #1281)

This commit is contained in:
Kim Alvefur 2018-12-29 21:47:51 +01:00
parent 67a3bf56f3
commit 9f19a48ee2
2 changed files with 44 additions and 0 deletions

View file

@ -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);

View file

@ -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