Merge 0.10->trunk
authorKim Alvefur <zash@zash.se>
Thu, 18 Feb 2016 14:00:17 +0000 (15:00 +0100)
committerKim Alvefur <zash@zash.se>
Thu, 18 Feb 2016 14:00:17 +0000 (15:00 +0100)
1  2 
core/moduleapi.lua

diff --combined core/moduleapi.lua
index 14e5771b1432940c9966c51990afd5db19936c23,402c79275fe0456f2004c2b7aece035329d21dcc..8db5c2180757794cd9a77f3e5f5b5522c16756f6
@@@ -20,10 -20,9 +20,10 @@@ 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 = ipairs, pairs, select;
 -local unpack = table.unpack or unpack; --luacheck: ignore 113
  local tonumber, tostring = tonumber, tostring;
  local require = require;
- local unpack = table.unpack or unpack; -- renamed in 5.2
 +local pack = table.pack or function(...) return {n=select("#",...), ...}; end -- table.pack is only in 5.2
++local unpack = table.unpack or unpack; --luacheck: ignore 113 -- renamed in 5.2
  
  local prosody = prosody;
  local hosts = prosody.hosts;
@@@ -387,29 -386,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) --luacheck: ignore 212/id
 +      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);