odoo.define('mail.model.Timers', function (require) { "use strict"; var Timer = require('mail.model.Timer'); var Class = require('web.Class'); /** * This class lists several timers that use a same callback and duration. */ var Timers = Class.extend({ /** * Instantiate a new list of timers * * @param {Object} params * @param {integer} params.duration duration of the underlying timers from * start to timeout, in milli-seconds. * @param {function} params.onTimeout a function to call back for underlying * timers on timeout. */ init: function (params) { this._duration = params.duration; this._timeoutCallback = params.onTimeout; this._timers = {}; }, //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- /** * Register a timer with ID `timerID` to start. * * - an already registered timer with this ID is reset. * - (optional) can provide a list of arguments that is passed to the * function callback when timer times out. * * @param {Object} params * @param {Array} [params.timeoutCallbackArguments] * @param {integer} params.timerID */ registerTimer: function (params) { var timerID = params.timerID; if (this._timers[timerID]) { this._timers[timerID].clear(); } var timerParams = { duration: this._duration, onTimeout: this._timeoutCallback, }; if ('timeoutCallbackArguments' in params) { timerParams.onTimeout = this._timeoutCallback.bind.apply( this._timeoutCallback, [null].concat(params.timeoutCallbackArguments) ); } else { timerParams.onTimeout = this._timeoutCallback; } this._timers[timerID] = new Timer(timerParams); this._timers[timerID].start(); }, /** * Unregister a timer with ID `timerID`. The unregistered timer is aborted * and will not time out. * * @param {Object} params * @param {integer} params.timerID */ unregisterTimer: function (params) { var timerID = params.timerID; if (this._timers[timerID]) { this._timers[timerID].clear(); delete this._timers[timerID]; } }, }); return Timers; });