From 6cbde7894ab9633aff43e816a84d3188c4f079b2 Mon Sep 17 00:00:00 2001 From: lilia Date: Fri, 19 Dec 2014 17:15:57 -0800 Subject: [PATCH] Delivery receipts --- js/background.js | 19 +++++++++++++++++++ js/models/conversations.js | 9 +++++++++ js/models/messages.js | 10 ++++++++++ 3 files changed, 38 insertions(+) diff --git a/js/background.js b/js/background.js index f36d255b1..7d440df7b 100644 --- a/js/background.js +++ b/js/background.js @@ -158,6 +158,25 @@ function onDeliveryReceipt(pushMessage) { console.log('delivery receipt', pushMessage.source, timestamp); + var timestamp = pushMessage.timestamp.toNumber(); + var messages = new Whisper.MessageCollection(); + var groups = new Whisper.ConversationCollection(); + messages.fetchSentAt(timestamp).then(function() { + groups.fetchGroups(pushMessage.source).then(function() { + for (var message in messages.where({type: 'outgoing'})) { + var deliveries = message.get('delivered') || 0; + var conversationId = message.get('conversationId'); + if (conversationId === pushMessage.source || groups.get(conversationId)) { + message.save({delivered: deliveries + 1}); + return; + // TODO: consider keeping a list of numbers we've + // successfully delivered to? + } + } + }); + }).fail(function() { + console.log('got delivery receipt for unknown message', pushMessage.source, timestamp); + }); }; })(); diff --git a/js/models/conversations.js b/js/models/conversations.js index e4a3c5110..707aa1b80 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -178,6 +178,15 @@ m.destroy().then(resolve).fail(reject); }); })); + }, + + fetchGroups: function(number) { + return this.fetch({ + index: { + name: 'group', + only: number + } + }); } }); })(); diff --git a/js/models/messages.js b/js/models/messages.js index c425122eb..25cf06757 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -47,6 +47,16 @@ m.destroy().then(resolve).fail(reject); }); })); + }, + + fetchSentAt: function(timestamp) { + return this.fetch({ + index: { + // 'receipt' index on sent_at + name: 'receipt', + only: timestamp + } + }); } }); })()