Merge 0.10->trunk
authorMatthew Wild <mwild1@gmail.com>
Mon, 1 Feb 2016 21:28:07 +0000 (21:28 +0000)
committerMatthew Wild <mwild1@gmail.com>
Mon, 1 Feb 2016 21:28:07 +0000 (21:28 +0000)
1  2 
core/moduleapi.lua

diff --combined core/moduleapi.lua
index 114a97a787727c695e7ec3e6d813106eb85e9459,c439ba6f6459d5ee459338b8186d472c67bb8508..bdf9959f7d098de8db7fc88fcc31e0d23aa378df
@@@ -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;
@@@ -137,10 -135,7 +137,7 @@@ function api:wrap_global(event, handler
  end
  
  function api:require(lib)
-       local f, n = pluginloader.load_code(self.name, lib..".lib.lua", self.environment);
-       if not f then
-               f, n = pluginloader.load_code(lib, lib..".lib.lua", self.environment);
-       end
+       local f, n = pluginloader.load_code_ext(self.name, lib, "lib.lua", self.environment);
        if not f then error("Failed to load plugin library '"..lib.."', error: "..n); end -- FIXME better error message
        return f();
  end
@@@ -376,29 -371,11 +373,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);