diff mod_default_bookmarks/mod_default_bookmarks.lua @ 1325:b21236b6b8d8

Backed out changeset 853a382c9bd6
author Kim Alvefur <zash@zash.se>
date Fri, 28 Feb 2014 15:37:55 +0100
parents 853a382c9bd6
children 7dbde05b48a9
line wrap: on
line diff
--- a/mod_default_bookmarks/mod_default_bookmarks.lua	Fri Feb 28 15:36:06 2014 +0100
+++ b/mod_default_bookmarks/mod_default_bookmarks.lua	Fri Feb 28 15:37:55 2014 +0100
@@ -13,34 +13,37 @@
 local dm_load = require "util.datamanager".load
 local jid_split = require "util.jid".split
 
-local private_bookmarks_ns = "storage:storage:bookmarks";
-
-local bookmarks = module:get_option("default_bookmarks");
-
-module:hook("iq-get/self/jabber:iq:private:query", function(event)
+module:hook("iq/self/jabber:iq:private:query", function(event)
 	local origin, stanza = event.origin, event.stanza;
+	local typ = stanza.attr.type;
 	local from = stanza.attr.from;
-	if not stanza.tags[1]:get_child("storage", "storage:bookmarks") then return end
-	local data, err = dm_load(origin.username, origin.host, "private");
-	if data and data[private_bookmarks_ns] then return end
-
-	local reply = st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"})
-		:tag("storage", { xmlns = "storage:bookmarks" });
-
-	local nick = jid_split(from);
-
-	local bookmark;
-	for i=1,#bookmarks do
-		bookmark = bookmarks[i];
-		if type(bookmark) ~= "table" then -- assume it's only a jid
-			bookmark = { jid = bookmark, name = jid_split(bookmark) };
+	local query = stanza.tags[1];
+	if #query.tags == 1 and typ == "get" then
+		local tag = query.tags[1];
+		local key = tag.name..":"..tag.attr.xmlns;
+		if key == "storage:storage:bookmarks" then
+			local data, err = dm_load(origin.username, origin.host, "private");
+			if not(data and data[key]) then
+				local bookmarks = module:get_option("default_bookmarks");
+				if bookmarks and #bookmarks > 0 then
+					local reply = st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"})
+						:tag("storage", { xmlns = "storage:bookmarks" });
+					local nick = jid_split(from);
+					for i=1,#bookmarks do
+						local bookmark = bookmarks[i];
+						if type(bookmark) ~= "table" then -- assume it's only a jid
+							bookmark = { jid = bookmark, name = jid_split(bookmark) };
+						end
+						reply:tag("conference", {
+							jid = bookmark.jid,
+							name = bookmark.name,
+							autojoin = "1",
+						}):tag("nick"):text(nick):up():up();
+					end
+					origin.send(reply);
+					return true;
+				end
+			end
 		end
-		reply:tag("conference", {
-			jid = bookmark.jid,
-			name = bookmark.name,
-			autojoin = "1",
-		}):tag("nick"):text(nick):up():up();
 	end
-	origin.send(reply);
-	return true;
 end, 1);