From e76e936d2bfbb75df5744594edb42c7252a0e6e2 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Fri, 22 Jan 2021 15:21:26 -0400 Subject: [PATCH] feat: request older status updates --- src/app/chat/view.nim | 16 ++++++++++++++++ src/app/chat/views/chat_item.nim | 7 +++++++ src/app/chat/views/message_list.nim | 4 +++- ui/app/AppLayouts/Chat/ChatColumn/Message.qml | 9 +++++++-- ui/app/AppLayouts/Timeline/TimelineLayout.qml | 4 ++-- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/app/chat/view.nim b/src/app/chat/view.nim index 0dde25ddeb..10e896c782 100644 --- a/src/app/chat/view.nim +++ b/src/app/chat/view.nim @@ -498,6 +498,22 @@ QtObject: write = setLoadingMessages notify = loadingMessagesChanged + proc requestMoreTimelineMessages*(self: ChatsView, fetchRange: int) {.slot.} = + self.loadingMessages = true + self.loadingMessagesChanged(true) + + var allTopics: seq[string] = @[] + for contact in self.status.contacts.getContacts(): + for t in self.status.mailservers.getMailserverTopicsByChatId(getTimelineChatId(contact.id)).map(topic => topic.topic): + allTopics.add(t) + + let currentOldestMessageTimestamp = self.oldestMessageTimestamp + self.oldestMessageTimestamp = self.oldestMessageTimestamp - fetchRange + + self.status.mailservers.requestMessages(allTopics, self.oldestMessageTimestamp, currentOldestMessageTimestamp, true) + self.oldestMessageTimestampChanged() + self.messagesLoaded(); + proc requestMoreMessages*(self: ChatsView, fetchRange: int) {.slot.} = self.loadingMessages = true self.loadingMessagesChanged(true) diff --git a/src/app/chat/views/chat_item.nim b/src/app/chat/views/chat_item.nim index 545b5941a0..bf58edefec 100644 --- a/src/app/chat/views/chat_item.nim +++ b/src/app/chat/views/chat_item.nim @@ -2,6 +2,7 @@ import NimQml, Tables, std/wrapnils import ../../../status/[chat/chat, status, ens, accounts] from ../../../status/libstatus/types import Setting import ../../../status/libstatus/settings as status_settings +import ../../../status/libstatus/utils as status_utils import chat_members @@ -111,6 +112,12 @@ QtObject: QtProperty[QVariant] members: read = getMembers + proc isTimelineChat*(self: ChatItemView): bool {.slot.} = result = ?.self.chatItem.id == status_utils.getTimelineChatId() + + QtProperty[bool] isTimelineChat: + read = isTimelineChat + + proc hasMentions*(self: ChatItemView): bool {.slot.} = result = ?.self.chatItem.hasMentions QtProperty[bool] hasMentions: diff --git a/src/app/chat/views/message_list.nim b/src/app/chat/views/message_list.nim index 7dfddebd76..ed14cca440 100644 --- a/src/app/chat/views/message_list.nim +++ b/src/app/chat/views/message_list.nim @@ -68,7 +68,6 @@ QtObject: proc addFakeMessages*(self: ChatMessageList) = self.messages.add(self.chatIdentifier(self.id)) - self.messages.add(self.fetchMoreMessagesButton()) proc newChatMessageList*(chatId: string, status: Status, addFakeMessages: bool = true): ChatMessageList = new(result, delete) @@ -76,6 +75,8 @@ QtObject: result.id = chatId if addFakeMessages: result.addFakeMessages() + + result.messages.add(result.fetchMoreMessagesButton()) result.messageIndex = initTable[string, int]() result.timedoutMessages = initHashSet[string]() result.status = status @@ -242,6 +243,7 @@ QtObject: self.messages = @[] if (addFakeMessages): self.addFakeMessages() + self.messages.add(self.fetchMoreMessagesButton()) self.endResetModel() proc setMessageReactions*(self: ChatMessageList, messageId: string, newReactions: string)= diff --git a/ui/app/AppLayouts/Chat/ChatColumn/Message.qml b/ui/app/AppLayouts/Chat/ChatColumn/Message.qml index 0b37c8ebd9..a3ea17690d 100644 --- a/ui/app/AppLayouts/Chat/ChatColumn/Message.qml +++ b/ui/app/AppLayouts/Chat/ChatColumn/Message.qml @@ -131,7 +131,7 @@ Item { Item { visible: chatsModel.activeChannel.chatType !== Constants.chatTypePrivateGroupChat || chatsModel.activeChannel.isMember id: wrapper - height: wrapper.visible ? fetchMoreButton.height + fetchDate.height + 3 + Style.current.smallPadding*2 : 0 + height: wrapper.visible ? childrenRect.height + Style.current.smallPadding*2 : 0 anchors.left: parent.left anchors.right: parent.right Separator { @@ -152,7 +152,12 @@ Item { cursorShape: Qt.PointingHandCursor anchors.fill: parent onClicked: { - chatsModel.requestMoreMessages(Constants.fetchRangeLast24Hours) + if(chatsModel.activeChannel.isTimelineChat){ + chatsModel.requestMoreTimelineMessages(Constants.fetchRangeLast24Hours); + } else { + chatsModel.requestMoreMessages(Constants.fetchRangeLast24Hours); + } + timer.setTimeout(function(){ chatsModel.hideLoadingIndicator() }, 3000); diff --git a/ui/app/AppLayouts/Timeline/TimelineLayout.qml b/ui/app/AppLayouts/Timeline/TimelineLayout.qml index 8ac6a89d83..dbe36478b7 100644 --- a/ui/app/AppLayouts/Timeline/TimelineLayout.qml +++ b/ui/app/AppLayouts/Timeline/TimelineLayout.qml @@ -14,10 +14,10 @@ ScrollView { id: root Layout.fillWidth: true Layout.fillHeight: true - contentHeight: chatLogView.contentHeight + 40 + contentHeight: chatLogView.contentHeight + 140 clip: true ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - + property var onActivated: function () { chatsModel.setActiveChannelToTimeline() statusUpdateInput.textInput.forceActiveFocus(Qt.MouseFocusReason)