Positioning to unread messages in chat
This commit is contained in:
parent
a89d2ad3b1
commit
f1b1e0ea96
@ -896,6 +896,13 @@ a.im_dialog:hover .im_dialog_date {
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
.im_message_unread_split {
|
||||||
|
background: #E9EBED;
|
||||||
|
text-align: center;
|
||||||
|
padding: 4px 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.im_message_author {
|
.im_message_author {
|
||||||
|
@ -447,12 +447,12 @@ angular.module('myApp.controllers', [])
|
|||||||
inputMediaFilter = $scope.mediaType && {_: inputMediaFilters[$scope.mediaType]},
|
inputMediaFilter = $scope.mediaType && {_: inputMediaFilters[$scope.mediaType]},
|
||||||
getMessagesPromise = inputMediaFilter
|
getMessagesPromise = inputMediaFilter
|
||||||
? AppMessagesManager.getSearch($scope.curDialog.inputPeer, '', inputMediaFilter, maxID, startLimit)
|
? AppMessagesManager.getSearch($scope.curDialog.inputPeer, '', inputMediaFilter, maxID, startLimit)
|
||||||
: AppMessagesManager.getHistory($scope.curDialog.inputPeer, maxID, startLimit);
|
: AppMessagesManager.getHistory($scope.curDialog.inputPeer, maxID);
|
||||||
|
|
||||||
getMessagesPromise.then(function (historyResult) {
|
getMessagesPromise.then(function (historyResult) {
|
||||||
if (curJump != jump) return;
|
if (curJump != jump) return;
|
||||||
|
|
||||||
offset += startLimit;
|
offset += historyResult.history.length;
|
||||||
hasMore = offset < historyResult.count;
|
hasMore = offset < historyResult.count;
|
||||||
maxID = historyResult.history[historyResult.history.length - 1];
|
maxID = historyResult.history[historyResult.history.length - 1];
|
||||||
|
|
||||||
@ -462,6 +462,15 @@ angular.module('myApp.controllers', [])
|
|||||||
});
|
});
|
||||||
$scope.history.reverse();
|
$scope.history.reverse();
|
||||||
|
|
||||||
|
if (historyResult.unreadLimit) {
|
||||||
|
$scope.historyUnread = {
|
||||||
|
beforeID: historyResult.history[historyResult.unreadLimit - 1],
|
||||||
|
count: historyResult.unreadLimit
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
$scope.historyUnread = {};
|
||||||
|
}
|
||||||
|
|
||||||
safeReplaceObject($scope.state, {loaded: true});
|
safeReplaceObject($scope.state, {loaded: true});
|
||||||
|
|
||||||
$scope.$broadcast('ui_history_change');
|
$scope.$broadcast('ui_history_change');
|
||||||
@ -589,6 +598,8 @@ angular.module('myApp.controllers', [])
|
|||||||
$scope.history.push(AppMessagesManager.wrapForHistory(addedMessage.messageID));
|
$scope.history.push(AppMessagesManager.wrapForHistory(addedMessage.messageID));
|
||||||
$scope.typing = {};
|
$scope.typing = {};
|
||||||
$scope.$broadcast('ui_history_append', {my: addedMessage.my});
|
$scope.$broadcast('ui_history_append', {my: addedMessage.my});
|
||||||
|
$scope.historyUnread = {};
|
||||||
|
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
// console.log('append check', $rootScope.idle.isIDLE, addedMessage.peerID, $scope.curDialog.peerID);
|
// console.log('append check', $rootScope.idle.isIDLE, addedMessage.peerID, $scope.curDialog.peerID);
|
||||||
|
@ -215,8 +215,16 @@ angular.module('myApp.directives', ['myApp.filters'])
|
|||||||
onContentLoaded(function () {
|
onContentLoaded(function () {
|
||||||
$(scrollableWrap).removeClass('im_history_to_bottom');
|
$(scrollableWrap).removeClass('im_history_to_bottom');
|
||||||
$(scrollable).css({bottom: ''});
|
$(scrollable).css({bottom: ''});
|
||||||
updateSizes();
|
updateSizes(true);
|
||||||
scrollableWrap.scrollTop = scrollableWrap.scrollHeight;
|
|
||||||
|
var unreadSplit = $('.im_message_unread_split', scrollableWrap);
|
||||||
|
if (unreadSplit[0]) {
|
||||||
|
scrollableWrap.scrollTop = unreadSplit[0].offsetTop;
|
||||||
|
atBottom = false;
|
||||||
|
} else {
|
||||||
|
scrollableWrap.scrollTop = scrollableWrap.scrollHeight;
|
||||||
|
}
|
||||||
|
|
||||||
updateScroller();
|
updateScroller();
|
||||||
moreNotified = false;
|
moreNotified = false;
|
||||||
});
|
});
|
||||||
|
@ -748,6 +748,46 @@ angular.module('myApp.services', [])
|
|||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fillHistoryStorage (inputPeer, maxID, fullLimit, historyStorage) {
|
||||||
|
return MtpApiManager.invokeApi('messages.getHistory', {
|
||||||
|
peer: inputPeer,
|
||||||
|
offset: 0,
|
||||||
|
limit: fullLimit,
|
||||||
|
max_id: maxID || 0
|
||||||
|
}).then(function (historyResult) {
|
||||||
|
AppUsersManager.saveApiUsers(historyResult.users);
|
||||||
|
AppChatsManager.saveApiChats(historyResult.chats);
|
||||||
|
saveMessages(historyResult.messages);
|
||||||
|
|
||||||
|
historyStorage.count = historyResult._ == 'messages.messagesSlice'
|
||||||
|
? historyResult.count
|
||||||
|
: historyResult.messages.length;
|
||||||
|
|
||||||
|
var offset = 0;
|
||||||
|
if (maxID > 0) {
|
||||||
|
for (offset = 0; offset < historyStorage.history.length; offset++) {
|
||||||
|
if (maxID > historyStorage.history[offset]) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
historyStorage.history.splice(offset, historyStorage.history.length - offset);
|
||||||
|
angular.forEach(historyResult.messages, function (message) {
|
||||||
|
historyStorage.history.push(message.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
fullLimit -= historyResult.messages.length;
|
||||||
|
|
||||||
|
if (fullLimit > 0 && historyStorage.history.length < historyStorage.count) {
|
||||||
|
maxID = historyStorage.history[historyStorage.history.length - 1];
|
||||||
|
return fillHistoryStorage(inputPeer, maxID, fullLimit, historyStorage);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
function getHistory (inputPeer, maxID, limit) {
|
function getHistory (inputPeer, maxID, limit) {
|
||||||
|
|
||||||
var peerID = AppPeersManager.getPeerID(inputPeer),
|
var peerID = AppPeersManager.getPeerID(inputPeer),
|
||||||
@ -762,6 +802,17 @@ angular.module('myApp.services', [])
|
|||||||
resultPending = historyStorage.pending.slice();
|
resultPending = historyStorage.pending.slice();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var unreadLimit = false;
|
||||||
|
if (!limit && !maxID) {
|
||||||
|
var foundDialog = getDialogByPeerID(peerID);
|
||||||
|
if (foundDialog && foundDialog[0] && foundDialog[0].unread_count > 0) {
|
||||||
|
unreadLimit = foundDialog[0].unread_count;
|
||||||
|
limit = Math.max(20, unreadLimit + 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!limit) {
|
||||||
|
limit = 20;
|
||||||
|
}
|
||||||
|
|
||||||
if (maxID > 0) {
|
if (maxID > 0) {
|
||||||
for (offset = 0; offset < historyStorage.history.length; offset++) {
|
for (offset = 0; offset < historyStorage.history.length; offset++) {
|
||||||
@ -770,7 +821,6 @@ angular.module('myApp.services', [])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// console.log('history storage', angular.copy(historyStorage.history), maxID, offset);
|
|
||||||
|
|
||||||
if (historyStorage.count !== null && (
|
if (historyStorage.count !== null && (
|
||||||
historyStorage.history.length >= offset + limit ||
|
historyStorage.history.length >= offset + limit ||
|
||||||
@ -778,26 +828,12 @@ angular.module('myApp.services', [])
|
|||||||
)) {
|
)) {
|
||||||
return $q.when({
|
return $q.when({
|
||||||
count: historyStorage.count,
|
count: historyStorage.count,
|
||||||
history: resultPending.concat(historyStorage.history.slice(offset, offset + limit))
|
history: resultPending.concat(historyStorage.history.slice(offset, offset + limit)),
|
||||||
|
unreadLimit: unreadLimit
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var deferred = $q.defer();
|
return fillHistoryStorage(inputPeer, maxID, limit, historyStorage).then(function () {
|
||||||
|
|
||||||
MtpApiManager.invokeApi('messages.getHistory', {
|
|
||||||
peer: inputPeer,
|
|
||||||
offset: offset,
|
|
||||||
limit: limit,
|
|
||||||
max_id: maxID || 0
|
|
||||||
}).then(function (historyResult) {
|
|
||||||
AppUsersManager.saveApiUsers(historyResult.users);
|
|
||||||
AppChatsManager.saveApiChats(historyResult.chats);
|
|
||||||
saveMessages(historyResult.messages);
|
|
||||||
|
|
||||||
historyStorage.count = historyResult._ == 'messages.messagesSlice'
|
|
||||||
? historyResult.count
|
|
||||||
: historyResult.messages.length;
|
|
||||||
|
|
||||||
offset = 0;
|
offset = 0;
|
||||||
if (maxID > 0) {
|
if (maxID > 0) {
|
||||||
for (offset = 0; offset < historyStorage.history.length; offset++) {
|
for (offset = 0; offset < historyStorage.history.length; offset++) {
|
||||||
@ -807,23 +843,12 @@ angular.module('myApp.services', [])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log('history storage after', angular.copy(historyStorage.history), historyResult.messages, maxID, offset);
|
return {
|
||||||
|
|
||||||
historyStorage.history.splice(offset, historyStorage.history.length - offset);
|
|
||||||
angular.forEach(historyResult.messages, function (message) {
|
|
||||||
historyStorage.history.push(message.id);
|
|
||||||
});
|
|
||||||
// console.log('history storage final', angular.copy(historyStorage.history), historyResult.messages, maxID, offset);
|
|
||||||
|
|
||||||
deferred.resolve({
|
|
||||||
count: historyStorage.count,
|
count: historyStorage.count,
|
||||||
history: resultPending.concat(historyStorage.history.slice(offset, offset + limit))
|
history: resultPending.concat(historyStorage.history.slice(offset, offset + limit)),
|
||||||
});
|
unreadLimit: unreadLimit
|
||||||
}, function (error) {
|
};
|
||||||
deferred.reject(error);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSearch (inputPeer, query, inputFilter, maxID, limit) {
|
function getSearch (inputPeer, query, inputFilter, maxID, limit) {
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
<div class="im_message_unread_split" ng-if="historyUnread && historyUnread.beforeID == historyMessage.id">
|
||||||
|
<ng-pluralize count="historyUnread.count"
|
||||||
|
when="{'one': '1 unread message', 'other': '{} unread messages'}">
|
||||||
|
</ng-pluralize>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="im_message_outer_wrap" ng-class="{im_message_selected: selectedMsgs[historyMessage.id]}" ng-click="toggleMessage(historyMessage.id, $event.target)">
|
<div class="im_message_outer_wrap" ng-class="{im_message_selected: selectedMsgs[historyMessage.id]}" ng-click="toggleMessage(historyMessage.id, $event.target)">
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user