Mercurial > prosody-modules
comparison mod_default_bookmarks/mod_default_bookmarks.lua @ 3236:73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sat, 18 Aug 2018 17:36:50 +0100 |
parents | 7dbde05b48a9 |
children | 420ebea00cf3 |
comparison
equal
deleted
inserted
replaced
3235:bd8e94ff726b | 3236:73906187f964 |
---|---|
1 -- Prosody IM | 1 -- Prosody IM |
2 -- Copyright (C) 2008-2010 Matthew Wild | 2 -- Copyright (C) 2008-2010 Matthew Wild |
3 -- Copyright (C) 2008-2010 Waqas Hussain | 3 -- Copyright (C) 2008-2010 Waqas Hussain |
4 -- Copyright (C) 2011 Kim Alvefur | 4 -- Copyright (C) 2011 Kim Alvefur |
5 -- Copyright (C) 2018 Emmanuel Gil Peyrot | |
5 -- | 6 -- |
6 -- This project is MIT/X11 licensed. Please see the | 7 -- This project is MIT/X11 licensed. Please see the |
7 -- COPYING file in the source package for more information. | 8 -- COPYING file in the source package for more information. |
8 -- | 9 -- |
9 | 10 |
10 | |
11 local st = require "util.stanza" | 11 local st = require "util.stanza" |
12 | |
13 local dm_load = require "util.datamanager".load | 12 local dm_load = require "util.datamanager".load |
14 local jid_split = require "util.jid".split | 13 local jid_split = require "util.jid".split |
15 | 14 |
16 module:hook("iq/self/jabber:iq:private:query", function(event) | 15 -- COMPAT w/trunk |
17 local origin, stanza = event.origin, event.stanza; | 16 local is_on_trunk = false; |
18 local typ = stanza.attr.type; | 17 local mm = require "core.modulemanager"; |
19 local from = stanza.attr.from; | 18 if mm.get_modules_for_host then |
20 local query = stanza.tags[1]; | 19 if mm.get_modules_for_host(module.host):contains("bookmarks") then |
21 if #query.tags == 1 and typ == "get" then | 20 is_on_trunk = true; |
22 local tag = query.tags[1]; | 21 end |
23 local key = tag.name..":"..tag.attr.xmlns; | 22 end |
24 if key == "storage:storage:bookmarks" then | 23 |
25 local data, err = dm_load(origin.username, origin.host, "private"); | 24 local function get_default_bookmarks(nickname) |
26 if not(data and data[key]) then | 25 local bookmarks = module:get_option("default_bookmarks"); |
27 local bookmarks = module:get_option("default_bookmarks"); | 26 if not bookmarks or #bookmarks == 0 then |
28 if bookmarks and #bookmarks > 0 then | 27 return false; |
29 local reply = st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"}) | 28 end |
30 :tag("storage", { xmlns = "storage:bookmarks" }); | 29 local reply = st.stanza("storage", { xmlns = "storage:bookmarks" }); |
31 local nick = jid_split(from); | 30 local nick = nickname and st.stanza("nick"):text(nickname); |
32 for i=1,#bookmarks do | 31 for _, bookmark in ipairs(bookmarks) do |
33 local bookmark = bookmarks[i]; | 32 if type(bookmark) ~= "table" then -- assume it's only a jid |
34 if type(bookmark) ~= "table" then -- assume it's only a jid | 33 bookmark = { jid = bookmark, name = jid_split(bookmark) }; |
35 bookmark = { jid = bookmark, name = jid_split(bookmark) }; | 34 end |
36 end | 35 reply:tag("conference", { |
37 reply:tag("conference", { | 36 jid = bookmark.jid, |
38 jid = bookmark.jid, | 37 name = bookmark.name, |
39 name = bookmark.name, | 38 autojoin = "1", |
40 autojoin = "1", | 39 }); |
41 }):tag("nick"):text(nick):up():up(); | 40 if nick then |
42 end | 41 reply:add_child(nick):up(); |
43 origin.send(reply); | 42 end |
44 return true; | 43 reply:up(); |
45 end | 44 end |
46 end | 45 return reply; |
46 end | |
47 | |
48 if is_on_trunk then | |
49 local mod_bookmarks = module:depends "bookmarks"; | |
50 local function on_bookmarks_empty(event) | |
51 local session = event.session; | |
52 local bookmarks = get_default_bookmarks(session.username); | |
53 if bookmarks then | |
54 mod_bookmarks.publish_to_pep(session.full_jid, bookmarks); | |
47 end | 55 end |
48 end | 56 end |
49 end, 1); | 57 module:hook("bookmarks/empty", on_bookmarks_empty); |
58 else | |
59 local function on_private_xml_get(event) | |
60 local origin, stanza = event.origin, event.stanza; | |
61 local tag = stanza.tags[1].tags[1]; | |
62 local key = tag.name..":"..tag.attr.xmlns; | |
63 if key ~= "storage:storage:bookmarks" then | |
64 return; | |
65 end | |
66 | |
67 local data, err = dm_load(origin.username, origin.host, "private"); | |
68 if data and data[key] then | |
69 return; | |
70 end | |
71 | |
72 local bookmarks = get_default_bookmarks(origin.username); | |
73 if not bookmarks then | |
74 return; | |
75 end; | |
76 | |
77 local reply = st.reply(stanza):tag("query", { xmlns = "jabber:iq:private" }) | |
78 :add_child(bookmarks); | |
79 origin.send(reply); | |
80 return true; | |
81 end | |
82 module:hook("iq-get/self/jabber:iq:private:query", on_private_xml_get, 1); | |
83 end |