read_receipts.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * vim: ts=4:sw=4:expandtab
  3. */
  4. ;(function() {
  5. 'use strict';
  6. window.Whisper = window.Whisper || {};
  7. Whisper.ReadReceipts = new (Backbone.Collection.extend({
  8. initialize: function() {
  9. this.on('add', this.onReceipt);
  10. },
  11. forMessage: function(message) {
  12. var receipt = this.findWhere({
  13. sender: message.get('source'),
  14. timestamp: message.get('sent_at')
  15. });
  16. if (receipt) {
  17. console.log('Found early read receipt for message');
  18. this.remove(receipt);
  19. return receipt;
  20. }
  21. },
  22. onReceipt: function(receipt) {
  23. var messages = new Whisper.MessageCollection();
  24. messages.fetchSentAt(receipt.get('timestamp')).then(function() {
  25. var message = messages.find(function(message) {
  26. return (message.isIncoming() && message.isUnread() &&
  27. message.get('source') === receipt.get('sender'));
  28. });
  29. if (message) {
  30. this.remove(receipt);
  31. message.markRead(receipt.get('read_at')).then(function() {
  32. var conversation = ConversationController.get({
  33. id: message.get('conversationId')
  34. });
  35. if (conversation) {
  36. // notify frontend listeners
  37. conversation.trigger('read', message);
  38. }
  39. });
  40. } else {
  41. console.log('No message for read receipt');
  42. }
  43. }.bind(this));
  44. }
  45. }))();
  46. })();