Mercurial > prosody-hg
annotate plugins/mod_storage_memory.lua @ 10864:1b657605ea29
mod_vcard_legacy: Remove semi-broken support for multiple avatars
Nobody does this. If someone wants to they should go use the PEP method
directly instead.
Additionally, this got in the way of doing multiple avatars The PEP Way,
since it treated each 'data' as a distinct avatar with an optional
corresponding 'metadata', which is not how it works.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 01 Jun 2020 17:37:54 +0200 |
| parents | 018acdaf374f |
| children | c55bd98a54f8 |
| rev | line source |
|---|---|
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local serialize = require "util.serialization".serialize; |
|
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
2 local array = require "util.array"; |
|
9293
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 |
|
9838
40ed04014b97
mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents:
9832
diff
changeset
|
6 local new_id = require "util.id".medium; |
|
9293
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 |
|
9887
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
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:
9882
diff
changeset
|
12 |
|
9293
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 |
|
9881
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
28 local function _users(self) |
|
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
29 return next, self.store, nil; |
|
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
30 end |
|
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
31 |
|
9293
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 |
|
9468
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:
9340
diff
changeset
|
41 data = envload("return "..serialize(data), "=(data)", {}); |
|
9293
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 |
|
9881
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
49 keyval_store.users = _users; |
|
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
50 |
|
9293
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 |
|
9881
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
54 archive_store.users = _users; |
|
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
55 |
|
9887
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
56 archive_store.caps = { |
|
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
57 total = true; |
|
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
58 quota = archive_item_limit; |
|
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
59 truncate = true; |
|
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
60 }; |
|
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
61 |
|
9293
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); |
|
9468
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:
9340
diff
changeset
|
65 value = envload("return xml"..serialize(value), "=(stanza)", { xml = st.deserialize }) |
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 else |
|
9468
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:
9340
diff
changeset
|
67 value = envload("return "..serialize(value), "=(data)", {}); |
|
9293
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 |
|
9838
40ed04014b97
mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents:
9832
diff
changeset
|
76 key = new_id(); |
|
9293
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]); |
|
9887
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
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:
9882
diff
changeset
|
82 return nil, "quota-limit"; |
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 end |
|
9534
b301f7edf346
mod_storage_memory: Fix overwriting old keys
Kim Alvefur <zash@zash.se>
parents:
9533
diff
changeset
|
84 local i = #a+1; |
|
9293
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 |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
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:
9609
diff
changeset
|
92 if not items then |
|
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
93 if query then |
|
10023
f6959fe81a1d
mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents:
10019
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:
10019
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:
10019
diff
changeset
|
96 end |
|
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
97 if query.total then |
|
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
98 return function () end, 0; |
|
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
99 end |
|
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
100 end |
|
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
101 return function () end; |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
102 end |
|
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
103 local count = nil; |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
diff
changeset
|
126 end |
|
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
127 if query.total then |
|
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
128 count = #items; |
|
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
129 end |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
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:
9609
diff
changeset
|
132 if query.before then |
|
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
133 local found = false; |
|
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
134 for j = 1, #items do |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
135 if (items[j].key or tostring(j)) == query.before then |
|
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
136 found = true; |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
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:
9609
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:
9609
diff
changeset
|
140 end |
|
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
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:
9997
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:
9997
diff
changeset
|
143 end |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
diff
changeset
|
145 elseif query.after then |
|
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
146 local found = false; |
|
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
147 for j = 1, #items do |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
148 if (items[j].key or tostring(j)) == query.after then |
|
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
149 found = true; |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
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:
9609
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:
9609
diff
changeset
|
153 end |
|
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
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:
9997
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:
9997
diff
changeset
|
156 end |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
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:
9609
diff
changeset
|
159 items[i+query.limit+1] = nil; |
|
9293
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 |
|
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
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:
9609
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:
9609
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:
9609
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:
9609
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:
9609
diff
changeset
|
167 end, count; |
|
9293
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 |
|
10839
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
170 function archive_store:get(username, wanted_key) |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
171 local items = self.store[username or NULL]; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
172 if not items then return nil, "item-not-found"; end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
173 local i = items[wanted_key]; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
174 if not i then return nil, "item-not-found"; end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
175 local item = items[i]; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
176 return item.value(), item.when, item.with; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
177 end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
178 |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
179 function archive_store:set(username, wanted_key, new_value, new_when, new_with) |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
180 local items = self.store[username or NULL]; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
181 if not items then return nil, "item-not-found"; end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
182 local i = items[wanted_key]; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
183 if not i then return nil, "item-not-found"; end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
184 local item = items[i]; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
185 |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
186 if is_stanza(new_value) then |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
187 new_value = st.preserialize(new_value); |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
188 item.value = envload("return xml"..serialize(new_value), "=(stanza)", { xml = st.deserialize }) |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
189 else |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
190 item.value = envload("return "..serialize(new_value), "=(data)", {}); |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
191 end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
192 if new_when then |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
193 item.when = new_when; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
194 end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
195 if new_with then |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
196 item.with = new_when; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
197 end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
198 return true; |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
199 end |
|
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
200 |
|
9906
d0b58bdd6c86
mod_storage_memory: Fix copypaste mistake
Kim Alvefur <zash@zash.se>
parents:
9905
diff
changeset
|
201 function archive_store:summary(username, query) |
|
9905
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
202 local iter, err = self:find(username, query) |
|
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
203 if not iter then return iter, err; end |
|
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
204 local counts = {}; |
|
10222
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
205 local earliest = {}; |
|
10221
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
206 local latest = {}; |
|
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
207 for _, _, when, with in iter do |
|
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
208 counts[with] = (counts[with] or 0) + 1; |
|
10222
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
209 if earliest[with] == nil then |
|
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
210 earliest[with] = when; |
|
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
211 end |
|
10221
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
212 latest[with] = when; |
|
9905
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
213 end |
|
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
214 return { |
|
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
215 counts = counts; |
|
10222
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
216 earliest = earliest; |
|
10221
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
217 latest = latest; |
|
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
218 }; |
|
9905
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
219 end |
|
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
220 |
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 function archive_store:delete(username, query) |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 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
|
224 self.store[username or NULL] = nil; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 return true; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 end |
|
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
227 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:
9534
diff
changeset
|
228 if not items then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
229 -- Store is empty |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
230 return 0; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
231 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
232 items = array(items); |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
233 local count_before = #items; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
234 if query then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
235 if query.key then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
236 items:filter(function (item) |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
237 return item.key ~= query.key; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
238 end); |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
239 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
240 if query.with then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
241 items:filter(function (item) |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
242 return item.with ~= query.with; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
243 end); |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
244 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
245 if query.start then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
246 items:filter(function (item) |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
247 return item.when < query.start; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
248 end); |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
249 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
250 if query["end"] then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
251 items:filter(function (item) |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
252 return item.when > query["end"]; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
253 end); |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
254 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
255 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:
9534
diff
changeset
|
256 if query.reverse then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
257 -- Before: { 1, 2, 3, 4, 5, } |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
258 -- After: { 1, 2, 3 } |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
259 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:
9534
diff
changeset
|
260 items[i] = nil; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
261 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
262 else |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
263 -- Before: { 1, 2, 3, 4, 5, } |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
264 -- After: { 3, 4, 5 } |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
265 local offset = #items - query.truncate; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
266 for i = 1, #items do |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
267 items[i] = items[i+offset]; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
268 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
269 end |
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
270 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
271 end |
|
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
272 local count = count_before - #items; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
273 if count == 0 then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
274 return 0; -- No changes, skip write |
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
275 end |
|
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
276 setmetatable(items, nil); |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
277 |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
278 do -- re-index by key |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
279 for k in pairs(items) do |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
280 if type(k) == "string" then |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
281 items[k] = nil; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
282 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
283 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
284 |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
285 for i = 1, #items do |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
286 items[ items[i].key ] = i; |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
287 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
288 end |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
289 |
|
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
290 return count; |
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
291 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
292 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
293 archive_store.purge = _purge_store; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
294 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
295 local stores = { |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
296 keyval = keyval_store; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
297 archive = archive_store; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
298 } |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
299 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
300 local driver = {}; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
302 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
|
303 local store_mt = stores[typ or "keyval"]; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 if store_mt then |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
305 return setmetatable({ store = memory[store] }, store_mt); |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
306 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
307 return nil, "unsupported-store"; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
308 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
309 |
|
9609
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
310 function driver:purge(user) -- luacheck: ignore 212/self |
|
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
311 for _, store in pairs(memory) do |
|
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
312 store[user] = nil; |
|
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
313 end |
|
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
314 end |
|
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
315 |
|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
316 if auto_purge_enabled then |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
317 module:hook("resource-unbind", function (event) |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
318 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
|
319 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
|
320 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
|
321 local f, s, v; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
322 if auto_purge_stores:empty() then |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
323 f, s, v = pairs(memory); |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
324 else |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
325 f, s, v = auto_purge_stores:items(); |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
326 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
327 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
328 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
|
329 if memory[store_name] then |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
330 memory[store_name][event.session.username] = nil; |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
331 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
332 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
333 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
334 end); |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
335 end |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
336 |
|
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
337 module:provides("storage", driver); |
