aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2007-11-27 22:30:51 +0000
committerBadlop <badlop@process-one.net>2007-11-27 22:30:51 +0000
commit69b425aeb7723f40f03e3c9ebcbd2bacc62dbf42 (patch)
tree601360e07506cfc5e849f3f106a70a0f091375bc
parent* src/mod_configure.erl: The command get-user-lastlogin is now (diff)
* src/gen_mod.erl: Update in database the configuration changes in
modules (EJAB-330) SVN Revision: 996
-rw-r--r--ChangeLog3
-rw-r--r--src/gen_mod.erl25
2 files changed, 28 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 0e378a08a..460e719ff 100644
--- 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
diff --git a/src/gen_mod.erl b/src/gen_mod.erl
index 168c93df4..22a2254a6 100644
--- a/src/gen_mod.erl
+++ b/src/gen_mod.erl
@@ -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} ->