diff options
Diffstat (limited to 'src/mod_offline.erl')
-rw-r--r-- | src/mod_offline.erl | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/mod_offline.erl b/src/mod_offline.erl index 1c6e0baba..dfa2f46c2 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -530,8 +530,9 @@ webadmin_page(Acc, _, _) -> Acc. user_queue(User, Server, Query, Lang) -> US = {jlib:nodeprep(User), jlib:nameprep(Server)}, Res = user_queue_parse_query(US, Query), - Msgs = lists:keysort(#offline_msg.timestamp, - mnesia:dirty_read({offline_msg, US})), + MsgsAll = lists:keysort(#offline_msg.timestamp, + mnesia:dirty_read({offline_msg, US})), + Msgs = get_messages_subset(User, Server, MsgsAll), FMsgs = lists:map( fun(#offline_msg{timestamp = TimeStamp, from = From, to = To, @@ -616,6 +617,27 @@ us_to_list({User, Server}) -> get_queue_length(User, Server) -> length(mnesia:dirty_read({offline_msg, {User, Server}})). +get_messages_subset(User, Host, MsgsAll) -> + Access = gen_mod:get_module_opt(Host, ?MODULE, access_max_user_messages, + max_user_offline_messages), + MaxOfflineMsgs = case get_max_user_messages(Access, User, Host) of + Number when is_integer(Number) -> Number; + _ -> 100 + end, + Length = length(MsgsAll), + get_messages_subset2(MaxOfflineMsgs, Length, MsgsAll). + +get_messages_subset2(Max, Length, MsgsAll) when Length =< Max*2 -> + MsgsAll; +get_messages_subset2(Max, Length, MsgsAll) -> + FirstN = Max, + {MsgsFirstN, Msgs2} = lists:split(FirstN, MsgsAll), + MsgsLastN = lists:nthtail(Length - FirstN - FirstN, Msgs2), + NoJID = jlib:make_jid("...", "...", ""), + IntermediateMsg = #offline_msg{timestamp = now(), from = NoJID, to = NoJID, + packet = {xmlelement, "...", [], []}}, + MsgsFirstN ++ [IntermediateMsg] ++ MsgsLastN. + webadmin_user(Acc, User, Server, Lang) -> QueueLen = get_queue_length(jlib:nodeprep(User), jlib:nameprep(Server)), FQueueLen = [?AC("queue/", |