From c6cd894c0b96c7d9cda1560f5e40b1a94ac370f9 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Thu, 8 Dec 2016 18:13:56 +0100
Subject: mod_blocklist: Make the 'false' metadata field a table so we can
 store timestamps and other useful data

---
 plugins/mod_blocklist.lua | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/plugins/mod_blocklist.lua b/plugins/mod_blocklist.lua
index 9083dda4..f0b305d6 100644
--- a/plugins/mod_blocklist.lua
+++ b/plugins/mod_blocklist.lua
@@ -54,7 +54,7 @@ end
 
 -- Migrates from the old mod_privacy storage
 local function migrate_privacy_list(username)
-	local migrated_data = { [false] = "not empty" };
+	local migrated_data = { [false] = { created = os.time(); migrated = "privacy" }};
 	local legacy_data = module:open_store("privacy"):get(username);
 	if legacy_data and legacy_data.lists and legacy_data.default then
 		legacy_data = legacy_data.lists[legacy_data.default];
@@ -160,18 +160,23 @@ local function edit_blocklist(event)
 
 	local blocklist = get_blocklist(username);
 
-	local new_blocklist = {};
+	local new_blocklist = {
+		-- We set the [false] key to someting as a signal not to migrate privacy lists
+		[false] = blocklist[false] or { created = os.time(); };
+	};
+	if type(blocklist[false]) == "table" then
+		new_blocklist[false].modified = os.time();
+	end
 
 	if is_blocking or next(new) then
 		for jid in pairs(blocklist) do
-			new_blocklist[jid] = true;
+			if jid then new_blocklist[jid] = true; end
 		end
 		for jid in pairs(new) do
 			new_blocklist[jid] = is_blocking;
 		end
 		-- else empty the blocklist
 	end
-	new_blocklist[false] = "not empty"; -- In order to avoid doing the migration thing twice
 
 	local ok, err = set_blocklist(username, new_blocklist);
 	if ok then
-- 
cgit v1.2.3