diff options
author | Badlop <badlop@process-one.net> | 2010-01-12 23:58:22 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2010-01-12 23:58:22 +0000 |
commit | 9f5246cacc39f598ab64ca1da0ffa5a80da17103 (patch) | |
tree | f1f12bec0cb0023a347730e67f3e9f394f1ba4a9 /src/mod_offline_odbc.erl | |
parent | Fix explanation of access_max_user_messages. (diff) |
If big offline message queue, show only subset on WebAdmin (EJAB-1095)
SVN Revision: 2896
Diffstat (limited to 'src/mod_offline_odbc.erl')
-rw-r--r-- | src/mod_offline_odbc.erl | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/mod_offline_odbc.erl b/src/mod_offline_odbc.erl index 5ece191b1..c89beda4e 100644 --- a/src/mod_offline_odbc.erl +++ b/src/mod_offline_odbc.erl @@ -376,7 +376,7 @@ user_queue(User, Server, Query, Lang) -> Username = ejabberd_odbc:escape(LUser), US = {LUser, LServer}, Res = user_queue_parse_query(Username, LServer, Query), - Msgs = case catch ejabberd_odbc:sql_query( + MsgsAll = case catch ejabberd_odbc:sql_query( LServer, ["select username, xml from spool" " where username='", Username, "'" @@ -394,6 +394,7 @@ user_queue(User, Server, Query, Lang) -> _ -> [] end, + Msgs = get_messages_subset(User, Server, MsgsAll), FMsgs = lists:map( fun({xmlelement, _Name, _Attrs, _Els} = Msg) -> @@ -491,6 +492,25 @@ get_queue_length(Username, LServer) -> 0 end. +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), + IntermediateMsg = {xmlelement, "...", [], []}, + MsgsFirstN ++ [IntermediateMsg] ++ MsgsLastN. + webadmin_user(Acc, User, Server, Lang) -> LUser = jlib:nodeprep(User), LServer = jlib:nameprep(Server), |