summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/js/models/utils/timers.js
diff options
context:
space:
mode:
authorAlexandre Kühn <aku@odoo.com>2018-12-05 14:35:26 +0000
committerAlexandre Kühn <aku@odoo.com>2018-12-06 16:18:09 +0000
commit15bbadb69b1b26404a614736c3cde7980d3c1dfd (patch)
tree81dd1957900c612d5a06830f172b685b1326f11e /addons/mail/static/src/js/models/utils/timers.js
parent50dfa865ea32c88d55e7eb0fce6a6ae978c9c3b4 (diff)
[REF] im_livechat, mail, website_livechat: clean mail model folder
The utility classes `Timer`, `Timers` and `CCThrottleFunction` were only used by the feature 'is typing...', thus all those files were in the same folder. This commit moves the utility classes in a dedicated folder, and introduces a folder for thread mixins, in preparation for future features on threads that will be implemented as mixins.
Diffstat (limited to 'addons/mail/static/src/js/models/utils/timers.js')
-rw-r--r--addons/mail/static/src/js/models/utils/timers.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/addons/mail/static/src/js/models/utils/timers.js b/addons/mail/static/src/js/models/utils/timers.js
new file mode 100644
index 00000000000..757945223f7
--- /dev/null
+++ b/addons/mail/static/src/js/models/utils/timers.js
@@ -0,0 +1,82 @@
+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;
+
+});