Merge 0.10->trunk
authorMatthew Wild <mwild1@gmail.com>
Fri, 5 Feb 2016 00:04:11 +0000 (00:04 +0000)
committerMatthew Wild <mwild1@gmail.com>
Fri, 5 Feb 2016 00:04:11 +0000 (00:04 +0000)
1  2 
core/moduleapi.lua

diff --combined core/moduleapi.lua
index bdf9959f7d098de8db7fc88fcc31e0d23aa378df,573f3153e648e96d418843606257a291dd591d44..ff68a15ce420dce6e25dd07e6616cd97e6fe41aa
@@@ -19,11 -19,9 +19,11 @@@ local st = require "util.stanza"
  
  local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat;
  local error, setmetatable, type = error, setmetatable, type;
 -local ipairs, pairs, select, unpack = ipairs, pairs, select, unpack;
 +local ipairs, pairs, select = ipairs, pairs, select;
  local tonumber, tostring = tonumber, tostring;
  local require = require;
 +local pack = table.pack or function(...) return {n=select("#",...), ...}; end -- table.pack is only in 5.2
 +local unpack = table.unpack or unpack; -- renamed in 5.2
  
  local prosody = prosody;
  local hosts = prosody.hosts;
@@@ -303,6 -301,20 +303,20 @@@ function api:get_option_inherited_set(n
        return value;
  end
  
+ function api:get_option_path(name, default, parent)
+       if parent == nil then
+               parent = parent or self:get_directory();
+       elseif prosody.paths[parent] then
+               parent = prosody.paths[parent];
+       end
+       local value = self:get_option_string(name, default);
+       if value == nil then
+               return nil;
+       end
+       return resolve_relative_path(parent, value);
+ end
  function api:context(host)
        return setmetatable({host=host or "*"}, {__index=self,__newindex=self});
  end
@@@ -373,29 -385,11 +387,29 @@@ function api:broadcast(jids, stanza, it
        end
  end
  
 -function api:add_timer(delay, callback)
 -      return timer.add_task(delay, function (t)
 -              if self.loaded == false then return; end
 -              return callback(t);
 -      end);
 +local timer_methods = { }
 +local timer_mt = {
 +      __index = timer_methods;
 +}
 +function timer_methods:stop( )
 +      timer.stop(self.id);
 +end
 +timer_methods.disarm = timer_methods.stop
 +function timer_methods:reschedule(delay)
 +      timer.reschedule(self.id, delay)
 +end
 +
 +local function timer_callback(now, id, t)
 +      if t.module_env.loaded == false then return; end
 +      return t.callback(now, unpack(t, 1, t.n));
 +end
 +
 +function api:add_timer(delay, callback, ...)
 +      local t = pack(...)
 +      t.module_env = self;
 +      t.callback = callback;
 +      t.id = timer.add_task(delay, timer_callback, t);
 +      return setmetatable(t, timer_mt);
  end
  
  local path_sep = package.config:sub(1,1);