From 2bd54854ecda5c7e7f3aeb1f48f9d6bc61ef0f14 Mon Sep 17 00:00:00 2001 From: Badlop Date: Mon, 16 Feb 2009 15:24:40 +0000 Subject: [PATCH] * src/mod_muc/mod_muc.erl: Export function to create MUC room (thanks to Eric Cestari) (EJAB-729) SVN Revision: 1878 --- ChangeLog | 3 +++ src/mod_muc/mod_muc.erl | 31 ++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 14ee02e98..c801ece7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2009-02-16 Badlop + * src/mod_muc/mod_muc.erl: Export function to create MUC + room (thanks to Eric Cestari) (EJAB-729) + * src/mod_roster.erl: When account is deleted, cancel presence subscription for all roster items (EJAB-790) * src/mod_roster_odbc.erl: Likewise diff --git a/src/mod_muc/mod_muc.erl b/src/mod_muc/mod_muc.erl index d5a5ca721..831481684 100644 --- a/src/mod_muc/mod_muc.erl +++ b/src/mod_muc/mod_muc.erl @@ -38,6 +38,7 @@ store_room/3, restore_room/2, forget_room/2, + create_room/5, process_iq_disco_items/4, can_use_nick/3]). @@ -102,6 +103,13 @@ room_destroyed(Host, Room, Pid, ServerHost) -> {room_destroyed, {Room, Host}, Pid}, ok. +%% @doc Create a room. +%% If Opts = default, the default room options are used. +%% Else use the passed options as defined in mod_muc_room. +create_room(Host, Name, From, Nick, Opts) -> + Proc = gen_mod:get_module_proc(Host, ?PROCNAME), + gen_server:call(Proc, {create, Name, From, Nick, Opts}). + store_room(Host, Name, Opts) -> F = fun() -> mnesia:write(#muc_room{name_host = {Name, Host}, @@ -210,7 +218,28 @@ init([Host, Opts]) -> %% Description: Handling call messages %%-------------------------------------------------------------------- handle_call(stop, _From, State) -> - {stop, normal, ok, State}. + {stop, normal, ok, State}; + +handle_call({create, Room, From, Nick, Opts}, + _From, + #state{host = Host, + server_host = ServerHost, + access = Access, + default_room_opts = DefOpts, + history_size = HistorySize, + room_shaper = RoomShaper} = State) -> + ?DEBUG("MUC: create new room '~s'~n", [Room]), + NewOpts = case Opts of + default -> DefOpts; + _ -> Opts + end, + {ok, Pid} = mod_muc_room:start( + Host, ServerHost, Access, + Room, HistorySize, + RoomShaper, From, + Nick, NewOpts), + register_room(Host, Room, Pid), + {reply, ok, State}. %%-------------------------------------------------------------------- %% Function: handle_cast(Msg, State) -> {noreply, State} |