]> granicus.if.org Git - ejabberd/commitdiff
* src/gen_mod.erl: Update in database the configuration changes in
authorBadlop <badlop@process-one.net>
Tue, 27 Nov 2007 22:30:51 +0000 (22:30 +0000)
committerBadlop <badlop@process-one.net>
Tue, 27 Nov 2007 22:30:51 +0000 (22:30 +0000)
modules (EJAB-330)

SVN Revision: 996

ChangeLog
src/gen_mod.erl

index 0e378a08a03e07a6723b6fc8eb7d2ca46f607e50..460e719ffeab629162cd45781607a8952d01b60a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2007-11-27  Badlop  <badlop@process-one.net>
 
+       * src/gen_mod.erl: Update in database the configuration changes in
+       modules (EJAB-330)
+
        * src/mod_configure.erl: The command get-user-lastlogin is now
        compatible with both Mnesia and ODBC (EJAB-383)
        * src/mod_last.erl: Likewise
index 168c93df415cf8060420199376ccba59f211e7ce..22a2254a628041a4ef8780f29c805a20d5622d51 100644 (file)
@@ -46,6 +46,7 @@ start_module(Host, Module, Opts) ->
        {'EXIT', Reason} ->
            ?ERROR_MSG("~p", [Reason]);
        _ ->
+           set_module_opts_mnesia(Host, Module, Opts),
            ets:insert(ejabberd_modules,
                       #ejabberd_module{module_host = {Module, Host},
                                        opts = Opts}),
@@ -58,13 +59,16 @@ stop_module(Host, Module) ->
            ?ERROR_MSG("~p", [Reason]);
        {wait, ProcList} when is_list(ProcList) ->
            lists:foreach(fun wait_for_process/1, ProcList),
+           del_module_mnesia(Host, Module),
            ets:delete(ejabberd_modules, {Module, Host}),
            ok;
        {wait, Process} ->
            wait_for_process(Process),
+           del_module_mnesia(Host, Module),
            ets:delete(ejabberd_modules, {Module, Host}),
            ok;
        _ ->
+           del_module_mnesia(Host, Module),
            ets:delete(ejabberd_modules, {Module, Host}),
            ok
     end.
@@ -154,6 +158,27 @@ loaded_modules_with_opts(Host) ->
                 [],
                 [{{'$1', '$2'}}]}]).
 
+set_module_opts_mnesia(Host, Module, Opts) ->
+    Modules = case ejabberd_config:get_local_option({modules, Host}) of
+                 undefined ->
+                     [];
+                 Ls ->
+                     Ls
+             end,
+    Modules1 = lists:keydelete(Module, 1, Modules),
+    Modules2 = [{Module, Opts} | Modules1],
+    ejabberd_config:add_local_option({modules, Host}, Modules2).
+
+del_module_mnesia(Host, Module) ->
+    Modules = case ejabberd_config:get_local_option({modules, Host}) of
+                 undefined ->
+                     [];
+                 Ls ->
+                     Ls
+             end,
+    Modules1 = lists:keydelete(Module, 1, Modules),
+    ejabberd_config:add_local_option({modules, Host}, Modules1).
+
 get_hosts(Opts, Prefix) ->
     case catch gen_mod:get_opt(hosts, Opts) of
        {'EXIT', _Error1} ->