Merge 0.10->trunk
authorKim Alvefur <zash@zash.se>
Thu, 18 Sep 2014 00:22:48 +0000 (02:22 +0200)
committerKim Alvefur <zash@zash.se>
Thu, 18 Sep 2014 00:22:48 +0000 (02:22 +0200)
1  2 
core/moduleapi.lua

diff --combined core/moduleapi.lua
index 30d284186bf8e2de379d383df7be81f4c64623a8,e5f86b377f3995b41b154b1404e649275808bc55..e9609ed9aed477d21efdf9d0f8e0f0ad610f95ea
@@@ -7,7 -7,7 +7,7 @@@
  --
  
  local config = require "core.configmanager";
- local modulemanager = require "modulemanager"; -- This is necessary to avoid require loops
+ local modulemanager; -- This gets set from modulemanager
  local array = require "util.array";
  local set = require "util.set";
  local logger = require "util.logger";
@@@ -17,10 -17,9 +17,11 @@@ local resolve_relative_path = require"u
  
  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;
@@@ -350,29 -349,11 +351,29 @@@ function api:send(stanza
        return core_post_stanza(hosts[self.host], stanza);
  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);
@@@ -386,7 -367,10 +387,10 @@@ function api:load_resource(path, mode
  end
  
  function api:open_store(name, type)
-       return storagemanager.open(self.host, name or self.name, type);
+       return require"core.storagemanager".open(self.host, name or self.name, type);
  end
  
- return api;
+ return function (mm)
+       modulemanager = mm;
+       return api;
+ end