diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/GalleryThumb.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/GalleryThumb.kt index a149d01e4..2de7b23b5 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/GalleryThumb.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/gallery/GalleryThumb.kt @@ -53,6 +53,7 @@ import com.vitorpamplona.amethyst.commons.richtext.RichTextParser.Companion.isVi import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.service.okhttp.HttpClientManager import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled +import com.vitorpamplona.amethyst.ui.components.AutoNonlazyGrid import com.vitorpamplona.amethyst.ui.components.ClickableUrl import com.vitorpamplona.amethyst.ui.components.DisplayBlurHash import com.vitorpamplona.amethyst.ui.components.DisplayUrlWithLoadingSymbol @@ -60,6 +61,7 @@ import com.vitorpamplona.amethyst.ui.components.GetMediaItem import com.vitorpamplona.amethyst.ui.components.GetVideoController import com.vitorpamplona.amethyst.ui.components.ImageUrlWithDownloadButton import com.vitorpamplona.amethyst.ui.components.SensitivityWarning +import com.vitorpamplona.amethyst.ui.components.UrlImageView import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.note.DownloadForOfflineIcon import com.vitorpamplona.amethyst.ui.note.WatchAuthor @@ -82,35 +84,31 @@ fun GalleryThumbnail( val content = if (noteEvent is ProfileGalleryEntryEvent) { - val url = noteEvent.url() - if (url == null) { - null - } else if (isVideoUrl(url)) { - MediaUrlVideo( - url = url, - description = noteEvent.content, - hash = null, - blurhash = noteEvent.blurhash(), - dim = noteEvent.dimensions(), - uri = null, - mimeType = noteEvent.mimeType(), - ) - } else { - MediaUrlImage( - url = url, - description = noteEvent.content, - hash = null, // We don't want to show the hash banner here - blurhash = noteEvent.blurhash(), - dim = noteEvent.dimensions(), - uri = null, - mimeType = noteEvent.mimeType(), - ) + noteEvent.urls().map { url -> + if (isVideoUrl(url)) { + MediaUrlVideo( + url = url, + description = noteEvent.content, + hash = null, + blurhash = noteEvent.blurhash(), + dim = noteEvent.dimensions(), + uri = null, + mimeType = noteEvent.mimeType(), + ) + } else { + MediaUrlImage( + url = url, + description = noteEvent.content, + hash = null, // We don't want to show the hash banner here + blurhash = noteEvent.blurhash(), + dim = noteEvent.dimensions(), + uri = null, + mimeType = noteEvent.mimeType(), + ) + } } } else if (noteEvent is PictureEvent) { - val imeta = noteEvent.imetaTags().firstOrNull() - if (imeta?.url == null) { - null - } else { + noteEvent.imetaTags().map { imeta -> MediaUrlImage( url = imeta.url, description = noteEvent.content, @@ -122,11 +120,7 @@ fun GalleryThumbnail( ) } } else if (noteEvent is VideoEvent) { - val imeta = noteEvent.imetaTags().firstOrNull() - - if (imeta?.url == null) { - null - } else { + noteEvent.imetaTags().map { imeta -> MediaUrlVideo( url = imeta.url, description = noteEvent.content, @@ -138,7 +132,7 @@ fun GalleryThumbnail( ) } } else { - null + emptyList() } InnerRenderGalleryThumb(content, baseNote, accountViewModel) @@ -146,15 +140,12 @@ fun GalleryThumbnail( @Composable fun InnerRenderGalleryThumb( - content: MediaUrlContent?, + content: List, note: Note, accountViewModel: AccountViewModel, ) { - if (content != null) { - GalleryContentView( - content = content, - accountViewModel = accountViewModel, - ) + if (content.isNotEmpty()) { + GalleryContentView(content, accountViewModel) } else { DisplayGalleryAuthorBanner(note) } @@ -170,18 +161,20 @@ fun DisplayGalleryAuthorBanner(note: Note) { @androidx.annotation.OptIn(UnstableApi::class) @Composable fun GalleryContentView( - content: MediaUrlContent, + contentList: List, accountViewModel: AccountViewModel, ) { - when (content) { - is MediaUrlImage -> - SensitivityWarning(content.contentWarning != null, accountViewModel) { - UrlImageView(content, accountViewModel) - } - is MediaUrlVideo -> - SensitivityWarning(content.contentWarning != null, accountViewModel) { - UrlVideoView(content, accountViewModel) - } + AutoNonlazyGrid(contentList.size) { contentIndex -> + when (val content = contentList[contentIndex]) { + is MediaUrlImage -> + SensitivityWarning(content.contentWarning != null, accountViewModel) { + UrlImageView(content, accountViewModel) + } + is MediaUrlVideo -> + SensitivityWarning(content.contentWarning != null, accountViewModel) { + UrlVideoView(content, accountViewModel) + } + } } }