diff -r 47fb4f36dacd -r 3e4d15ae2133 mod_default_bookmarks/mod_default_bookmarks.lua --- a/mod_default_bookmarks/mod_default_bookmarks.lua Tue Jan 20 11:02:14 2015 +0000 +++ b/mod_default_bookmarks/mod_default_bookmarks.lua Sun Jan 25 13:04:02 2015 +0100 @@ -13,37 +13,34 @@ local dm_load = require "util.datamanager".load local jid_split = require "util.jid".split -module:hook("iq/self/jabber:iq:private:query", function(event) +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) local origin, stanza = event.origin, event.stanza; - local typ = stanza.attr.type; local from = stanza.attr.from; - 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 + 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) }; 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);