Software / code / prosody
Comparison
plugins/mod_storage_internal.lua @ 10837:f23363380599
mod_storage_internal: Implement key-value API
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 11 May 2020 21:56:19 +0200 |
| parent | 10223:d185c4961ee0 |
| child | 10842:5a6ba2f38e2b |
comparison
equal
deleted
inserted
replaced
| 10836:93019f3edd68 | 10837:f23363380599 |
|---|---|
| 206 item = st.deserialize(item); | 206 item = st.deserialize(item); |
| 207 return key, item, when, with; | 207 return key, item, when, with; |
| 208 end, count; | 208 end, count; |
| 209 end | 209 end |
| 210 | 210 |
| 211 function archive:get(username, wanted_key) | |
| 212 local iter, err = self:find(username, { key = wanted_key }) | |
| 213 if not iter then return iter, err; end | |
| 214 for key, stanza, when, with in iter do | |
| 215 if key == wanted_key then | |
| 216 return stanza, when, with; | |
| 217 end | |
| 218 end | |
| 219 return nil, "item-not-found"; | |
| 220 end | |
| 221 | |
| 222 function archive:set(username, key, new_value, new_when, new_with) | |
| 223 local items, err = datamanager.list_load(username, host, self.store); | |
| 224 if not items then | |
| 225 if err then | |
| 226 return items, err; | |
| 227 else | |
| 228 return nil, "item-not-found"; | |
| 229 end | |
| 230 end | |
| 231 | |
| 232 for i = 1, #items do | |
| 233 local old_item = items[i]; | |
| 234 if old_item.key == key then | |
| 235 local item = st.preserialize(st.clone(new_value)); | |
| 236 | |
| 237 local when = new_when or item.when or datetime.parse(item.attr.stamp); | |
| 238 item.key = key; | |
| 239 item.when = when; | |
| 240 item.with = new_with or old_item.with; | |
| 241 item.attr.stamp = datetime.datetime(when); | |
| 242 item.attr.stamp_legacy = datetime.legacy(when); | |
| 243 items[i] = item; | |
| 244 return datamanager.list_store(username, host, self.store, items); | |
| 245 end | |
| 246 end | |
| 247 | |
| 248 return nil, "item-not-found"; | |
| 249 end | |
| 250 | |
| 211 function archive:dates(username) | 251 function archive:dates(username) |
| 212 local items, err = datamanager.list_load(username, host, self.store); | 252 local items, err = datamanager.list_load(username, host, self.store); |
| 213 if not items then return items, err; end | 253 if not items then return items, err; end |
| 214 return array(items):pluck("when"):map(datetime.date):unique(); | 254 return array(items):pluck("when"):map(datetime.date):unique(); |
| 215 end | 255 end |