modulemanager: Set module.reloading when a module is reloading, and when loading...
authorMatthew Wild <mwild1@gmail.com>
Thu, 22 Nov 2012 20:59:20 +0000 (20:59 +0000)
committerMatthew Wild <mwild1@gmail.com>
Thu, 22 Nov 2012 20:59:20 +0000 (20:59 +0000)
core/modulemanager.lua

index b0d54caa224ef6f74071eb8a318d0709715543a1..4ba2c27e582491b9d4f38bebc5abc979a594e7b5 100644 (file)
@@ -111,7 +111,7 @@ local function do_unload_module(host, name)
        return true;
 end
 
-local function do_load_module(host, module_name)
+local function do_load_module(host, module_name, state)
        if not (host and module_name) then
                return nil, "insufficient-parameters";
        elseif not hosts[host] and host ~= "*"then
@@ -152,7 +152,8 @@ local function do_load_module(host, module_name)
 
        local _log = logger.init(host..":"..module_name);
        local api_instance = setmetatable({ name = module_name, host = host,
-               _log = _log, log = function (self, ...) return _log(...); end, event_handlers = new_multitable() }
+               _log = _log, log = function (self, ...) return _log(...); end, event_handlers = new_multitable(),
+               reloading = not not state, saved_state = state~=true and state or nil }
                , { __index = api });
 
        local pluginenv = setmetatable({ module = api_instance }, { __index = _G });
@@ -176,6 +177,7 @@ local function do_load_module(host, module_name)
                                log("warn", "Error loading module '%s' on '%s': %s", module_name, host, err or "nil");
                        end
                end
+               api_instance.reloading, api_instance.saved_state = nil, nil;
 
                if api_instance.host == "*" then
                        if not api_instance.global then -- COMPAT w/pre-0.9
@@ -225,8 +227,9 @@ local function do_reload_module(host, name)
                end
        end
 
+       mod.module.reloading = true;
        do_unload_module(host, name);
-       local ok, err = do_load_module(host, name);
+       local ok, err = do_load_module(host, name, saved or true);
        if ok then
                mod = get_module(host, name);
                if module_has_method(mod, "restore") then