Mercurial > prosody-modules
annotate mod_default_bookmarks/mod_default_bookmarks.lua @ 4312:33a41503b9e3
Improve UX by providing defaults users expect
author | Seve Ferrer <seve@delape.net> |
---|---|
date | Tue, 22 Dec 2020 11:27:20 +0100 |
parents | 420ebea00cf3 |
children | ee2463fbf794 |
rev | line source |
---|---|
479
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- Prosody IM |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 -- Copyright (C) 2011 Kim Alvefur |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
5 -- Copyright (C) 2018 Emmanuel Gil Peyrot |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1325
diff
changeset
|
6 -- |
479
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 -- This project is MIT/X11 licensed. Please see the |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 -- COPYING file in the source package for more information. |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 -- |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local st = require "util.stanza" |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local dm_load = require "util.datamanager".load |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 local jid_split = require "util.jid".split |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
15 -- COMPAT w/trunk |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
16 local is_on_trunk = false; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
17 local mm = require "core.modulemanager"; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
18 if mm.get_modules_for_host then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
19 if mm.get_modules_for_host(module.host):contains("bookmarks") then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
20 is_on_trunk = true; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
21 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
22 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
23 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
24 local function get_default_bookmarks(nickname) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
25 local bookmarks = module:get_option("default_bookmarks"); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
26 if not bookmarks or #bookmarks == 0 then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
27 return false; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
28 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
29 local reply = st.stanza("storage", { xmlns = "storage:bookmarks" }); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
30 local nick = nickname and st.stanza("nick"):text(nickname); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
31 for _, bookmark in ipairs(bookmarks) do |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
32 if type(bookmark) ~= "table" then -- assume it's only a jid |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
33 bookmark = { jid = bookmark, name = jid_split(bookmark) }; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
34 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
35 reply:tag("conference", { |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
36 jid = bookmark.jid, |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
37 name = bookmark.name, |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
38 autojoin = "1", |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
39 }); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
40 if nick then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
41 reply:add_child(nick):up(); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
42 end |
3237
420ebea00cf3
mod_default_bookmarks: Add support for <password/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3236
diff
changeset
|
43 if bookmark.password then |
420ebea00cf3
mod_default_bookmarks: Add support for <password/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3236
diff
changeset
|
44 reply:tag("password"):text(bookmark.password):up(); |
420ebea00cf3
mod_default_bookmarks: Add support for <password/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3236
diff
changeset
|
45 end |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
46 reply:up(); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
47 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
48 return reply; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
49 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
50 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
51 if is_on_trunk then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
52 local mod_bookmarks = module:depends "bookmarks"; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
53 local function on_bookmarks_empty(event) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
54 local session = event.session; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
55 local bookmarks = get_default_bookmarks(session.username); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
56 if bookmarks then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
57 mod_bookmarks.publish_to_pep(session.full_jid, bookmarks); |
479
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 end |
597c872d691e
mod_default_bookmarks: Serve a list of default bookmarks if the user has nil.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 end |
3236
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
60 module:hook("bookmarks/empty", on_bookmarks_empty); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
61 else |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
62 local function on_private_xml_get(event) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
63 local origin, stanza = event.origin, event.stanza; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
64 local tag = stanza.tags[1].tags[1]; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
65 local key = tag.name..":"..tag.attr.xmlns; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
66 if key ~= "storage:storage:bookmarks" then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
67 return; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
68 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
69 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
70 local data, err = dm_load(origin.username, origin.host, "private"); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
71 if data and data[key] then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
72 return; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
73 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
74 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
75 local bookmarks = get_default_bookmarks(origin.username); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
76 if not bookmarks then |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
77 return; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
78 end; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
79 |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
80 local reply = st.reply(stanza):tag("query", { xmlns = "jabber:iq:private" }) |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
81 :add_child(bookmarks); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
82 origin.send(reply); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
83 return true; |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
84 end |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
85 module:hook("iq-get/self/jabber:iq:private:query", on_private_xml_get, 1); |
73906187f964
mod_default_bookmarks: Add support for trunk’s mod_pep.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
1343
diff
changeset
|
86 end |