aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2023-07-16 19:49:12 +0200
committerKim Alvefur <zash@zash.se>2023-07-16 19:49:12 +0200
commit3c4dc9a7545791bb70f3a542eac910e6487e4ba4 (patch)
treeff96eeec5cc8df58ed0cc0dd9c76cad8d750efb2 /core
parent924064a30ad560e9aecc2d5e3b72f6a4a85b40ae (diff)
downloadprosody-3c4dc9a7545791bb70f3a542eac910e6487e4ba4.tar.gz
prosody-3c4dc9a7545791bb70f3a542eac910e6487e4ba4.zip
core.moduleapi: Add :get_option_period for parsing time intervals
E.g. for use in mod_mam and others that take an amount of time before some (usually cleanup) action is taken.
Diffstat (limited to 'core')
-rw-r--r--core/features.lua1
-rw-r--r--core/moduleapi.lua15
2 files changed, 16 insertions, 0 deletions
diff --git a/core/features.lua b/core/features.lua
index 41d8ce70..49c34111 100644
--- a/core/features.lua
+++ b/core/features.lua
@@ -19,5 +19,6 @@ return {
-- new moduleapi methods
"getopt-enum";
"getopt-interval";
+ "getopt-period";
};
};
diff --git a/core/moduleapi.lua b/core/moduleapi.lua
index 87a25ae7..66652e09 100644
--- a/core/moduleapi.lua
+++ b/core/moduleapi.lua
@@ -21,6 +21,7 @@ local format = require "prosody.util.format".format;
local jid_node = require "prosody.util.jid".node;
local jid_split = require "prosody.util.jid".split;
local jid_resource = require "prosody.util.jid".resource;
+local human_io = require "prosody.util.human.io";
local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat;
local error, setmetatable, type = error, setmetatable, type;
@@ -253,6 +254,20 @@ function api:get_option_number(name, default_value, min, max)
return ret;
end
+function api:get_option_period(name, default_value)
+ local value = self:get_option_scalar(name, default_value);
+ local num = tonumber(value);
+ if num then
+ -- assume seconds
+ return num;
+ end
+ local ret = human_io.parse_duration(value);
+ if value ~= nil and ret == nil then
+ self:log("error", "Config option '%s' not understood, expecting a period", name);
+ end
+ return ret;
+end
+
function api:get_option_boolean(name, ...)
local value = self:get_option_scalar(name, ...);
if value == nil then