diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt index e49cdf630..833d1155b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt @@ -3,10 +3,6 @@ package com.vitorpamplona.amethyst.model import com.baha.url.preview.BahaUrlPreview import com.baha.url.preview.IUrlPreviewCallback import com.baha.url.preview.UrlInfoItem -import com.vitorpamplona.amethyst.ui.components.imageExtension -import com.vitorpamplona.amethyst.ui.components.isValidURL -import com.vitorpamplona.amethyst.ui.components.noProtocolUrlValidator -import com.vitorpamplona.amethyst.ui.components.videoExtension import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -47,29 +43,4 @@ object UrlCachedPreviewer { ).fetchUrlPreview() } } - - fun findUrlsInMessage(message: String): List { - return message.split('\n').map { paragraph -> - paragraph.split(' ').filter { word: String -> - isValidURL(word) || noProtocolUrlValidator.matcher(word).matches() - } - }.flatten() - } - - fun preloadPreviewsFor(note: Note) { - note.event?.content()?.let { - findUrlsInMessage(it).forEach { - val removedParamsFromUrl = it.split("?")[0].lowercase() - if (imageExtension.matcher(removedParamsFromUrl).matches()) { - // Preload Images? Isn't this too heavy? - } else if (videoExtension.matcher(removedParamsFromUrl).matches()) { - // Do nothing for now. - } else if (isValidURL(removedParamsFromUrl)) { - previewInfo(it) - } else { - previewInfo("https://$it") - } - } - } - } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt index 35597a447..100b3fabe 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt @@ -167,7 +167,7 @@ fun NewPostView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n if (isValidURL(myUrlPreview)) { val removedParamsFromUrl = myUrlPreview.split("?")[0].lowercase() - if (imageExtension.matcher(removedParamsFromUrl).matches()) { + if (imageExtensions.any { removedParamsFromUrl.endsWith(it, true) }) { AsyncImage( model = myUrlPreview, contentDescription = myUrlPreview, @@ -182,9 +182,7 @@ fun NewPostView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n RoundedCornerShape(15.dp) ) ) - } else if (videoExtension.matcher(removedParamsFromUrl) - .matches() - ) { + } else if (videoExtensions.any { removedParamsFromUrl.endsWith(it, true) }) { VideoView(myUrlPreview) } else { UrlPreview(myUrlPreview, myUrlPreview) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt index 3443aed7e..02ff82e40 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt @@ -46,8 +46,8 @@ import java.net.URISyntaxException import java.net.URL import java.util.regex.Pattern -val imageExtension = Pattern.compile("(.*/)*.+\\.(png|jpg|gif|bmp|jpeg|webp|svg)$", Pattern.CASE_INSENSITIVE) -val videoExtension = Pattern.compile("(.*/)*.+\\.(mp4|avi|wmv|mpg|amv|webm|mov)$", Pattern.CASE_INSENSITIVE) +val imageExtensions = listOf("png", "jpg", "gif", "bmp", "jpeg", "webp", "svg") +val videoExtensions = listOf("mp4", "avi", "wmv", "mpg", "amv", "webm", "mov") // Group 1 = url, group 4 additional chars val noProtocolUrlValidator = Pattern.compile("(([\\w\\d-]+\\.)*[a-zA-Z][\\w-]+[\\.\\:]\\w+([\\/\\?\\=\\&\\#\\.]?[\\w-]+)*\\/?)(.*)") @@ -138,10 +138,10 @@ fun RichTextViewer( // sequence of images will render in a slideview if (isValidURL(word)) { val removedParamsFromUrl = word.split("?")[0].lowercase() - if (imageExtension.matcher(removedParamsFromUrl).matches()) { + if (imageExtensions.any { word.endsWith(it, true) }) { imagesForPager.add(word) } - if (videoExtension.matcher(removedParamsFromUrl).matches()) { + if (videoExtensions.any { word.endsWith(it, true) }) { imagesForPager.add(word) } } @@ -160,9 +160,9 @@ fun RichTextViewer( if (isValidURL(word)) { val removedParamsFromUrl = word.split("?")[0].lowercase() - if (imageExtension.matcher(removedParamsFromUrl).matches()) { + if (imageExtensions.any { word.endsWith(it, true) }) { ZoomableImageView(word, imagesForPager) - } else if (videoExtension.matcher(removedParamsFromUrl).matches()) { + } else if (videoExtensions.any { word.endsWith(it, true) }) { ZoomableImageView(word, imagesForPager) } else { UrlPreview(word, "$word ") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt index 729ecadfc..02f5cafe8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt @@ -62,7 +62,7 @@ fun ZoomableImageView(word: String, images: List = listOf(word)) { mutableStateOf(null) } - if (imageExtension.matcher(word).matches()) { + if (imageExtensions.any { word.endsWith(it, true) }) { AsyncImage( model = word, contentDescription = word, @@ -171,7 +171,7 @@ fun ZoomableImageDialog(imageUrl: String, allImages: List = listOf(image @Composable private fun RenderImageOrVideo(imageUrl: String) { - if (imageExtension.matcher(imageUrl).matches()) { + if (imageExtensions.any { imageUrl.endsWith(it, true) }) { AsyncImage( model = imageUrl, contentDescription = stringResource(id = R.string.profile_image),