author | Kim Alvefur <zash@zash.se> |
Fri, 23 Aug 2019 01:15:44 +0200 | |
changeset 10226 | 51f145094648 |
parent 10225 | 068692cb9e78 |
child 10843 | 018acdaf374f |
permissions | -rw-r--r-- |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 |
local serialize = require "util.serialization".serialize; |
9538
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
2 |
local array = require "util.array"; |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 |
local envload = require "util.envload".envload; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
local st = require "util.stanza"; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
local is_stanza = st.is_stanza or function (s) return getmetatable(s) == st.stanza_mt end |
9842
40ed04014b97
mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents:
9836
diff
changeset
|
6 |
local new_id = require "util.id".medium; |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {}); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
|
9891
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
11 |
local archive_item_limit = module:get_option_number("storage_archive_item_limit", 1000); |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
12 |
|
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 |
local memory = setmetatable({}, { |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
__index = function(t, k) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
local store = module:shared(k) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 |
t[k] = store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
return store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
}); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
local function NULL() return nil end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 |
local function _purge_store(self, username) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
self.store[username or NULL] = nil; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 |
return true; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 |
|
9885
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
28 |
local function _users(self) |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
29 |
return next, self.store, nil; |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
30 |
end |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
31 |
|
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
local keyval_store = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 |
keyval_store.__index = keyval_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
function keyval_store:get(username) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 |
return (self.store[username or NULL] or NULL)(); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 |
function keyval_store:set(username, data) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 |
if data ~= nil then |
9471
bd5e4485a245
mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents:
9343
diff
changeset
|
41 |
data = envload("return "..serialize(data), "=(data)", {}); |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 |
self.store[username or NULL] = data; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 |
return true; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 |
keyval_store.purge = _purge_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
|
9885
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
49 |
keyval_store.users = _users; |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
50 |
|
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 |
local archive_store = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 |
archive_store.__index = archive_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 |
|
9885
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
54 |
archive_store.users = _users; |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9842
diff
changeset
|
55 |
|
9891
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
56 |
archive_store.caps = { |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
57 |
total = true; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
58 |
quota = archive_item_limit; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
59 |
truncate = true; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
60 |
}; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
61 |
|
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 |
function archive_store:append(username, key, value, when, with) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 |
if is_stanza(value) then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 |
value = st.preserialize(value); |
9471
bd5e4485a245
mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents:
9343
diff
changeset
|
65 |
value = envload("return xml"..serialize(value), "=(stanza)", { xml = st.deserialize }) |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 |
else |
9471
bd5e4485a245
mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents:
9343
diff
changeset
|
67 |
value = envload("return "..serialize(value), "=(data)", {}); |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 |
local a = self.store[username or NULL]; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 |
if not a then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 |
a = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 |
self.store[username or NULL] = a; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 |
local v = { key = key, when = when, with = with, value = value }; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 |
if not key then |
9842
40ed04014b97
mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents:
9836
diff
changeset
|
76 |
key = new_id(); |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 |
v.key = key; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 |
if a[key] then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 |
table.remove(a, a[key]); |
9891
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
81 |
elseif #a >= archive_item_limit then |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9886
diff
changeset
|
82 |
return nil, "quota-limit"; |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 |
end |
9537
b301f7edf346
mod_storage_memory: Fix overwriting old keys
Kim Alvefur <zash@zash.se>
parents:
9536
diff
changeset
|
84 |
local i = #a+1; |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 |
a[i] = v; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 |
a[key] = i; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 |
return key; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 |
|
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
90 |
function archive_store:find(username, query) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
91 |
local items = self.store[username or NULL]; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
92 |
if not items then |
10001
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
93 |
if query then |
10027
f6959fe81a1d
mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
94 |
if query.before or query.after then |
f6959fe81a1d
mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
95 |
return nil, "item-not-found"; |
f6959fe81a1d
mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
96 |
end |
10001
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
97 |
if query.total then |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
98 |
return function () end, 0; |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
99 |
end |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
100 |
end |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
101 |
return function () end; |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
102 |
end |
10001
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
103 |
local count = nil; |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
104 |
local i = 0; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
105 |
if query then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
106 |
items = array():append(items); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
107 |
if query.key then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
108 |
items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
109 |
return item.key == query.key; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
110 |
end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
111 |
end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
112 |
if query.with then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
113 |
items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
114 |
return item.with == query.with; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
115 |
end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
116 |
end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
117 |
if query.start then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
118 |
items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
119 |
return item.when >= query.start; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
120 |
end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
121 |
end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
122 |
if query["end"] then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
123 |
items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
124 |
return item.when <= query["end"]; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
125 |
end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
126 |
end |
10001
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
127 |
if query.total then |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
128 |
count = #items; |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
129 |
end |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
130 |
if query.reverse then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
131 |
items:reverse(); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
132 |
if query.before then |
10023
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
133 |
local found = false; |
10001
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
134 |
for j = 1, #items do |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
135 |
if (items[j].key or tostring(j)) == query.before then |
10023
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
136 |
found = true; |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
137 |
i = j; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
138 |
break; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
139 |
end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
140 |
end |
10023
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
141 |
if not found then |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
142 |
return nil, "item-not-found"; |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
143 |
end |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
144 |
end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
145 |
elseif query.after then |
10023
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
146 |
local found = false; |
10001
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9910
diff
changeset
|
147 |
for j = 1, #items do |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
148 |
if (items[j].key or tostring(j)) == query.after then |
10023
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
149 |
found = true; |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
150 |
i = j; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
151 |
break; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
152 |
end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
153 |
end |
10023
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
154 |
if not found then |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
155 |
return nil, "item-not-found"; |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
10001
diff
changeset
|
156 |
end |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
157 |
end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
158 |
if query.limit and #items - i > query.limit then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
159 |
items[i+query.limit+1] = nil; |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 |
end |
9836
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
162 |
return function () |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
163 |
i = i + 1; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
164 |
local item = items[i]; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
165 |
if not item then return; end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
166 |
return item.key, item.value(), item.when, item.with; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9613
diff
changeset
|
167 |
end, count; |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 |
|
9910
d0b58bdd6c86
mod_storage_memory: Fix copypaste mistake
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
170 |
function archive_store:summary(username, query) |
9909
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9891
diff
changeset
|
171 |
local iter, err = self:find(username, query) |
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9891
diff
changeset
|
172 |
if not iter then return iter, err; end |
10224
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10027
diff
changeset
|
173 |
local counts = {}; |
10226
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
174 |
local earliest = {}; |
10225
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10224
diff
changeset
|
175 |
local latest = {}; |
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10224
diff
changeset
|
176 |
for _, _, when, with in iter do |
10224
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10027
diff
changeset
|
177 |
counts[with] = (counts[with] or 0) + 1; |
10226
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
178 |
if earliest[with] == nil then |
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
179 |
earliest[with] = when; |
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
180 |
end |
10225
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10224
diff
changeset
|
181 |
latest[with] = when; |
9909
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9891
diff
changeset
|
182 |
end |
10224
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10027
diff
changeset
|
183 |
return { |
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10027
diff
changeset
|
184 |
counts = counts; |
10226
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
185 |
earliest = earliest; |
10225
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10224
diff
changeset
|
186 |
latest = latest; |
10224
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10027
diff
changeset
|
187 |
}; |
9909
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9891
diff
changeset
|
188 |
end |
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9891
diff
changeset
|
189 |
|
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
190 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
191 |
function archive_store:delete(username, query) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
192 |
if not query or next(query) == nil then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
193 |
self.store[username or NULL] = nil; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
194 |
return true; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
195 |
end |
9538
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
196 |
local items = self.store[username or NULL]; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
197 |
if not items then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
198 |
-- Store is empty |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
199 |
return 0; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
200 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
201 |
items = array(items); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
202 |
local count_before = #items; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
203 |
if query then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
204 |
if query.key then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
205 |
items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
206 |
return item.key ~= query.key; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
207 |
end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
208 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
209 |
if query.with then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
210 |
items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
211 |
return item.with ~= query.with; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
212 |
end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
213 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
214 |
if query.start then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
215 |
items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
216 |
return item.when < query.start; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
217 |
end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
218 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
219 |
if query["end"] then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
220 |
items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
221 |
return item.when > query["end"]; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
222 |
end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
223 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
224 |
if query.truncate and #items > query.truncate then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
225 |
if query.reverse then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
226 |
-- Before: { 1, 2, 3, 4, 5, } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
227 |
-- After: { 1, 2, 3 } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
228 |
for i = #items, query.truncate + 1, -1 do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
229 |
items[i] = nil; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
230 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
231 |
else |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
232 |
-- Before: { 1, 2, 3, 4, 5, } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
233 |
-- After: { 3, 4, 5 } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
234 |
local offset = #items - query.truncate; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
235 |
for i = 1, #items do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
236 |
items[i] = items[i+offset]; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
237 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
238 |
end |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
239 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
240 |
end |
9538
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
241 |
local count = count_before - #items; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
242 |
if count == 0 then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
243 |
return 0; -- No changes, skip write |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
244 |
end |
9538
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
245 |
setmetatable(items, nil); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
246 |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
247 |
do -- re-index by key |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
248 |
for k in pairs(items) do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
249 |
if type(k) == "string" then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
250 |
items[k] = nil; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
251 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
252 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
253 |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
254 |
for i = 1, #items do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
255 |
items[ items[i].key ] = i; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
256 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
257 |
end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
258 |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9537
diff
changeset
|
259 |
return count; |
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
260 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
261 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
262 |
archive_store.purge = _purge_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
263 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 |
local stores = { |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
265 |
keyval = keyval_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
266 |
archive = archive_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 |
} |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
268 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
269 |
local driver = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
270 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
271 |
function driver:open(store, typ) -- luacheck: ignore 212/self |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
272 |
local store_mt = stores[typ or "keyval"]; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
273 |
if store_mt then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
274 |
return setmetatable({ store = memory[store] }, store_mt); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
275 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
276 |
return nil, "unsupported-store"; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
277 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
278 |
|
9613
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9538
diff
changeset
|
279 |
function driver:purge(user) -- luacheck: ignore 212/self |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9538
diff
changeset
|
280 |
for _, store in pairs(memory) do |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9538
diff
changeset
|
281 |
store[user] = nil; |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9538
diff
changeset
|
282 |
end |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9538
diff
changeset
|
283 |
end |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9538
diff
changeset
|
284 |
|
9296
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
285 |
if auto_purge_enabled then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
286 |
module:hook("resource-unbind", function (event) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
287 |
local user_bare_jid = event.session.username.."@"..event.session.host; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
288 |
if not prosody.bare_sessions[user_bare_jid] then -- User went offline |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
289 |
module:log("debug", "Clearing store for offline user %s", user_bare_jid); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
290 |
local f, s, v; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
291 |
if auto_purge_stores:empty() then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
292 |
f, s, v = pairs(memory); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
293 |
else |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
294 |
f, s, v = auto_purge_stores:items(); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
295 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
296 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
297 |
for store_name in f, s, v do |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
298 |
if memory[store_name] then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
299 |
memory[store_name][event.session.username] = nil; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
300 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
302 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
303 |
end); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 |
end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
305 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
306 |
module:provides("storage", driver); |