Limit number of rooms that we return for disco_items from muc
We will limit it to max_room_discoitems and return rsm that would allow fetching more
This commit is contained in:
parent
f82de80c66
commit
d7e86d1d32
|
@ -829,15 +829,27 @@ iq_disco_items(ServerHost, Host, From, Lang, MaxRoomsDiscoItems, Node, RSM)
|
||||||
true ->
|
true ->
|
||||||
{get_disco_item, all, From, Lang}
|
{get_disco_item, all, From, Lang}
|
||||||
end,
|
end,
|
||||||
Items = lists:flatmap(
|
MaxItems = case RSM of
|
||||||
fun(R) ->
|
undefined ->
|
||||||
case get_room_disco_item(R, Query) of
|
MaxRoomsDiscoItems;
|
||||||
{ok, Item} -> [Item];
|
#rsm_set{max = undefined} ->
|
||||||
{error, _} -> []
|
MaxRoomsDiscoItems;
|
||||||
end
|
#rsm_set{max = Max} when Max > MaxRoomsDiscoItems ->
|
||||||
end, get_online_rooms(ServerHost, Host, RSM)),
|
MaxRoomsDiscoItems;
|
||||||
|
#rsm_set{max = Max} ->
|
||||||
|
Max
|
||||||
|
end,
|
||||||
|
{Items, HitMax} = lists:foldr(
|
||||||
|
fun(_, {Acc, _}) when length(Acc) >= MaxItems ->
|
||||||
|
{Acc, true};
|
||||||
|
(R, {Acc, _}) ->
|
||||||
|
case get_room_disco_item(R, Query) of
|
||||||
|
{ok, Item} -> {[Item | Acc], false};
|
||||||
|
{error, _} -> {Acc, false}
|
||||||
|
end
|
||||||
|
end, {[], false}, get_online_rooms(ServerHost, Host, RSM)),
|
||||||
ResRSM = case Items of
|
ResRSM = case Items of
|
||||||
[_|_] when RSM /= undefined ->
|
[_|_] when RSM /= undefined; HitMax ->
|
||||||
#disco_item{jid = #jid{luser = First}} = hd(Items),
|
#disco_item{jid = #jid{luser = First}} = hd(Items),
|
||||||
#disco_item{jid = #jid{luser = Last}} = lists:last(Items),
|
#disco_item{jid = #jid{luser = Last}} = lists:last(Items),
|
||||||
#rsm_set{first = #rsm_first{data = First},
|
#rsm_set{first = #rsm_first{data = First},
|
||||||
|
|
Loading…
Reference in New Issue