aboutsummaryrefslogtreecommitdiff
path: root/src/mod_muc_room.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_muc_room.erl')
-rw-r--r--src/mod_muc_room.erl58
1 files changed, 43 insertions, 15 deletions
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 5778569df..2e3c2f146 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -1140,6 +1140,7 @@ close_room_if_temporary_and_empty(StateData1) ->
"and empty",
[jid:encode(StateData1#state.jid)]),
add_to_log(room_existence, destroyed, StateData1),
+ maybe_forget_room(StateData1),
{stop, normal, StateData1};
_ -> {next_state, normal_state, StateData1}
end.
@@ -3485,14 +3486,15 @@ change_config(Config, StateData) ->
end,
store_room(StateData1),
StateData1;
- {true, false} ->
- Affiliations = get_affiliations(StateData),
- mod_muc:forget_room(StateData1#state.server_host,
- StateData1#state.host,
- StateData1#state.room),
- StateData1#state{affiliations = Affiliations};
- {false, false} ->
- StateData1
+ {WasPersistent, false} ->
+ maybe_forget_room(StateData1),
+ case WasPersistent of
+ true ->
+ Affiliations = get_affiliations(StateData),
+ StateData1#state{affiliations = Affiliations};
+ _ ->
+ StateData1
+ end
end,
case {(StateData#state.config)#config.members_only,
Config#config.members_only} of
@@ -3822,14 +3824,27 @@ destroy_room(DEl, StateData) ->
Info#user.jid, Packet,
?NS_MUCSUB_NODES_CONFIG, StateData)
end, ok, get_users_and_subscribers(StateData)),
- case (StateData#state.config)#config.persistent of
- true ->
- mod_muc:forget_room(StateData#state.server_host,
- StateData#state.host, StateData#state.room);
- false -> ok
- end,
+ maybe_forget_room(StateData),
{result, undefined, stop}.
+maybe_forget_room(StateData) ->
+ Forget = case (StateData#state.config)#config.persistent of
+ true ->
+ true;
+ _ ->
+ Mod = gen_mod:db_mod(StateData#state.server_host, mod_muc),
+ erlang:function_exported(Mod, get_subscribed_rooms, 3)
+ end,
+ case Forget of
+ true ->
+ mod_muc:forget_room(StateData#state.server_host,
+ StateData#state.host,
+ StateData#state.room),
+ StateData;
+ _ ->
+ StateData
+ end.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Disco
@@ -4359,7 +4374,20 @@ element_size(El) ->
store_room(StateData) ->
store_room(StateData, []).
store_room(StateData, ChangesHints) ->
- if (StateData#state.config)#config.persistent ->
+ % Let store persistent rooms or on those backends that have get_subscribed_rooms
+ ShouldStore = case (StateData#state.config)#config.persistent of
+ true ->
+ true;
+ _ ->
+ case ChangesHints of
+ [] ->
+ false;
+ _ ->
+ Mod = gen_mod:db_mod(StateData#state.server_host, mod_muc),
+ erlang:function_exported(Mod, get_subscribed_rooms, 3)
+ end
+ end,
+ if ShouldStore ->
mod_muc:store_room(StateData#state.server_host,
StateData#state.host, StateData#state.room,
make_opts(StateData),