Loading and End of Timeline Delegates

Add delegate for showing the user a loading indicator and for the beginning of the timeline.

BUG: 455045
BUG: 465285
This commit is contained in:
James Graham
2023-11-20 17:10:56 +00:00
parent 0dbef58ff2
commit 5efd17d370
15 changed files with 370 additions and 41 deletions

View File

@@ -28,12 +28,12 @@ QQC2.ScrollView {
property bool roomChanging: false
/**
* @brief The MessageEventModel to use.
* @brief The TimelineModel to use.
*
* Required so that new events can be requested when the end of the current
* local timeline is reached.
*/
required property MessageEventModel messageEventModel
required property TimelineModel timelineModel
/**
* @brief The MessageFilterModel to use.
@@ -85,16 +85,16 @@ QQC2.ScrollView {
running: messageListView.atYBeginning
triggeredOnStart: true
onTriggered: {
if (messageListView.atYBeginning && root.messageEventModel.canFetchMore(root.messageEventModel.index(0, 0))) {
root.messageEventModel.fetchMore(root.messageEventModel.index(0, 0));
if (messageListView.atYBeginning && root.timelineModel.messageEventModel.canFetchMore(root.timelineModel.index(0, 0))) {
root.timelineModel.messageEventModel.fetchMore(root.timelineModel.index(0, 0));
}
}
repeat: true
}
// HACK: The view should do this automatically but doesn't.
onAtYBeginningChanged: if (atYBeginning && root.messageEventModel.canFetchMore(root.messageEventModel.index(0, 0))) {
root.messageEventModel.fetchMore(root.messageEventModel.index(0, 0));
onAtYBeginningChanged: if (atYBeginning && root.timelineModel.messageEventModel.canFetchMore(root.timelineModel.index(0, 0))) {
root.timelineModel.messageEventModel.fetchMore(root.timelineModel.index(0, 0));
}
Timer {
@@ -270,7 +270,7 @@ QQC2.ScrollView {
}
Connections {
target: root.messageEventModel
target: root.timelineModel
function onRowsInserted() {
markReadIfVisibleTimer.restart()
@@ -311,7 +311,7 @@ QQC2.ScrollView {
Connections {
//enabled: Config.showFancyEffects
target: root.messageEventModel
target: root.timelineModel.messageEventModel
function onFancyEffectsReasonFound(fancyEffect) {
fancyEffectsContainer.processFancyEffectsReason(fancyEffect)
@@ -336,10 +336,10 @@ QQC2.ScrollView {
}
function eventToIndex(eventID) {
const index = root.messageEventModel.eventIdToRow(eventID)
const index = root.timelineModel.messageEventModel.eventIdToRow(eventID)
if (index === -1)
return -1
return root.messageFilterModel.mapFromSource(root.messageEventModel.index(index, 0)).row
return root.messageFilterModel.mapFromSource(root.timelineModel.index(index, 0)).row
}
function firstVisibleIndex() {