50 lines
		
	
	
	
		
			1.8 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
	
		
			1.8 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * vim: ts=4:sw=4:expandtab
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								;(function() {
							 | 
						||
| 
								 | 
							
								    'use strict';
							 | 
						||
| 
								 | 
							
								    window.Whisper = window.Whisper || {};
							 | 
						||
| 
								 | 
							
								    Whisper.ReadSyncs = new (Backbone.Collection.extend({
							 | 
						||
| 
								 | 
							
								        forMessage: function(message) {
							 | 
						||
| 
								 | 
							
								            var receipt = this.findWhere({
							 | 
						||
| 
								 | 
							
								                sender: message.get('source'),
							 | 
						||
| 
								 | 
							
								                timestamp: message.get('sent_at')
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								            if (receipt) {
							 | 
						||
| 
								 | 
							
								                console.log('Found early read sync for message');
							 | 
						||
| 
								 | 
							
								                this.remove(receipt);
							 | 
						||
| 
								 | 
							
								                return receipt;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        onReceipt: function(receipt) {
							 | 
						||
| 
								 | 
							
								            var messages  = new Whisper.MessageCollection();
							 | 
						||
| 
								 | 
							
								            return messages.fetchSentAt(receipt.get('timestamp')).then(function() {
							 | 
						||
| 
								 | 
							
								                var message = messages.find(function(message) {
							 | 
						||
| 
								 | 
							
								                    return (message.isIncoming() && message.isUnread() &&
							 | 
						||
| 
								 | 
							
								                            message.get('source') === receipt.get('sender'));
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								                if (message) {
							 | 
						||
| 
								 | 
							
								                    return message.markRead(receipt.get('read_at')).then(function() {
							 | 
						||
| 
								 | 
							
								                        this.notifyConversation(message);
							 | 
						||
| 
								 | 
							
								                        this.remove(receipt);
							 | 
						||
| 
								 | 
							
								                    }.bind(this));
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    console.log(
							 | 
						||
| 
								 | 
							
								                        'No message for read sync',
							 | 
						||
| 
								 | 
							
								                        receipt.get('sender'), receipt.get('timestamp')
							 | 
						||
| 
								 | 
							
								                    );
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }.bind(this));
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        notifyConversation: function(message) {
							 | 
						||
| 
								 | 
							
								            var conversation = ConversationController.get({
							 | 
						||
| 
								 | 
							
								                id: message.get('conversationId')
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (conversation) {
							 | 
						||
| 
								 | 
							
								                conversation.onReadMessage(message);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								    }))();
							 | 
						||
| 
								 | 
							
								})();
							 |