aboutsummaryrefslogtreecommitdiff
path: root/src/mod_muc.erl
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2020-10-13 12:52:25 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2020-10-13 13:00:57 +0200
commit73f8aded176cc880a75959dbd7e6348e3ea33729 (patch)
tree7874a09084053f6f9ae7d86f24bb3e431b59e550 /src/mod_muc.erl
parentAdded sql_odbc_driver option for mssql db (diff)
Make mod_muc_admin command work correctly with hibernated rooms
This should first try to unhibernate rooms before trying to send messages to processes handling them.
Diffstat (limited to 'src/mod_muc.erl')
-rw-r--r--src/mod_muc.erl14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mod_muc.erl b/src/mod_muc.erl
index c30d3a190..28a0f505d 100644
--- a/src/mod_muc.erl
+++ b/src/mod_muc.erl
@@ -68,7 +68,7 @@
can_use_nick/4,
get_subscribed_rooms/2,
procname/2,
- route/1]).
+ route/1, unhibernate_room/3]).
-export([init/1, handle_call/3, handle_cast/2,
handle_info/2, terminate/2, code_change/3,
@@ -526,6 +526,18 @@ extract_password(#iq{} = IQ) ->
false
end.
+-spec unhibernate_room(binary(), binary(), binary()) -> {ok, pid()} | error.
+unhibernate_room(ServerHost, Host, Room) ->
+ RMod = gen_mod:ram_db_mod(ServerHost, ?MODULE),
+ case RMod:find_online_room(ServerHost, Room, Host) of
+ error ->
+ case load_room(RMod, Host, ServerHost, Room) of
+ {ok, _} = R -> R;
+ _ -> error
+ end;
+ {ok, _} = R2 -> R2
+ end.
+
-spec route_to_room(stanza(), binary()) -> ok.
route_to_room(Packet, ServerHost) ->
From = xmpp:get_from(Packet),