From 694584ec9fdec46819caad72beffe84d4e437c9f Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Thu, 13 Apr 2017 21:48:32 +0300 Subject: [PATCH] Improved read messages --- app/js/messages_manager.js | 56 ++++++++++++++++------------ app/partials/desktop/chat_modal.html | 5 ++- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 3b07e19b..80451e34 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -1515,7 +1515,9 @@ angular.module('myApp.services') random_id: randomIDS, id: updates.id }, { - _: isChannel ? 'updateNewChannelMessage' : 'updateNewMessage', + _: isChannel + ? 'updateNewChannelMessage' + : 'updateNewMessage', message: message, pts: updates.pts, pts_count: updates.pts_count @@ -2846,9 +2848,21 @@ angular.module('myApp.services') function handleNewDialogs () { $timeout.cancel(newDialogsHandlePromise) newDialogsHandlePromise = false - angular.forEach(newDialogsToHandle, function (dialog) { - pushDialogToStorage(dialog) + var newMaxSeenID = 0 + angular.forEach(newDialogsToHandle, function (dialog, peerID) { + if (dialog.reload) { + reloadConversation(peerID) + delete newDialogsToHandle[peerID] + } else { + pushDialogToStorage(dialog) + if (!AppPeersManager.isChannel(peerID)) { + newMaxSeenID = Math.max(newMaxSeenID, dialog.top_message || 0) + } + } }) + if (newMaxSeenID !== false) { + incrementMaxSeenID(newMaxSeenID) + } $rootScope.$broadcast('dialogs_multiupdate', newDialogsToHandle) newDialogsToHandle = {} } @@ -2898,6 +2912,15 @@ angular.module('myApp.services') var message = update.message var peerID = getMessagePeer(message) var historyStorage = historiesStorage[peerID] + var foundDialog = getDialogByPeerID(peerID) + + if (!foundDialog.length) { + newDialogsToHandle[peerID] = {reload: true} + if (!newDialogsHandlePromise) { + newDialogsHandlePromise = $timeout(handleNewDialogs, 0) + } + break + } if (update._ == 'updateNewChannelMessage') { var chat = AppChatsManager.getChat(-peerID) @@ -2960,23 +2983,11 @@ angular.module('myApp.services') } } - var foundDialog = getDialogByPeerID(peerID) - var dialog var inboxUnread = !message.pFlags.out && message.pFlags.unread - - if (foundDialog.length) { - dialog = foundDialog[0] - dialog.top_message = message.mid - if (inboxUnread) { - dialog.unread_count++ - } - } else { - SearchIndexManager.indexObject(peerID, AppPeersManager.getPeerSearchText(peerID), dialogsIndex) - dialog = { - peerID: peerID, - unread_count: inboxUnread ? 1 : 0, - top_message: message.mid - } + var dialog = foundDialog[0] + dialog.top_message = message.mid + if (inboxUnread) { + dialog.unread_count++ } dialog.index = generateDialogIndex(message.date) @@ -3011,10 +3022,6 @@ angular.module('myApp.services') notificationsHandlePromise = $timeout(handleNotifications, 1000) } } - - if (!AppPeersManager.isChannel(peerID)) { - incrementMaxSeenID(message.id) - } break case 'updateEditMessage': @@ -3325,8 +3332,9 @@ angular.module('myApp.services') var hasUpdated = false angular.forEach(dialogsResult.dialogs, function (dialog) { if (dialog.top_message) { + var wasBefore = getDialogByPeerID(dialog.peerID).length > 0 saveConversation(dialog) - if (getDialogByPeerID(dialog.peerID).length) { + if (wasBefore) { $rootScope.$broadcast('dialog_top', dialog) } else { updatedDialogs[dialog.peerID] = dialog diff --git a/app/partials/desktop/chat_modal.html b/app/partials/desktop/chat_modal.html index 2ba39384..05f47804 100644 --- a/app/partials/desktop/chat_modal.html +++ b/app/partials/desktop/chat_modal.html @@ -70,8 +70,9 @@