From 9c812ef24f3a047a70043ace53a149faa0776132 Mon Sep 17 00:00:00 2001 From: ginesdt Date: Tue, 15 Oct 2024 14:20:50 +0200 Subject: [PATCH 1/2] remove embedded image extension checks --- src/streamtide/ui/components/media_embed.cljs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/streamtide/ui/components/media_embed.cljs b/src/streamtide/ui/components/media_embed.cljs index 5f80e24..4171c62 100644 --- a/src/streamtide/ui/components/media_embed.cljs +++ b/src/streamtide/ui/components/media_embed.cljs @@ -13,7 +13,6 @@ [streamtide.shared.utils :as shared-utils])) (def supported-video-exts #{"mp4", "webm", "ogg"}) -(def supported-image-exts #{"jpg", "jpeg", "apng", "png", "avif", "gif", "jfif", "pjpeg", "pjp", "svg", "webp"}) (def supported-audio-exts #{"mp3", "wav", "ogg", "m4a", "aac", "webm"}) @@ -93,9 +92,6 @@ (defn- supported-video-ext? [ext] (contains? supported-video-exts ext)) -(defn- supported-image-ext? [ext] - (contains? supported-image-exts ext)) - (defn- supported-audio-ext? [ext] (contains? supported-audio-exts ext)) @@ -191,10 +187,7 @@ "Embed an external image in the current page" (if-let [src (embed-url url :image)] src - (let [ext (file-ext url)] - (if (supported-image-ext? ext) - [:img {:src url}] - [safe-external-link url safe-link-opts])))) + [:img {:src url}])) (defn embed-audio [url safe-link-opts] "Embed an external audio in the current page" From e057e4aa74877a0f10395d41adc258f95e9fc0ad Mon Sep 17 00:00:00 2001 From: ginesdt Date: Tue, 15 Oct 2024 16:36:17 +0200 Subject: [PATCH 2/2] show URL when embedded media fails to load --- src/streamtide/ui/components/media_embed.cljs | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/streamtide/ui/components/media_embed.cljs b/src/streamtide/ui/components/media_embed.cljs index 4171c62..8390d29 100644 --- a/src/streamtide/ui/components/media_embed.cljs +++ b/src/streamtide/ui/components/media_embed.cljs @@ -13,8 +13,6 @@ [streamtide.shared.utils :as shared-utils])) (def supported-video-exts #{"mp4", "webm", "ogg"}) -(def supported-audio-exts #{"mp3", "wav", "ogg", "m4a", "aac", "webm"}) - ;; Pattern and replacements adjusted from nodebb-plugin-ns-embed (def matching-rules @@ -89,12 +87,6 @@ (defn- file-ext [filename] (string/lower-case (last (string/split filename ".")))) -(defn- supported-video-ext? [ext] - (contains? supported-video-exts ext)) - -(defn- supported-audio-ext? [ext] - (contains? supported-audio-exts ext)) - (def current-url (r/atom nil)) (def show-popup? (r/atom false)) @@ -176,27 +168,34 @@ "Embed an external video in the current page" (if-let [src (embed-url url :video)] src - (let [ext (file-ext url)] - (if (supported-video-ext? ext) - [:video {:controls true} - [:source {:src url :type (str "video/" ext)}] - "Your browser does not support the video tag."] - [safe-external-link url safe-link-opts])))) + (let [broken (r/atom false) + ext (file-ext url)] + (fn [] + (if-not @broken + [:video {:controls true :onError #(reset! broken true)} + [:source (merge {:src url} (when (and ext (contains? supported-video-exts ext)) {:type (str "video/" ext)}))] + "Your browser does not support the video tag."] + [safe-external-link url safe-link-opts]))))) (defn embed-image [url safe-link-opts] "Embed an external image in the current page" (if-let [src (embed-url url :image)] src - [:img {:src url}])) + (let [broken (r/atom false)] + (fn [] + (if-not @broken + [:img.image {:src url :onError #(reset! broken true)}] + [safe-external-link url safe-link-opts]))))) (defn embed-audio [url safe-link-opts] "Embed an external audio in the current page" (if-let [src (embed-url url :audio)] src - (let [ext (file-ext url)] - (if (supported-audio-ext? ext) - [:audio {:controls "1" :src url}] - [safe-external-link url safe-link-opts])))) + (let [broken (r/atom false)] + (fn [] + (if-not @broken + [:audio {:controls "1" :src url :onError #(reset! broken true)}] + [safe-external-link url safe-link-opts]))))) (defn embed-other [url safe-link-opts] "Embed an external URL in the current page"