From d9225ed4480a02b6a3ddc45ee3078237c3ce4bb9 Mon Sep 17 00:00:00 2001 From: hzrd149 Date: Thu, 28 Dec 2023 13:58:42 -0600 Subject: [PATCH] Add support for .mp3 and .wav urls --- .changeset/yellow-bugs-rest.md | 5 +++++ .../event-types/embedded-unknown.tsx | 3 ++- src/components/embed-types/audio.tsx | 20 +++++++++++++++++++ src/components/note/text-note-contents.tsx | 2 ++ src/helpers/url.ts | 5 +++++ src/services/relay-scoreboard.ts | 2 +- .../components/channel-message-content.tsx | 2 ++ .../dms/components/direct-message-content.tsx | 2 ++ 8 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 .changeset/yellow-bugs-rest.md create mode 100644 src/components/embed-types/audio.tsx diff --git a/.changeset/yellow-bugs-rest.md b/.changeset/yellow-bugs-rest.md new file mode 100644 index 000000000..b455bb433 --- /dev/null +++ b/.changeset/yellow-bugs-rest.md @@ -0,0 +1,5 @@ +--- +"nostrudel": minor +--- + +Add support for .mp3 and .wav urls diff --git a/src/components/embed-event/event-types/embedded-unknown.tsx b/src/components/embed-event/event-types/embedded-unknown.tsx index 61d179b3f..a4191b0a5 100644 --- a/src/components/embed-event/event-types/embedded-unknown.tsx +++ b/src/components/embed-event/event-types/embedded-unknown.tsx @@ -21,6 +21,7 @@ import { EmbedableContent, embedUrls } from "../../../helpers/embeds"; import Timestamp from "../../timestamp"; import { CodeIcon } from "../../icons"; import NoteDebugModal from "../../debug-modals/note-debug-modal"; +import { renderAudioUrl } from "../../embed-types/audio"; export default function EmbeddedUnknown({ event, ...props }: Omit & { event: NostrEvent }) { const debugModal = useDisclosure(); @@ -34,7 +35,7 @@ export default function EmbeddedUnknown({ event, ...props }: Omit + + + ); +} diff --git a/src/components/note/text-note-contents.tsx b/src/components/note/text-note-contents.tsx index 4e8c6b3e3..dabfb5ebc 100644 --- a/src/components/note/text-note-contents.tsx +++ b/src/components/note/text-note-contents.tsx @@ -30,6 +30,7 @@ import { } from "../embed-types"; import { LightboxProvider } from "../lightbox-provider"; import { renderModelUrl } from "../embed-types/model"; +import { renderAudioUrl } from "../embed-types/audio"; function buildContents(event: NostrEvent | DraftNostrEvent, simpleLinks = false) { let content: EmbedableContent = [event.content.trim()]; @@ -52,6 +53,7 @@ function buildContents(event: NostrEvent | DraftNostrEvent, simpleLinks = false) renderSoundCloudUrl, renderImageUrl, renderVideoUrl, + renderAudioUrl, renderModelUrl, simpleLinks ? renderGenericUrl : renderOpenGraphUrl, ]); diff --git a/src/helpers/url.ts b/src/helpers/url.ts index 180f94e00..3b87fb204 100644 --- a/src/helpers/url.ts +++ b/src/helpers/url.ts @@ -4,6 +4,7 @@ export const convertToUrl = (url: string | URL) => (url instanceof URL ? url : n export const IMAGE_EXT = [".svg", ".gif", ".png", ".jpg", ".jpeg", ".webp", ".avif"]; export const VIDEO_EXT = [".mp4", ".mkv", ".webm", ".mov"]; +export const AUDIO_EXT = [".mp3", ".wav", ".ogg", ".aac"]; export function isMediaURL(url: string | URL) { return isImageURL(url) || isVideoURL(url); @@ -16,6 +17,10 @@ export function isVideoURL(url: string | URL) { const u = new URL(url); return VIDEO_EXT.some((ext) => u.pathname.endsWith(ext)); } +export function isAudioURL(url: string | URL) { + const u = new URL(url); + return AUDIO_EXT.some((ext) => u.pathname.endsWith(ext)); +} export function normalizeRelayUrl(relayUrl: string) { const url = new URL(relayUrl); diff --git a/src/services/relay-scoreboard.ts b/src/services/relay-scoreboard.ts index 3f78a70df..3a2483d6b 100644 --- a/src/services/relay-scoreboard.ts +++ b/src/services/relay-scoreboard.ts @@ -259,7 +259,7 @@ relayScoreboardService.loadStats(); setInterval(() => { relayScoreboardService.saveStats(); -}, 1000 * 5); +}, 1000 * 30); if (import.meta.env.DEV) { // @ts-ignore diff --git a/src/views/channels/components/channel-message-content.tsx b/src/views/channels/components/channel-message-content.tsx index fe4e0eb0e..1e44dc1c4 100644 --- a/src/views/channels/components/channel-message-content.tsx +++ b/src/views/channels/components/channel-message-content.tsx @@ -29,6 +29,7 @@ import { renderYoutubeUrl, } from "../../../components/embed-types"; import { LightboxProvider } from "../../../components/lightbox-provider"; +import { renderAudioUrl } from "../../../components/embed-types/audio"; const ChannelMessageContent = memo(({ message, children, ...props }: BoxProps & { message: NostrEvent }) => { const content = useMemo(() => { @@ -52,6 +53,7 @@ const ChannelMessageContent = memo(({ message, children, ...props }: BoxProps & renderSoundCloudUrl, renderImageUrl, renderVideoUrl, + renderAudioUrl, renderGenericUrl, ]); diff --git a/src/views/dms/components/direct-message-content.tsx b/src/views/dms/components/direct-message-content.tsx index a972c9707..476a4704e 100644 --- a/src/views/dms/components/direct-message-content.tsx +++ b/src/views/dms/components/direct-message-content.tsx @@ -21,6 +21,7 @@ import { } from "../../../components/embed-types"; import { TrustProvider } from "../../../providers/local/trust"; import { LightboxProvider } from "../../../components/lightbox-provider"; +import { renderAudioUrl } from "../../../components/embed-types/audio"; export default function DirectMessageContent({ event, @@ -45,6 +46,7 @@ export default function DirectMessageContent({ renderSoundCloudUrl, renderImageUrl, renderVideoUrl, + renderAudioUrl, renderGenericUrl, ]);