remove read sync as we do not care about them on Session
							parent
							
								
									1ff836865a
								
							
						
					
					
						commit
						0b814d4d16
					
				@ -1,89 +0,0 @@
 | 
			
		||||
/* global
 | 
			
		||||
  Backbone,
 | 
			
		||||
  Whisper,
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* eslint-disable more/no-then */
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line func-names
 | 
			
		||||
(function() {
 | 
			
		||||
  'use strict';
 | 
			
		||||
 | 
			
		||||
  window.Whisper = window.Whisper || {};
 | 
			
		||||
  Whisper.ReadSyncs = new (Backbone.Collection.extend({
 | 
			
		||||
    forMessage(message) {
 | 
			
		||||
      const receipt = this.findWhere({
 | 
			
		||||
        sender: message.get('source'),
 | 
			
		||||
        timestamp: message.get('sent_at'),
 | 
			
		||||
      });
 | 
			
		||||
      if (receipt) {
 | 
			
		||||
        window.log.info('Found early read sync for message');
 | 
			
		||||
        this.remove(receipt);
 | 
			
		||||
        return receipt;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return null;
 | 
			
		||||
    },
 | 
			
		||||
    async onReceipt(receipt) {
 | 
			
		||||
      try {
 | 
			
		||||
        const messages = await window.Signal.Data.getMessagesBySentAt(receipt.get('timestamp'));
 | 
			
		||||
 | 
			
		||||
        const found = messages.find(
 | 
			
		||||
          item => item.isIncoming() && item.get('source') === receipt.get('sender')
 | 
			
		||||
        );
 | 
			
		||||
        const notificationForMessage = found
 | 
			
		||||
          ? Whisper.Notifications.findWhere({ messageId: found.id })
 | 
			
		||||
          : null;
 | 
			
		||||
        const removedNotification = Whisper.Notifications.remove(notificationForMessage);
 | 
			
		||||
        const receiptSender = receipt.get('sender');
 | 
			
		||||
        const receiptTimestamp = receipt.get('timestamp');
 | 
			
		||||
        const wasMessageFound = Boolean(found);
 | 
			
		||||
        const wasNotificationFound = Boolean(notificationForMessage);
 | 
			
		||||
        const wasNotificationRemoved = Boolean(removedNotification);
 | 
			
		||||
        window.log.info('Receive read sync:', {
 | 
			
		||||
          receiptSender,
 | 
			
		||||
          receiptTimestamp,
 | 
			
		||||
          wasMessageFound,
 | 
			
		||||
          wasNotificationFound,
 | 
			
		||||
          wasNotificationRemoved,
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (!found) {
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const readAt = receipt.get('read_at');
 | 
			
		||||
 | 
			
		||||
        // If message is unread, we mark it read. Otherwise, we update the expiration
 | 
			
		||||
        //   timer to the time specified by the read sync if it's earlier than
 | 
			
		||||
        //   the previous read time.
 | 
			
		||||
        if (found.isUnread() && window.isFocused()) {
 | 
			
		||||
          await found.markRead(readAt);
 | 
			
		||||
 | 
			
		||||
          // onReadMessage may result in messages older than this one being
 | 
			
		||||
          //   marked read. We want those messages to have the same expire timer
 | 
			
		||||
          //   start time as this one, so we pass the readAt value through.
 | 
			
		||||
          const conversation = found.getConversation();
 | 
			
		||||
          if (conversation) {
 | 
			
		||||
            conversation.onReadMessage(found, readAt);
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          const now = Date.now();
 | 
			
		||||
          const existingTimestamp = found.get('expirationStartTimestamp');
 | 
			
		||||
          const expirationStartTimestamp = Math.min(
 | 
			
		||||
            now,
 | 
			
		||||
            Math.min(existingTimestamp || now, readAt || now)
 | 
			
		||||
          );
 | 
			
		||||
          found.set({ expirationStartTimestamp });
 | 
			
		||||
 | 
			
		||||
          const force = true;
 | 
			
		||||
          await found.setToExpire(force);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.remove(receipt);
 | 
			
		||||
      } catch (error) {
 | 
			
		||||
        window.log.error('ReadSyncs.onReceipt error:', error && error.stack ? error.stack : error);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
  }))();
 | 
			
		||||
})();
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue