From 6edc634b82b24d2f1aea867bc655379be6d9dbf7 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 15 Mar 2024 19:43:18 -0400 Subject: [PATCH] Only download video, image and audio files in NIP-94 --- .../vitorpamplona/amethyst/service/NostrVideoDataSource.kt | 5 +++++ .../com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt | 2 +- .../java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt | 6 ++++++ .../vitorpamplona/quartz/events/FileStorageHeaderEvent.kt | 6 ++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt index 8d810907f..ec55ffdae 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrVideoDataSource.kt @@ -40,6 +40,8 @@ object NostrVideoDataSource : NostrDataSource("VideoFeed") { var job: Job? = null + val SUPPORTED_VIDEO_MIME_TYPES = listOf("image/jpeg", "image/gif", "image/png", "image/webp", "video/mp4", "video/mpeg", "video/webm", "audio/aac", "audio/mpeg", "audio/webm", "audio/wav") + override fun start() { job?.cancel() job = @@ -68,6 +70,7 @@ object NostrVideoDataSource : NostrDataSource("VideoFeed") { authors = follows, kinds = listOf(FileHeaderEvent.KIND, FileStorageHeaderEvent.KIND), limit = 200, + tags = mapOf("m" to SUPPORTED_VIDEO_MIME_TYPES), since = latestEOSEs.users[account.userProfile()] ?.followList @@ -93,6 +96,7 @@ object NostrVideoDataSource : NostrDataSource("VideoFeed") { hashToLoad .map { listOf(it, it.lowercase(), it.uppercase(), it.capitalize()) } .flatten(), + "m" to SUPPORTED_VIDEO_MIME_TYPES, ), limit = 100, since = @@ -120,6 +124,7 @@ object NostrVideoDataSource : NostrDataSource("VideoFeed") { hashToLoad .map { listOf(it, it.lowercase(), it.uppercase(), it.capitalize()) } .flatten(), + "m" to SUPPORTED_VIDEO_MIME_TYPES, ), limit = 100, since = diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt index c96db1dec..adfd3dd74 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/VideoFeedFilter.kt @@ -65,7 +65,7 @@ class VideoFeedFilter(val account: Account) : AdditiveFeedFilter() { ): Boolean { val noteEvent = it.event - return ((noteEvent is FileHeaderEvent && noteEvent.hasUrl()) || noteEvent is FileStorageHeaderEvent) && + return ((noteEvent is FileHeaderEvent && noteEvent.hasUrl() && noteEvent.isImageOrVideo()) || (noteEvent is FileStorageHeaderEvent && noteEvent.isImageOrVideo())) && params.match(noteEvent) && account.isAcceptable(it) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt index 5d7e1863d..ffd343a1a 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt @@ -58,6 +58,12 @@ class FileHeaderEvent( fun hasUrl() = tags.any { it.size > 1 && it[0] == URL } + fun isImageOrVideo(): Boolean { + val mimeType = mimeType() ?: return false + + return mimeType.startsWith("image/") || mimeType.startsWith("video/") + } + companion object { const val KIND = 1063 const val ALT_DESCRIPTION = "Verifiable file url" diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt index 8ba7649ac..2cc3cb006 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt @@ -54,6 +54,12 @@ class FileStorageHeaderEvent( fun blurhash() = tags.firstOrNull { it.size > 1 && it[0] == BLUR_HASH }?.get(1) + fun isImageOrVideo(): Boolean { + val mimeType = mimeType() ?: return false + + return mimeType.startsWith("image/") || mimeType.startsWith("video/") + } + companion object { const val KIND = 1065 const val ALT_DESCRIPTION = "Descriptors for a binary file"