Feat: add app manifest to allow the app to be installed
This commit is contained in:
parent
8e6f5fc293
commit
98fbf00a63
7 changed files with 289 additions and 244 deletions
|
|
@ -19,6 +19,7 @@ EXT_TO_MIME: dict = {
|
|||
".js": "application/javascript",
|
||||
".json": "application/json",
|
||||
".ico": "image/x-icon",
|
||||
".webmanifest": "application/manifest+json",
|
||||
}
|
||||
|
||||
FRONTEND_ROUTES: list[str] = [
|
||||
|
|
@ -35,7 +36,6 @@ FRONTEND_ROUTES: list[str] = [
|
|||
"/browser/{path:.*}",
|
||||
]
|
||||
|
||||
|
||||
async def serve_static_file(request: Request, config: Config) -> Response:
|
||||
"""
|
||||
Preload static files from the ui/exported folder.
|
||||
|
|
|
|||
|
|
@ -154,17 +154,18 @@
|
|||
<div>
|
||||
<NuxtLoadingIndicator />
|
||||
<NuxtPage v-if="config.is_loaded" :isLoading="loadingImage" @reload_bg="() => loadImage(true)" />
|
||||
<Message v-if="!config.is_loaded" class="mt-5" :newStyle="true"
|
||||
title="Loading Configuration" icon="fas fa-spinner fa-spin">
|
||||
<p>Loading application configuration. This usually takes less than a second.</p>
|
||||
<p v-if="!socket.isConnected" class="mt-2">
|
||||
If this is taking too long, please check that the backend server is running and that the WebSocket
|
||||
connection is functional.
|
||||
<Message v-if="!config.is_loaded" class="mt-5" :newStyle="true" title="Loading Configuration"
|
||||
icon="fas fa-spinner fa-spin">
|
||||
<p>This usually takes less than a second.
|
||||
<span v-if="!socket.isConnected" class="mt-2">
|
||||
If this is taking too long, please check that the backend server is running and that the WebSocket
|
||||
connection is functional.
|
||||
</span>
|
||||
</p>
|
||||
<p v-if="socket.error" class="has-text-danger">
|
||||
<span class="icon-text">
|
||||
<span class="icon"><i class="fas fa-triangle-exclamation" /></span>
|
||||
{{ socket.error }}
|
||||
{{ socket.error }}. Check the developer console for more information.
|
||||
</span>
|
||||
</p>
|
||||
</Message>
|
||||
|
|
|
|||
|
|
@ -43,9 +43,18 @@ export default defineNuxtConfig({
|
|||
{ "charset": "utf-8" },
|
||||
{ "name": "viewport", "content": "width=device-width, initial-scale=1.0, maximum-scale=1.0" },
|
||||
{ "name": "theme-color", "content": "#000000" },
|
||||
{ "name": "mobile-web-app-capable", "content": "yes" },
|
||||
{ "name": "apple-mobile-web-app-capable", "content": "yes" },
|
||||
{ "name": "apple-mobile-web-app-status-bar-style", "content": "black-translucent" },
|
||||
{ "name": "apple-mobile-web-app-title", "content": "YTPTube" },
|
||||
],
|
||||
base: { "href": "/" },
|
||||
link: [{ rel: 'icon', type: 'image/x-icon', href: 'favicon.ico?v=100' }]
|
||||
link: [
|
||||
{ rel: 'icon', type: 'image/x-icon', href: 'favicon.ico?v=100' },
|
||||
{ rel: 'manifest', href: 'manifest.webmanifest?v=100' },
|
||||
{ rel: 'apple-touch-icon', href: 'images/favicon.png' },
|
||||
{ rel: 'apple-touch-startup-image', href: 'images/logo.png' }
|
||||
]
|
||||
},
|
||||
pageTransition: { name: 'page', mode: 'out-in' }
|
||||
},
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
"devDependencies": {
|
||||
"@nuxt/eslint": "^1.10.0",
|
||||
"@nuxt/eslint-config": "^1.10.0",
|
||||
"@typescript-eslint/parser": "^8.46.3",
|
||||
"@typescript-eslint/parser": "^8.46.4",
|
||||
"eslint": "^9.39.1",
|
||||
"typescript": "^5.9.3",
|
||||
"vitest": "^4.0.8",
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
BIN
ui/public/images/favicon.png
Normal file
BIN
ui/public/images/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
35
ui/public/manifest.webmanifest
Normal file
35
ui/public/manifest.webmanifest
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"short_name": "YTP",
|
||||
"name": "YTPTube",
|
||||
"description": "Web-based GUI for yt-dlp. Download videos, playlists, channels, and live streams from various platforms.",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#000000",
|
||||
"theme_color": "#000000",
|
||||
"orientation": "any",
|
||||
"categories": [
|
||||
"downloaders",
|
||||
"video",
|
||||
"audio"
|
||||
],
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "32x32",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "images/favicon.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
}
|
||||
],
|
||||
"screenshots": [
|
||||
{
|
||||
"src": "images/logo.png",
|
||||
"sizes": "800x600",
|
||||
"type": "image/png"
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Reference in a new issue