media-rip/frontend/src/components/AppFooter.vue
xpltd 182104e57f Persistent admin settings + new server config fields
Settings are now persisted to SQLite (config table) and survive restarts.

New admin-configurable settings (migrated from env-var-only):
- Max concurrent downloads (1-10, default 3)
- Session mode (isolated/shared/open)
- Session timeout hours (1-8760, default 72)
- Admin username
- Auto-purge enabled (bool)
- Purge max age hours (1-87600, default 168)

Existing admin settings now also persist:
- Welcome message
- Default video/audio formats
- Privacy mode + retention hours

Architecture:
- New settings service (services/settings.py) handles DB read/write
- Startup loads persisted settings and applies to AppConfig
- Admin PUT /settings validates, updates live config, and persists
- GET /admin/settings returns all configurable fields
- DownloadService.update_max_concurrent() hot-swaps the thread pool

Also:
- Fix footer GitHub URL (jlightner → xpltdco)
- Add DEPLOY-TEST-PROMPT.md for deployment testing
2026-03-19 12:11:53 -05:00

57 lines
1.2 KiB
Vue

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { api } from '@/api/client'
const appVersion = ref('')
const ytDlpVersion = ref('')
onMounted(async () => {
try {
const health = await api.getHealth()
appVersion.value = health.version
ytDlpVersion.value = health.yt_dlp_version
} catch {
appVersion.value = '?.?.?'
ytDlpVersion.value = 'unknown'
}
})
</script>
<template>
<footer v-if="appVersion" class="app-footer">
<span>media.rip() v{{ appVersion }}</span>
<span class="sep">|</span>
<span>yt-dlp {{ ytDlpVersion }}</span>
<span class="sep">|</span>
<a
href="https://github.com/xpltdco/media-rip"
target="_blank"
rel="noopener noreferrer"
>GitHub</a>
</footer>
</template>
<style scoped>
.app-footer {
text-align: center;
padding: var(--space-lg) var(--space-md);
color: var(--color-text-muted);
font-size: var(--font-size-sm);
opacity: 0.7;
}
.sep {
margin: 0 var(--space-sm);
opacity: 0.5;
}
.app-footer a {
color: var(--color-text-muted);
text-decoration: none;
transition: color var(--transition-normal);
}
.app-footer a:hover {
color: var(--color-accent);
}
</style>