Comparison

plugins/mod_mam/mod_mam.lua @ 13209:c8d949cf6b09

plugins: Switch to :get_option_period() for time range options Improves readability ("1 day" vs 86400) and centralizes validation.
author Kim Alvefur <zash@zash.se>
date Sun, 16 Jul 2023 20:49:33 +0200
parent 13165:9c13c11b199d
child 13213:50324f66ca2a
comparison
equal deleted inserted replaced
13208:a7c6ea1c5308 13209:c8d949cf6b09
35 local is_stanza = st.is_stanza; 35 local is_stanza = st.is_stanza;
36 local tostring = tostring; 36 local tostring = tostring;
37 local time_now = require "prosody.util.time".now; 37 local time_now = require "prosody.util.time".now;
38 local m_min = math.min; 38 local m_min = math.min;
39 local timestamp, datestamp = import( "util.datetime", "datetime", "date"); 39 local timestamp, datestamp = import( "util.datetime", "datetime", "date");
40 local parse_duration = require "prosody.util.human.io".parse_duration;
41 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50); 40 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50);
42 local strip_tags = module:get_option_set("dont_archive_namespaces", { "http://jabber.org/protocol/chatstates" }); 41 local strip_tags = module:get_option_set("dont_archive_namespaces", { "http://jabber.org/protocol/chatstates" });
43 42
44 local archive_store = module:get_option_string("archive_store", "archive"); 43 local archive_store = module:get_option_string("archive_store", "archive");
45 local archive = module:open_store(archive_store, "archive"); 44 local archive = module:open_store(archive_store, "archive");
46 45
47 local cleanup_after = module:get_option_string("archive_expires_after", "1w"); 46 local cleanup_after = module:get_option_period("archive_expires_after", "1w");
48 local archive_item_limit = module:get_option_number("storage_archive_item_limit", archive.caps and archive.caps.quota or 1000); 47 local archive_item_limit = module:get_option_number("storage_archive_item_limit", archive.caps and archive.caps.quota or 1000);
49 local archive_truncate = math.floor(archive_item_limit * 0.99); 48 local archive_truncate = math.floor(archive_item_limit * 0.99);
50 49
51 if not archive.find then 50 if not archive.find then
52 error("mod_"..(archive._provided_by or archive.name and "storage_"..archive.name).." does not support archiving\n" 51 error("mod_"..(archive._provided_by or archive.name and "storage_"..archive.name).." does not support archiving\n"
508 end); 507 end);
509 508
510 if cleanup_after ~= "never" then 509 if cleanup_after ~= "never" then
511 local cleanup_storage = module:open_store("archive_cleanup"); 510 local cleanup_storage = module:open_store("archive_cleanup");
512 local cleanup_map = module:open_store("archive_cleanup", "map"); 511 local cleanup_map = module:open_store("archive_cleanup", "map");
513
514 local cleanup_after_seconds, parse_err = parse_duration(cleanup_after);
515 if parse_err ~= nil then
516 module:log("error", "Could not parse archive_expires_after string %q: %s", cleanup_after, parse_err);
517 return false;
518 end
519 cleanup_after = cleanup_after_seconds;
520 512
521 module:log("debug", "archive_expires_after = %d -- in seconds", cleanup_after); 513 module:log("debug", "archive_expires_after = %d -- in seconds", cleanup_after);
522 514
523 if not archive.delete then 515 if not archive.delete then
524 module:log("error", "archive_expires_after set but mod_%s does not support deleting", archive._provided_by); 516 module:log("error", "archive_expires_after set but mod_%s does not support deleting", archive._provided_by);