mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-26 17:38:45 +01:00
Handle MUC/Sub subscriptions list request
This commit is contained in:
parent
caaf02eaa0
commit
368b202144
@ -429,6 +429,18 @@ do_route1(Host, ServerHost, Access, HistorySize, RoomShaper,
|
|||||||
iq_get_vcard(Lang)}]},
|
iq_get_vcard(Lang)}]},
|
||||||
ejabberd_router:route(To, From,
|
ejabberd_router:route(To, From,
|
||||||
jlib:iq_to_xml(Res));
|
jlib:iq_to_xml(Res));
|
||||||
|
#iq{type = get, xmlns = ?NS_MUCSUB,
|
||||||
|
sub_el = #xmlel{name = <<"subscriptions">>} = SubEl} = IQ ->
|
||||||
|
RoomJIDs = get_subscribed_rooms(ServerHost, Host, From),
|
||||||
|
Subs = lists:map(
|
||||||
|
fun(J) ->
|
||||||
|
#xmlel{name = <<"subscription">>,
|
||||||
|
attrs = [{<<"jid">>,
|
||||||
|
jid:to_string(J)}]}
|
||||||
|
end, RoomJIDs),
|
||||||
|
Res = IQ#iq{type = result,
|
||||||
|
sub_el = [SubEl#xmlel{children = Subs}]},
|
||||||
|
ejabberd_router:route(To, From, jlib:iq_to_xml(Res));
|
||||||
#iq{type = get, xmlns = ?NS_MUC_UNIQUE} = IQ ->
|
#iq{type = get, xmlns = ?NS_MUC_UNIQUE} = IQ ->
|
||||||
Res = IQ#iq{type = result,
|
Res = IQ#iq{type = result,
|
||||||
sub_el =
|
sub_el =
|
||||||
@ -698,6 +710,19 @@ get_vh_rooms(Host, #rsm_in{max=M, direction=Direction, id=I, index=Index})->
|
|||||||
index = NewIndex}}
|
index = NewIndex}}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
get_subscribed_rooms(ServerHost, Host, From) ->
|
||||||
|
Rooms = get_rooms(ServerHost, Host),
|
||||||
|
lists:flatmap(
|
||||||
|
fun(#muc_room{name_host = {Name, _}, opts = Opts}) ->
|
||||||
|
Subscribers = proplists:get_value(subscribers, Opts, []),
|
||||||
|
case lists:keymember(From, 1, Subscribers) of
|
||||||
|
true -> [jid:make(Name, Host, <<>>)];
|
||||||
|
false -> []
|
||||||
|
end;
|
||||||
|
(_) ->
|
||||||
|
[]
|
||||||
|
end, Rooms).
|
||||||
|
|
||||||
%% @doc Return the position of desired room in the list of rooms.
|
%% @doc Return the position of desired room in the list of rooms.
|
||||||
%% The room must exist in the list. The count starts in 0.
|
%% The room must exist in the list. The count starts in 0.
|
||||||
%% @spec (Desired::muc_online_room(), Rooms::[muc_online_room()]) -> integer()
|
%% @spec (Desired::muc_online_room(), Rooms::[muc_online_room()]) -> integer()
|
||||||
|
Loading…
Reference in New Issue
Block a user