24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-02 21:17:12 +02:00

Add hooks for tracking mucsub subscriptions changes

This commit is contained in:
Paweł Chmielowski 2019-04-15 12:02:43 +02:00
parent 009b9a1fd0
commit c96a925fde

View File

@ -1688,7 +1688,8 @@ update_online_user(JID, #user{nick = Nick} = User, StateData) ->
end, end,
NewStateData. NewStateData.
set_subscriber(JID, Nick, Nodes, StateData) -> set_subscriber(JID, Nick, Nodes,
#state{room = Room, host = Host, server_host = ServerHost} = StateData) ->
BareJID = case JID of BareJID = case JID of
#jid{} -> jid:remove_resource(JID); #jid{} -> jid:remove_resource(JID);
_ -> _ ->
@ -1707,7 +1708,8 @@ set_subscriber(JID, Nick, Nodes, StateData) ->
store_room(NewStateData, [{add_subscription, BareJID, Nick, Nodes}]), store_room(NewStateData, [{add_subscription, BareJID, Nick, Nodes}]),
case not maps:is_key(LBareJID, StateData#state.subscribers) of case not maps:is_key(LBareJID, StateData#state.subscribers) of
true -> true ->
send_subscriptions_change_notifications(BareJID, Nick, subscribe, NewStateData); send_subscriptions_change_notifications(BareJID, Nick, subscribe, NewStateData),
ejabberd_hooks:run(muc_subscribed, ServerHost, [ServerHost, Room, Host, BareJID]);
_ -> _ ->
ok ok
end, end,
@ -4056,7 +4058,7 @@ process_iq_mucsub(From, #iq{type = set, lang = Lang,
{error, xmpp:err_forbidden(Txt, Lang)} {error, xmpp:err_forbidden(Txt, Lang)}
end; end;
process_iq_mucsub(From, #iq{type = set, sub_els = [#muc_unsubscribe{}]}, process_iq_mucsub(From, #iq{type = set, sub_els = [#muc_unsubscribe{}]},
StateData) -> #state{room = Room, host = Host, server_host = ServerHost} = StateData) ->
BareJID = jid:remove_resource(From), BareJID = jid:remove_resource(From),
LBareJID = jid:tolower(BareJID), LBareJID = jid:tolower(BareJID),
try maps:get(LBareJID, StateData#state.subscribers) of try maps:get(LBareJID, StateData#state.subscribers) of
@ -4067,6 +4069,7 @@ process_iq_mucsub(From, #iq{type = set, sub_els = [#muc_unsubscribe{}]},
subscriber_nicks = Nicks}, subscriber_nicks = Nicks},
store_room(NewStateData, [{del_subscription, LBareJID}]), store_room(NewStateData, [{del_subscription, LBareJID}]),
send_subscriptions_change_notifications(BareJID, Nick, unsubscribe, StateData), send_subscriptions_change_notifications(BareJID, Nick, unsubscribe, StateData),
ejabberd_hooks:run(muc_unsubscribed, ServerHost, [ServerHost, Room, Host, BareJID]),
NewStateData2 = case close_room_if_temporary_and_empty(NewStateData) of NewStateData2 = case close_room_if_temporary_and_empty(NewStateData) of
{stop, normal, _} -> stop; {stop, normal, _} -> stop;
{next_state, normal_state, SD} -> SD {next_state, normal_state, SD} -> SD