aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Ignatenko <gelraen.ua@gmail.com>2011-09-26 11:13:40 +0300
committerMaxim Ignatenko <gelraen.ua@gmail.com>2011-09-26 11:16:30 +0300
commitf17a531e15ecc44c3656c90811b4bacc2c2b38c4 (patch)
treecb21e68ea892c019a940c2ef3babde5eaf47074f
parentApply patch from Evgeniy Khramtsov (diff)
Use treap correctly
-rw-r--r--src/mod_muc/mod_muc_room.erl30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index 5c75ba571..c4220ff53 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -306,16 +306,15 @@ normal_state({route, From, "",
#config.voice_request_min_interval,
BareFrom = jlib:jid_remove_resource(
jlib:jid_tolower(From)),
- LastTime = last_voice_request_time(
+ {LastTime, NewStateData1} = last_voice_request_time(
BareFrom, StateData),
TimeFromLastRequest =
- timer:now_diff(
- now(), LastTime) div 1000000,
+ (now_to_usec(now()) - LastTime) div 1000000,
if TimeFromLastRequest > MinInterval ->
send_voice_request(
- From, StateData),
+ From, NewStateData1),
update_voice_request_time(
- BareFrom, StateData);
+ BareFrom, NewStateData1);
true ->
ErrText = "Please, wait for "
"a while before sending "
@@ -327,7 +326,7 @@ normal_state({route, From, "",
ejabberd_router:route(
StateData#state.jid,
From, Err),
- StateData
+ NewStateData1
end;
false ->
ErrText = "Voice requests are "
@@ -1579,10 +1578,7 @@ remove_online_user(JID, StateData, Reason) ->
error ->
StateData#state.nicks
end,
- LastTimes = treap:delete(jlib:jid_remove_resource(LJID),
- StateData#state.last_voice_request_time),
- StateData#state{users = Users, nicks = Nicks,
- last_voice_request_time = LastTimes}.
+ StateData#state{users = Users, nicks = Nicks}.
filter_presence({xmlelement, "presence", Attrs, Els}) ->
@@ -3848,17 +3844,21 @@ extract_jid_from_voice_approvement(Els) ->
end, error, Els).
last_voice_request_time(BareJID, StateData) ->
+ Timeout = (StateData#state.config)#config.voice_request_min_interval,
+ Times = clean_treap(StateData#state.last_voice_request_time,
+ -now_to_usec(now()) + Timeout*1000000),
+ NewStateData = StateData#state{last_voice_request_time = Times},
case treap:lookup(BareJID, StateData#state.last_voice_request_time) of
- {ok, _, Value} ->
- Value;
+ {ok, Value, _} ->
+ {-Value, NewStateData};
error ->
- {0, 0, 0}
+ {0, NewStateData}
end.
update_voice_request_time(BareJID, StateData) ->
- NewDict = treap:insert(BareJID, {0, 0}, erlang:now(),
+ Times = treap:insert(BareJID, -now_to_usec(now()), true,
StateData#state.last_voice_request_time),
- StateData#state{last_voice_request_time = NewDict}.
+ StateData#state{last_voice_request_time = Times}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Invitation support