diff options
author | Maxim Ignatenko <gelraen.ua@gmail.com> | 2011-09-26 11:13:40 +0300 |
---|---|---|
committer | Maxim Ignatenko <gelraen.ua@gmail.com> | 2011-09-26 11:16:30 +0300 |
commit | f17a531e15ecc44c3656c90811b4bacc2c2b38c4 (patch) | |
tree | cb21e68ea892c019a940c2ef3babde5eaf47074f | |
parent | Apply patch from Evgeniy Khramtsov (diff) |
Use treap correctly
-rw-r--r-- | src/mod_muc/mod_muc_room.erl | 30 |
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 |