From ccd863f57d67cdf2bd94354b18ac9936e4c868cd Mon Sep 17 00:00:00 2001 From: xpltd Date: Wed, 18 Mar 2026 21:16:24 -0500 Subject: [PATCH] =?UTF-8?q?GSD:=20M002/S01=20complete=20=E2=80=94=20Bug=20?= =?UTF-8?q?fixes=20+=20header/footer=20rework?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix cancel download bug: add @click.stop, debounce with cancelling ref - Rework header: remove nav tabs, replace ThemePicker with DarkModeToggle - Add isDark computed + toggleDarkMode() to theme store - Add WelcomeMessage component above URL input, reads from public config - Add welcome_message to UIConfig and public config endpoint - Add AppFooter with app version, yt-dlp version, GitHub link - Remove SSE status dot from header - Remove connectionStatus prop from AppLayout - 5 new theme toggle tests (34 frontend tests total) - 179 backend tests still passing --- backend/app/core/config.py | 1 + backend/app/routers/system.py | 1 + frontend/src/App.vue | 34 ++----------- frontend/src/api/types.ts | 1 + frontend/src/components/AppFooter.vue | 57 ++++++++++++++++++++++ frontend/src/components/AppHeader.vue | 35 +------------ frontend/src/components/AppLayout.vue | 5 -- frontend/src/components/DarkModeToggle.vue | 54 ++++++++++++++++++++ frontend/src/components/DownloadItem.vue | 18 +++++-- frontend/src/components/MainView.vue | 4 +- frontend/src/components/WelcomeMessage.vue | 44 +++++++++++++++++ frontend/src/stores/theme.ts | 23 +++++++++ frontend/src/tests/stores/config.test.ts | 1 + frontend/src/tests/stores/theme.test.ts | 45 +++++++++++++++++ 14 files changed, 249 insertions(+), 74 deletions(-) create mode 100644 frontend/src/components/AppFooter.vue create mode 100644 frontend/src/components/DarkModeToggle.vue create mode 100644 frontend/src/components/WelcomeMessage.vue diff --git a/backend/app/core/config.py b/backend/app/core/config.py index 70b521b..ae5a23e 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -73,6 +73,7 @@ class UIConfig(BaseModel): """UI preferences.""" default_theme: str = "dark" + welcome_message: str = "Paste any video or audio URL. We rip it, you download it. No accounts, no tracking." class AdminConfig(BaseModel): diff --git a/backend/app/routers/system.py b/backend/app/routers/system.py index f1b50c7..8aa6004 100644 --- a/backend/app/routers/system.py +++ b/backend/app/routers/system.py @@ -23,6 +23,7 @@ async def public_config(request: Request) -> dict: return { "session_mode": config.session.mode, "default_theme": config.ui.default_theme, + "welcome_message": config.ui.welcome_message, "purge_enabled": config.purge.enabled, "max_concurrent_downloads": config.downloads.max_concurrent, } diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 3a8b4e4..e8926ff 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -4,10 +4,11 @@ import { useSSE } from '@/composables/useSSE' import { useConfigStore } from '@/stores/config' import { useThemeStore } from '@/stores/theme' import AppHeader from '@/components/AppHeader.vue' +import AppFooter from '@/components/AppFooter.vue' const configStore = useConfigStore() const themeStore = useThemeStore() -const { connectionStatus, connect } = useSSE() +const { connect } = useSSE() onMounted(async () => { themeStore.init() @@ -18,34 +19,7 @@ onMounted(async () => { - - diff --git a/frontend/src/api/types.ts b/frontend/src/api/types.ts index 8901605..6ad99c3 100644 --- a/frontend/src/api/types.ts +++ b/frontend/src/api/types.ts @@ -67,6 +67,7 @@ export interface FormatInfo { export interface PublicConfig { session_mode: string default_theme: string + welcome_message: string purge_enabled: boolean max_concurrent_downloads: number } diff --git a/frontend/src/components/AppFooter.vue b/frontend/src/components/AppFooter.vue new file mode 100644 index 0000000..cd49d8e --- /dev/null +++ b/frontend/src/components/AppFooter.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/frontend/src/components/AppHeader.vue b/frontend/src/components/AppHeader.vue index 31b9ab6..bb9b215 100644 --- a/frontend/src/components/AppHeader.vue +++ b/frontend/src/components/AppHeader.vue @@ -1,17 +1,5 @@