summaryrefslogtreecommitdiff
path: root/src/mod_muc/mod_muc.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_muc/mod_muc.erl')
-rw-r--r--src/mod_muc/mod_muc.erl44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/mod_muc/mod_muc.erl b/src/mod_muc/mod_muc.erl
index 84a0b8e1..b94a948d 100644
--- a/src/mod_muc/mod_muc.erl
+++ b/src/mod_muc/mod_muc.erl
@@ -15,7 +15,10 @@
-export([start/1,
init/1,
stop/0,
- room_destroyed/1]).
+ room_destroyed/1,
+ store_room/2,
+ restore_room/1,
+ forget_room/1]).
-include("ejabberd.hrl").
-include("jlib.hrl").
@@ -38,7 +41,7 @@ init(Host) ->
public,
{keypos, #muc_online_room.name}]),
ejabberd_router:register_route(Host),
- % TODO: load permanent groups
+ load_permanent_rooms(Host),
loop(Host).
loop(Host) ->
@@ -136,7 +139,44 @@ iq_disco() ->
[{"var", ?NS_MUC}], []}].
+store_room(Name, Opts) ->
+ F = fun() ->
+ mnesia:write(#muc_room{name = Name,
+ opts = Opts})
+ end,
+ mnesia:transaction(F).
+
+restore_room(Name) ->
+ case catch mnesia:dirty_read(muc_room, Name) of
+ [#muc_room{opts = Opts}] ->
+ Opts;
+ _ ->
+ error
+ end.
+forget_room(Name) ->
+ F = fun() ->
+ mnesia:delete({muc_room, Name})
+ end,
+ mnesia:transaction(F).
+load_permanent_rooms(Host) ->
+ case catch mnesia:dirty_select(muc_room, [{'_', [], ['$_']}]) of
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p", [Reason]),
+ ok;
+ Rs ->
+ lists:foreach(fun(R) ->
+ Room = R#muc_room.name,
+ {ok, Pid} = mod_muc_room:start(
+ Host,
+ Room,
+ R#muc_room.opts),
+ ets:insert(
+ muc_online_room,
+ #muc_online_room{name = Room, pid = Pid})
+ end, Rs)
+ end.
+