]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_muc/mod_muc.erl: Export function to create MUC
authorBadlop <badlop@process-one.net>
Mon, 16 Feb 2009 15:24:40 +0000 (15:24 +0000)
committerBadlop <badlop@process-one.net>
Mon, 16 Feb 2009 15:24:40 +0000 (15:24 +0000)
room (thanks to Eric Cestari) (EJAB-729)

SVN Revision: 1878

ChangeLog
src/mod_muc/mod_muc.erl

index 14ee02e9863407d147307e0f331d3c7ff0533a43..c801ece7f41a0eace49084614acfae5d3433b5ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2009-02-16  Badlop  <badlop@process-one.net>
 
+       * 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
index d5a5ca721ea14c7e2f3105b5eb78aeaa81fbdac9..8314816844b65e3bc5b0c5b5282df9a63292c5f6 100644 (file)
@@ -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} |