Diff

plugins/mod_pep_plus.lua @ 8306:202b9951b037

mod_pep_plus: Keep track of nodes, and restore them when later
author Kim Alvefur <zash@zash.se>
date Sun, 08 Oct 2017 23:59:13 +0200
parent 8305:ec605946e597
child 8307:94860b5733d3
line wrap: on
line diff
--- a/plugins/mod_pep_plus.lua	Sun Oct 08 23:49:49 2017 +0200
+++ b/plugins/mod_pep_plus.lua	Sun Oct 08 23:59:13 2017 +0200
@@ -22,6 +22,9 @@
 
 local host = module.host;
 
+local known_nodes_map = module:open_store("pep", "map");
+local known_nodes = module:open_store("pep");
+
 function module.save()
 	return { services = services };
 end
@@ -40,6 +43,7 @@
 local function simple_itemstore(username)
 	return function (config, node)
 		module:log("debug", "new simple_itemstore(%q, %q)", username, node);
+		known_nodes_map:set(username, node, true);
 		local archive = module:open_store("pep_"..node, "archive");
 		return lib_pubsub.simple_itemstore(archive, config, username, node, false);
 	end
@@ -186,6 +190,18 @@
 
 		normalize_jid = jid_bare;
 	});
+	local nodes, err = known_nodes:get(username);
+	if nodes then
+		module:log("debug", "Restoring nodes for user %s", username);
+		for node in pairs(nodes) do
+			module:log("debug", "Restoring node %q", node);
+			service:create(node, true);
+		end
+	elseif err then
+		module:log("error", "Could not restore nodes for %s: %s", username, err);
+	else
+		module:log("debug", "No known nodes");
+	end
 	services[username] = service;
 	module:add_item("pep-service", { service = service, jid = user_bare });
 	return service;