Add timestamp to trigger back pagination.

This commit is contained in:
Benoit Marty 2025-01-22 15:04:34 +01:00 committed by Benoit Marty
parent dfda13ac20
commit bac69c4a35
7 changed files with 48 additions and 12 deletions

View file

@ -27,6 +27,7 @@ import io.element.android.libraries.mediaviewer.impl.gallery.eventId
import io.element.android.libraries.mediaviewer.impl.gallery.mediaInfo
import io.element.android.libraries.mediaviewer.impl.gallery.mediaSource
import io.element.android.libraries.mediaviewer.impl.gallery.thumbnailSource
import io.element.android.services.toolbox.api.systemclock.SystemClock
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList
@ -42,6 +43,7 @@ class MediaViewerDataSource(
private val galleryDataSource: MediaGalleryDataSource,
private val mediaLoader: MatrixMediaLoader,
private val localMediaFactory: LocalMediaFactory,
private val systemClock: SystemClock,
) {
// List of media files that are currently being loaded
private val mediaFiles: MutableList<MediaFile> = mutableListOf()
@ -108,12 +110,20 @@ class MediaViewerDataSource(
)
}
is MediaItem.LoadingIndicator -> add(
MediaViewerPageData.Loading(mediaItem.direction)
MediaViewerPageData.Loading(
direction = mediaItem.direction,
timestamp = systemClock.epochMillis(),
)
)
}
}
if (isEmpty()) {
add(MediaViewerPageData.Loading(Timeline.PaginationDirection.BACKWARDS))
add(
MediaViewerPageData.Loading(
direction = Timeline.PaginationDirection.BACKWARDS,
timestamp = systemClock.epochMillis(),
)
)
}
}.toPersistentList()

View file

@ -27,6 +27,7 @@ import io.element.android.libraries.mediaviewer.api.local.LocalMediaFactory
import io.element.android.libraries.mediaviewer.impl.gallery.MediaGalleryMode
import io.element.android.libraries.mediaviewer.impl.gallery.SingleMediaGalleryDataSource
import io.element.android.libraries.mediaviewer.impl.gallery.TimelineMediaGalleryDataSource
import io.element.android.services.toolbox.api.systemclock.SystemClock
@ContributesNode(RoomScope::class)
class MediaViewerNode @AssistedInject constructor(
@ -37,6 +38,7 @@ class MediaViewerNode @AssistedInject constructor(
mediaLoader: MatrixMediaLoader,
localMediaFactory: LocalMediaFactory,
coroutineDispatchers: CoroutineDispatchers,
systemClock: SystemClock,
) : Node(buildContext, plugins = plugins),
MediaViewerNavigator {
private val inputs = inputs<MediaViewerEntryPoint.Params>()
@ -77,7 +79,8 @@ class MediaViewerNode @AssistedInject constructor(
galleryMode = galleryMode,
galleryDataSource = mediaGallerySource,
mediaLoader = mediaLoader,
localMediaFactory = localMediaFactory
localMediaFactory = localMediaFactory,
systemClock = systemClock,
)
)

View file

@ -34,6 +34,7 @@ sealed interface MediaViewerPageData {
data class Loading(
val direction: Timeline.PaginationDirection,
val timestamp: Long,
) : MediaViewerPageData
data class MediaViewerData(

View file

@ -151,7 +151,7 @@ open class MediaViewerStateProvider : PreviewParameterProvider<MediaViewerState>
},
aMediaViewerState(
listOf(
MediaViewerPageData.Loading(Timeline.PaginationDirection.BACKWARDS)
aMediaViewerPageDataLoading()
),
),
aMediaViewerState(
@ -162,6 +162,16 @@ open class MediaViewerStateProvider : PreviewParameterProvider<MediaViewerState>
)
}
fun aMediaViewerPageDataLoading(
direction: Timeline.PaginationDirection = Timeline.PaginationDirection.BACKWARDS,
timestamp: Long = 0L,
): MediaViewerPageData {
return MediaViewerPageData.Loading(
direction = direction,
timestamp = timestamp,
)
}
fun aMediaViewerPageData(
downloadedMedia: AsyncData<LocalMedia> = AsyncData.Uninitialized,
mediaInfo: MediaInfo = anImageMediaInfo(),

View file

@ -128,7 +128,7 @@ fun MediaViewerView(
)
}
is MediaViewerPageData.Loading -> {
LaunchedEffect(Unit) {
LaunchedEffect(dataForPage.timestamp) {
state.eventSink(MediaViewerEvents.LoadMore(dataForPage.direction))
}
MediaViewerLoadingPage(