mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-30 16:36:29 +01:00
mod_push_mnesia: Apply cosmetic changes
Improve the readability of the 'max_user_sessions' check.
This commit is contained in:
parent
508f3ef88d
commit
c6a9c30f1c
@ -52,11 +52,7 @@ store_session(LUser, LServer, TS, PushJID, Node, XData) ->
|
|||||||
PushLJID = jid:tolower(PushJID),
|
PushLJID = jid:tolower(PushJID),
|
||||||
MaxSessions = ejabberd_sm:get_max_user_sessions(LUser, LServer),
|
MaxSessions = ejabberd_sm:get_max_user_sessions(LUser, LServer),
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
if is_integer(MaxSessions) ->
|
enforce_max_sessions(US, MaxSessions),
|
||||||
enforce_max_sessions(US, MaxSessions - 1);
|
|
||||||
MaxSessions == infinity ->
|
|
||||||
ok
|
|
||||||
end,
|
|
||||||
mnesia:write(#push_session{us = US,
|
mnesia:write(#push_session{us = US,
|
||||||
timestamp = TS,
|
timestamp = TS,
|
||||||
service = PushLJID,
|
service = PushLJID,
|
||||||
@ -185,19 +181,21 @@ transform({push_session, US, TS, Service, Node, XData}) ->
|
|||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Internal functions.
|
%% Internal functions.
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-spec enforce_max_sessions({binary(), binary()}, non_neg_integer()) -> ok.
|
-spec enforce_max_sessions({binary(), binary()}, non_neg_integer() | infinity)
|
||||||
enforce_max_sessions({U, S} = US, Max) ->
|
-> ok.
|
||||||
Recs = mnesia:wread({push_session, US}),
|
enforce_max_sessions(_US, infinity) ->
|
||||||
NumRecs = length(Recs),
|
ok;
|
||||||
if NumRecs > Max ->
|
enforce_max_sessions({U, S} = US, MaxSessions) ->
|
||||||
NumOldRecs = NumRecs - Max,
|
case mnesia:wread({push_session, US}) of
|
||||||
Recs1 = lists:keysort(#push_session.timestamp, Recs),
|
Recs when length(Recs) >= MaxSessions ->
|
||||||
Recs2 = lists:reverse(Recs1),
|
Recs1 = lists:sort(fun(#push_session{timestamp = TS1},
|
||||||
OldRecs = lists:sublist(Recs2, Max + 1, NumOldRecs),
|
#push_session{timestamp = TS2}) ->
|
||||||
?INFO_MSG("Disabling ~B old push session(s) of ~s@~s",
|
TS1 >= TS2
|
||||||
[NumOldRecs, U, S]),
|
end, Recs),
|
||||||
|
OldRecs = lists:nthtail(MaxSessions - 1, Recs1),
|
||||||
|
?INFO_MSG("Disabling old push session(s) of ~s@~s", [U, S]),
|
||||||
lists:foreach(fun(Rec) -> mnesia:delete_object(Rec) end, OldRecs);
|
lists:foreach(fun(Rec) -> mnesia:delete_object(Rec) end, OldRecs);
|
||||||
true ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user