Mercurial > prosody-modules
annotate mod_group_bookmarks/mod_group_bookmarks.lua @ 2494:d300ae5dba87
mod_smacks: Fix some bugs with smacks-ack-delayed event triggering.
The old code had several flaws which are addressed here.
First of all this fixes the if statement guarding the event generation
There where some timing glitches addressed by this commit as well.
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Sun, 12 Feb 2017 21:23:22 +0100 |
parents | 7dbde05b48a9 |
children | 6824a1f3d8c0 |
rev | line source |
---|---|
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
679
diff
changeset
|
4 -- |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local st = require "util.stanza" |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local datamanager = require "util.datamanager" |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local jid, datamanager = require "util.jid", require "util.datamanager"; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local jid_bare, jid_prep, jid_split = jid.bare, jid.prep, jid.split; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local module_host = module:get_host(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local rooms; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 local members; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local bookmarks_file; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 module:add_feature("jabber:iq:private"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 function inject_bookmarks(username, host, data) |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local jid = username.."@"..host; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 data:reset(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 if members[jid] then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 for _, room in ipairs(members[jid]) do |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 data:tag("conference", { |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 name = room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 jid = room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 autojoin = "1"; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 }); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 local nick = rooms[room][jid]; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 if nick then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 data:tag("nick"):text(nick):up(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 data:up(); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 return data; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 module:hook("iq/self/jabber:iq:private:query", function(event) |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 local origin, stanza = event.origin, event.stanza; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 local type = stanza.attr.type; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 local query = stanza.tags[1]; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 if #query.tags == 1 then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 local tag = query.tags[1]; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 local key = tag.name..":"..tag.attr.xmlns; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 local data, err = datamanager.load(origin.username, origin.host, "private"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 if err then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 return true; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 if stanza.attr.type == "get" then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 local data = data and data[key]; |
290
ee416b285802
mod_group_bookmarks: Always ensure bookmarks are injected, even if the user has no bookmarks already stored
Matthew Wild <mwild1@gmail.com>
parents:
289
diff
changeset
|
59 if (not data) and key == "storage:storage:bookmarks" then |
ee416b285802
mod_group_bookmarks: Always ensure bookmarks are injected, even if the user has no bookmarks already stored
Matthew Wild <mwild1@gmail.com>
parents:
289
diff
changeset
|
60 data = st.stanza("storage", { xmlns = "storage:bookmarks" }); |
ee416b285802
mod_group_bookmarks: Always ensure bookmarks are injected, even if the user has no bookmarks already stored
Matthew Wild <mwild1@gmail.com>
parents:
289
diff
changeset
|
61 end |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 if data then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 data = st.deserialize(data); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 if key == "storage:storage:bookmarks" then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 data = inject_bookmarks(origin.username, origin.host, data); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 origin.send(st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"}) |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 :add_child(data)); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 else |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 origin.send(st.reply(stanza):add_child(stanza.tags[1])); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 return true; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 end, 1); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 function module.load() |
679
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
78 bookmarks_file = module:get_option_string("group_bookmarks_file"); |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
79 |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 rooms = { default = {} }; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 members = { }; |
679
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
82 |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
83 if not bookmarks_file then |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
84 module:log("error", "Please specify group_bookmarks_file in your configuration"); |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
85 return; |
dcddd9195098
mod_group_bookmarks: Log error when group_bookmarks_file not specified
Matthew Wild <mwild1@gmail.com>
parents:
290
diff
changeset
|
86 end |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
679
diff
changeset
|
87 |
289
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 local curr_room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 for line in io.lines(bookmarks_file) do |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 if line:match("^%s*%[.-%]%s*$") then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 curr_room = line:match("^%s*%[(.-)%]%s*$"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 if curr_room:match("^%+") then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 curr_room = curr_room:gsub("^%+", ""); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 if not members[false] then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 members[false] = {}; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 members[false][#members[false]+1] = curr_room; -- Is a public group |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 module:log("debug", "New group: %s", tostring(curr_room)); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 rooms[curr_room] = rooms[curr_room] or {}; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 elseif curr_room then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 -- Add JID |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 local entryjid, name = line:match("([^=]*)=?(.*)"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 module:log("debug", "entryjid = '%s', name = '%s'", entryjid, name); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 local jid; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 jid = jid_prep(entryjid:match("%S+")); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 if jid then |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 module:log("debug", "New member of %s: %s", tostring(curr_room), tostring(jid)); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 rooms[curr_room][jid] = name or false; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 members[jid] = members[jid] or {}; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 members[jid][#members[jid]+1] = curr_room; |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 module:log("info", "Group bookmarks loaded successfully"); |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 end |
415034fd38c2
mod_group_bookmarks: Module to inject room bookmarks to user private XML stores
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 |