diff --git a/imports/NeoChat/Page/RoomPage.qml b/imports/NeoChat/Page/RoomPage.qml index e65d3acc7..675467d9a 100644 --- a/imports/NeoChat/Page/RoomPage.qml +++ b/imports/NeoChat/Page/RoomPage.qml @@ -232,20 +232,17 @@ Kirigami.ScrollablePage { model: !isLoaded ? undefined : sortedMessageEventModel - onContentYChanged: fetchMoreContent() - - function fetchMoreContent() { - if(!noNeedMoreContent && contentY - 5000 < originY) { - currentRoom.getPreviousContent(20); - } - } - MessageEventModel { id: messageEventModel room: currentRoom } + // HACK: The view should do this automatically but doesn't. + onAtYBeginningChanged: if (atYBeginning && messageEventModel.canFetchMore(messageEventModel.index(0, 0))) { + messageEventModel.fetchMore(messageEventModel.index(0, 0)); + } + QQC2.Popup { anchors.centerIn: parent @@ -596,7 +593,11 @@ Kirigami.ScrollablePage { DelegateChoice { roleValue: "other" - delegate: Item {} + delegate: Rectangle { + height: 10 + width: ListView.view.width + color: "red" + } } } @@ -646,10 +647,10 @@ Kirigami.ScrollablePage { } Component.onCompleted: { - updateReadMarker() if (currentRoom) { - if (currentRoom.timelineSize < 20) - currentRoom.getPreviousContent(50) + if (currentRoom.timelineSize < 20) { + currentRoom.getPreviousContent(50); + } } positionViewAtBeginning(); diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp index 6be20e2b3..3bf970347 100644 --- a/src/messageeventmodel.cpp +++ b/src/messageeventmodel.cpp @@ -370,6 +370,20 @@ int MessageEventModel::rowCount(const QModelIndex &parent) const } +bool MessageEventModel::canFetchMore(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + + return m_currentRoom && !m_currentRoom->eventsHistoryJob() && !m_currentRoom->allHistoryLoaded(); +} + +void MessageEventModel::fetchMore(const QModelIndex &parent) +{ + Q_UNUSED(parent); + m_currentRoom->getPreviousContent(20); +} + + inline QVariantMap userAtEvent(NeoChatUser *user, NeoChatRoom *room, const RoomEvent &evt) { Q_UNUSED(evt) diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h index df0723a99..4ecdb439f 100644 --- a/src/messageeventmodel.h +++ b/src/messageeventmodel.h @@ -76,6 +76,9 @@ private: [[nodiscard]] QDateTime makeMessageTimestamp(const Quotient::Room::rev_iter_t &baseIt) const; [[nodiscard]] static QString renderDate(const QDateTime ×tamp); + bool canFetchMore(const QModelIndex &parent) const override; + void fetchMore(const QModelIndex &parent) override; + void refreshLastUserEvents(int baseTimelineRow); void refreshEventRoles(int row, const QVector &roles = {}); int refreshEventRoles(const QString &eventId, const QVector &roles = {});