parent
2eec79dd31
commit
fd6ebae7c0
2 changed files with 20 additions and 19 deletions
|
@ -548,7 +548,7 @@ Page {
|
||||||
Connections {
|
Connections {
|
||||||
target: chatModel
|
target: chatModel
|
||||||
onMessagesReceived: {
|
onMessagesReceived: {
|
||||||
Debug.log("[ChatPage] Messages received, view has ", chatView.count, " messages, setting view to index ", modelIndex, ", own messages were read before index ", lastReadSentIndex);
|
Debug.log("[ChatPage] Messages received, view has ", chatView.count, " messages, last known message index ", modelIndex, ", own messages were read before index ", lastReadSentIndex);
|
||||||
if (totalCount === 0) {
|
if (totalCount === 0) {
|
||||||
if (chatPage.iterativeInitialization) {
|
if (chatPage.iterativeInitialization) {
|
||||||
chatPage.iterativeInitialization = false;
|
chatPage.iterativeInitialization = false;
|
||||||
|
|
|
@ -366,22 +366,7 @@ QVariantMap ChatModel::getMessage(int index)
|
||||||
int ChatModel::getLastReadMessageIndex()
|
int ChatModel::getLastReadMessageIndex()
|
||||||
{
|
{
|
||||||
LOG("Obtaining last read message index");
|
LOG("Obtaining last read message index");
|
||||||
if (this->messages.isEmpty()) {
|
return this->calculateLastKnownMessageId();
|
||||||
LOG("Messages are empty, nothing to do...");
|
|
||||||
return 0;
|
|
||||||
} else if (messages.last()->senderUserId() == tdLibWrapper->getUserInformation().value(ID).toInt()) {
|
|
||||||
LOG("Last message is an own one, then simply set the last read to the last one...");
|
|
||||||
return this->messages.size() - 1;
|
|
||||||
} else {
|
|
||||||
const int lastReadMessageIndex = messageIndexMap.value(chatInformation.value(LAST_READ_INBOX_MESSAGE_ID).toLongLong(), -1);
|
|
||||||
if (lastReadMessageIndex < 0) {
|
|
||||||
LOG("Last read message not found in the list of messages. That shouldn't happen, therefore setting the unread indicator to the end of the list.");
|
|
||||||
return this->messages.size() - 1;
|
|
||||||
} else {
|
|
||||||
LOG("Found last read message in the already loaded messages. Index:" << lastReadMessageIndex);
|
|
||||||
return lastReadMessageIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatModel::setSearchQuery(const QString newSearchQuery)
|
void ChatModel::setSearchQuery(const QString newSearchQuery)
|
||||||
|
@ -539,6 +524,7 @@ void ChatModel::handleMessageSendSucceeded(qlonglong messageId, qlonglong oldMes
|
||||||
const QModelIndex messageIndex(index(pos));
|
const QModelIndex messageIndex(index(pos));
|
||||||
emit dataChanged(messageIndex, messageIndex, changedRoles);
|
emit dataChanged(messageIndex, messageIndex, changedRoles);
|
||||||
emit lastReadSentMessageUpdated(calculateLastReadSentMessageId());
|
emit lastReadSentMessageUpdated(calculateLastReadSentMessageId());
|
||||||
|
tdLibWrapper->viewMessage(QString::number(this->chatId), QString::number(messageId), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -756,14 +742,29 @@ int ChatModel::calculateLastKnownMessageId()
|
||||||
LOG("calculateLastKnownMessageId");
|
LOG("calculateLastKnownMessageId");
|
||||||
const qlonglong lastKnownMessageId = this->chatInformation.value(LAST_READ_INBOX_MESSAGE_ID).toLongLong();
|
const qlonglong lastKnownMessageId = this->chatInformation.value(LAST_READ_INBOX_MESSAGE_ID).toLongLong();
|
||||||
LOG("lastKnownMessageId" << lastKnownMessageId);
|
LOG("lastKnownMessageId" << lastKnownMessageId);
|
||||||
|
const int myUserId = tdLibWrapper->getUserInformation().value(ID).toInt();
|
||||||
|
qlonglong lastOwnMessageId = 0;
|
||||||
|
for (int i = (messages.size() - 1); i >= 0; i--) {
|
||||||
|
MessageData *currentMessage = messages.at(i);
|
||||||
|
if (currentMessage->senderUserId() == myUserId) {
|
||||||
|
lastOwnMessageId = currentMessage->messageId;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
LOG("size messageIndexMap" << messageIndexMap.size());
|
LOG("size messageIndexMap" << messageIndexMap.size());
|
||||||
LOG("contains ID?" << messageIndexMap.contains(lastKnownMessageId));
|
LOG("contains last read ID?" << messageIndexMap.contains(lastKnownMessageId));
|
||||||
|
LOG("contains last own ID?" << messageIndexMap.contains(lastOwnMessageId));
|
||||||
int listInboxPosition = messageIndexMap.value(lastKnownMessageId, messages.size() - 1);
|
int listInboxPosition = messageIndexMap.value(lastKnownMessageId, messages.size() - 1);
|
||||||
|
int listOwnPosition = messageIndexMap.value(lastOwnMessageId, messages.size() - 1);
|
||||||
if (listInboxPosition > this->messages.size() - 1 ) {
|
if (listInboxPosition > this->messages.size() - 1 ) {
|
||||||
listInboxPosition = this->messages.size() - 1;
|
listInboxPosition = this->messages.size() - 1;
|
||||||
}
|
}
|
||||||
|
if (listOwnPosition > this->messages.size() - 1 ) {
|
||||||
|
listOwnPosition = this->messages.size() - 1;
|
||||||
|
}
|
||||||
LOG("Last known message is at position" << listInboxPosition);
|
LOG("Last known message is at position" << listInboxPosition);
|
||||||
return listInboxPosition;
|
LOG("Last own message is at position" << listOwnPosition);
|
||||||
|
return (listInboxPosition > listOwnPosition) ? listInboxPosition : listOwnPosition ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ChatModel::calculateLastReadSentMessageId()
|
int ChatModel::calculateLastReadSentMessageId()
|
||||||
|
|
Loading…
Reference in a new issue