Mercurial > prosody-modules
comparison mod_storage_xmlarchive/mod_storage_xmlarchive.lua @ 2290:4786bf0a9334
mod_storage_xmlarchive: Determine if a message is the first of day by checking if the list file exists before
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 23 Aug 2016 23:39:57 +0200 |
| parents | aa984980a4dc |
| children | 544ee057a23f |
comparison
equal
deleted
inserted
replaced
| 2289:aa984980a4dc | 2290:4786bf0a9334 |
|---|---|
| 3 -- | 3 -- |
| 4 -- This file is MIT/X11 licensed. | 4 -- This file is MIT/X11 licensed. |
| 5 -- | 5 -- |
| 6 -- luacheck: ignore unused self | 6 -- luacheck: ignore unused self |
| 7 | 7 |
| 8 local lfs = require "lfs"; | |
| 8 local dm = require "core.storagemanager".olddm; | 9 local dm = require "core.storagemanager".olddm; |
| 9 local hmac_sha256 = require"util.hashes".hmac_sha256; | 10 local hmac_sha256 = require"util.hashes".hmac_sha256; |
| 10 local st = require"util.stanza"; | 11 local st = require"util.stanza"; |
| 11 local dt = require"util.datetime"; | 12 local dt = require"util.datetime"; |
| 12 local new_stream = require "util.xmppstream".new; | 13 local new_stream = require "util.xmppstream".new; |
| 35 local ok, err = dm.append_raw(username.."@"..day, module.host, self.store, "xml", data); | 36 local ok, err = dm.append_raw(username.."@"..day, module.host, self.store, "xml", data); |
| 36 if not ok then | 37 if not ok then |
| 37 return nil, err; | 38 return nil, err; |
| 38 end | 39 end |
| 39 | 40 |
| 41 -- If the day-file is missing then we need to add it to the list of days | |
| 42 local first_of_day = not lfs.attributes(dm.getpath(username .. "@" .. day, module.host, self.store, "list")); | |
| 43 | |
| 40 local offset = ok and err; | 44 local offset = ok and err; |
| 41 | 45 |
| 42 local id = day .. "-" .. hmac_sha256(username.."@"..day.."+"..offset, data, true):sub(-16); | 46 local id = day .. "-" .. hmac_sha256(username.."@"..day.."+"..offset, data, true):sub(-16); |
| 43 ok, err = dm.list_append(username.."@"..day, module.host, self.store, { id = id, when = dt.datetime(when), with = with, offset = offset, length = #data }); | 47 ok, err = dm.list_append(username.."@"..day, module.host, self.store, { id = id, when = dt.datetime(when), with = with, offset = offset, length = #data }); |
| 44 if offset == 0 then | 48 if ok and first_of_day then |
| 45 -- means the message is at the beginnig of the file, so it's a new day | |
| 46 -- so we add this new day to the "index" | |
| 47 ok, err = dm.list_append(username, module.host, self.store, day); | 49 ok, err = dm.list_append(username, module.host, self.store, day); |
| 48 end | 50 end |
| 49 if not ok then | 51 if not ok then |
| 50 return nil, err; | 52 return nil, err; |
| 51 end | 53 end |
