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