Preload notification audio and add AudioPreloader component

Added an AudioPreloader React component to preload the /hohoho.mp3 audio file for notifications, and included it in the app layout. Also updated _document.tsx to add a preload link for the audio file. Added yt-dlp.exe binary to the repository.
This commit is contained in:
g
2025-12-09 17:48:55 +00:00
parent 0008d367f5
commit e10ad2835e
4 changed files with 32 additions and 1 deletions

View File

@@ -3,7 +3,9 @@ import { Html, Head, Main, NextScript } from "next/document";
export default function Document() { export default function Document() {
return ( return (
<Html lang="en"> <Html lang="en">
<Head /> <Head>
<link rel="preload" href="/hohoho.mp3" as="audio" type="audio/mpeg" />
</Head>
<body> <body>
<Main /> <Main />
<NextScript /> <NextScript />

View File

@@ -8,6 +8,7 @@ import { Metadata, Viewport } from "next"
import KeepOnlineWrapper from "@/components/layout/KeepOnlineWrapper" import KeepOnlineWrapper from "@/components/layout/KeepOnlineWrapper"
import { ChristmasDecorations } from "@/components/christmas-decorations" import { ChristmasDecorations } from "@/components/christmas-decorations"
import { isDecember } from "@/lib/utils/christmas" import { isDecember } from "@/lib/utils/christmas"
import { AudioPreloader } from "@/components/audio-preloader"
const inter = Inter({ subsets: ["latin"] }) const inter = Inter({ subsets: ["latin"] })
@@ -77,6 +78,7 @@ export default function RootLayout({
<html lang="en" suppressHydrationWarning className={isDec ? "christmas-theme" : ""}> <html lang="en" suppressHydrationWarning className={isDec ? "christmas-theme" : ""}>
<body className={inter.className}> <body className={inter.className}>
<ThemeProvider attribute="class" defaultTheme="dark" enableSystem disableTransitionOnChange> <ThemeProvider attribute="class" defaultTheme="dark" enableSystem disableTransitionOnChange>
<AudioPreloader />
<NotificationProvider> <NotificationProvider>
{isDec && <ChristmasDecorations />} {isDec && <ChristmasDecorations />}
<Toaster <Toaster

View File

@@ -0,0 +1,27 @@
"use client"
import { useEffect } from "react"
/**
* Preloads the notification audio file to ensure it's ready when needed
*/
export function AudioPreloader() {
useEffect(() => {
// Preload the audio file
const audio = new Audio('/hohoho.mp3')
audio.preload = 'auto'
// Try to load it immediately
audio.load().catch(err => {
console.log('Audio preload failed (non-critical):', err)
})
return () => {
// Cleanup
audio.src = ''
}
}, [])
return null
}

BIN
yt-dlp.exe Normal file

Binary file not shown.