Rework expiring messages management

// FREEBIE
This commit is contained in:
lilia 2017-02-21 15:32:40 -08:00
parent 08e8c00329
commit e4b9c51f88
6 changed files with 66 additions and 21 deletions

View file

@ -5,12 +5,40 @@
;(function() {
'use strict';
window.Whisper = window.Whisper || {};
Whisper.ExpiringMessages = new (Whisper.MessageCollection.extend({
initialize: function() {
this.on('expired', this.remove);
this.fetchExpiring();
}
}))();
function destroyExpiredMessages() {
// Load messages that have expired and destroy them
var expired = new Whisper.MessageCollection();
expired.on('add', function(message) {
console.log('message', message.get('sent_at'), 'expired');
message.destroy();
message.getConversation().trigger('expired', message);
});
expired.on('reset', checkExpiringMessages);
expired.fetchExpired();
}
var timeout;
function checkExpiringMessages() {
// Look up the next expiring message and set a timer to destroy it
var expiring = new Whisper.MessageCollection();
expiring.once('add', function(next) {
var expires_at = next.get('expires_at');
console.log('next message expires', new Date(expires_at));
var wait = expires_at - Date.now();
if (wait < 0) { wait = 0; }
clearTimeout(timeout);
timeout = setTimeout(destroyExpiredMessages, wait);
});
expiring.fetchNextExpiring();
}
window.ExpiringMessagesListener = {
update: checkExpiringMessages
};
var TimerOption = Backbone.Model.extend({
getName: function() {