diff --git a/.server_config/nginx.conf b/.server_config/nginx.conf index b6af7c1b..3aee666e 100644 --- a/.server_config/nginx.conf +++ b/.server_config/nginx.conf @@ -3,7 +3,7 @@ listen 443 80; index index.html Index.html; add_header Content-Security-Policy-Report-Only ""; - add_header Content-Security-Policy "frame-src 'self' https://nomercy.tv https://*.nomercy.tv:* https://auth-dev.nomercy.tv https://auth-dev.nomercy.tv/* https://www.youtube.com; worker-src 'self' blob:; connect-src 'self' blob: data: https://nomercy.tv https://*.nomercy.tv:* https://*.nomercy.tv https://*.spotify.com/* https://image.tmdb.org https://api.themoviedb.org https://www.last.fm ws://*.nomercy.tv:* ws://192.168.2.201:* wss://*.nomercy.tv:* wss://127.0.0.1:* wss://localhost:* https://pub-a68768bb5b1045f296df9ea56bd53a7f.r2.dev https://raw.githubusercontent.com; font-src 'self' blob: data: https://cdn.nomercy.tv https://cdn-dev.nomercy.tv; img-src 'self' blob: data: https://nomercy.tv https://*.nomercy.tv:* https://*.nomercy.tv https://*.spotify.com/* https://*.archive.org https://archive.org https://coverartarchive.org https://i.ytimg.com https://image.tmdb.org https://media.themoviedb.org https://lastfm.freetls.fastly.net https://images.fanart.tv https://assets.fanart.tv https://pub-a68768bb5b1045f296df9ea56bd53a7f.r2.dev wss://*.nomercy.tv:*; media-src 'self' blob: data: https://nomercy.tv https://*.nomercy.tv https://*.nomercy.tv:* wss://*.nomercy.tv:* https://pub-a68768bb5b1045f296df9ea56bd53a7f.r2.dev; object-src 'self' blob:; script-src 'self' 'unsafe-eval' 'unsafe-inline' 'unsafe-hashes' https://www.youtube.com https://nomercy.tv https://*.nomercy.tv https://vscode.nomercy.tv https://trailer.nomercy.tv https://*.nomercy.tv:* https://cdn.jsdelivr.net/npm/webvtt-parser@2.2.0/parser.min.js https://www.gstatic.com 'sha256-G3Q1p4s6LacltrOf4BnWiwdl1rEp+mmS6DwpXr5fjKg=' 'sha256-VA8O2hAdooB288EpSTrGLl7z3QikbWU9wwoebO/QaYk=' 'sha256-+5XkZFazzJo8n0iOP4ti/cLCMUudTf//Mzkb7xNPXIc=' 'sha256-MS6/3FCg4WjP9gwgaBGwLpRCY6fZBgwmhVCdrPrNf3E=' 'sha256-tQjf8gvb2ROOMapIxFvFAYBeUJ0v1HCbOcSmDNXGtDo=' 'sha256-+5XkZFazzJo8n0iOP4ti/cLCMUudTf//Mzkb7xNPXIc=' 'sha256-XC/gbdknUrCiLbZdZ8y96M9KVODooJYGbxrY7P+a1Rg=' https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.nomercy.tv https://cdn-dev.nomercy.tv https://storage.nomercy.tv; base-uri 'self';"; + add_header Content-Security-Policy "frame-src 'self' https://nomercy.tv https://*.nomercy.tv:* https://auth-dev.nomercy.tv https://auth-dev.nomercy.tv/* https://www.youtube.com; worker-src 'self' blob:; connect-src 'self' blob: data: https://nomercy.tv https://*.nomercy.tv:* https://*.nomercy.tv https://*.spotify.com/* https://image.tmdb.org https://api.themoviedb.org https://www.last.fm ws://*.nomercy.tv:* ws://192.168.2.201:* wss://*.nomercy.tv:* wss://127.0.0.1:* wss://localhost:* https://pub-a68768bb5b1045f296df9ea56bd53a7f.r2.dev https://raw.githubusercontent.com; font-src 'self' blob: data: https://cdn.nomercy.tv https://cdn-dev.nomercy.tv; img-src 'self' blob: data: https://nomercy.tv https://*.nomercy.tv:* https://*.nomercy.tv https://*.spotify.com/* https://*.archive.org https://archive.org https://coverartarchive.org https://i.ytimg.com https://image.tmdb.org https://media.themoviedb.org https://lastfm.freetls.fastly.net https://images.fanart.tv https://assets.fanart.tv https://pub-a68768bb5b1045f296df9ea56bd53a7f.r2.dev wss://*.nomercy.tv:*; media-src 'self' blob: data: https://nomercy.tv https://*.nomercy.tv https://*.nomercy.tv:* wss://*.nomercy.tv:* https://pub-a68768bb5b1045f296df9ea56bd53a7f.r2.dev; object-src 'self' blob:; script-src 'self' 'unsafe-eval' 'unsafe-inline' 'unsafe-hashes' https://www.youtube.com https://nomercy.tv https://*.nomercy.tv https://vscode.nomercy.tv https://trailer.nomercy.tv https://*.nomercy.tv:* https://cdn.jsdelivr.net/npm/webvtt-parser@2.2.0/parser.min.js https://www.gstatic.com 'sha256-G3Q1p4s6LacltrOf4BnWiwdl1rEp+mmS6DwpXr5fjKg=' 'sha256-VA8O2hAdooB288EpSTrGLl7z3QikbWU9wwoebO/QaYk=' 'sha256-+5XkZFazzJo8n0iOP4ti/cLCMUudTf//Mzkb7xNPXIc=' 'sha256-MS6/3FCg4WjP9gwgaBGwLpRCY6fZBgwmhVCdrPrNf3E=' 'sha256-tQjf8gvb2ROOMapIxFvFAYBeUJ0v1HCbOcSmDNXGtDo=' 'sha256-+5XkZFazzJo8n0iOP4ti/cLCMUudTf//Mzkb7xNPXIc=' 'sha256-XC/gbdknUrCiLbZdZ8y96M9KVODooJYGbxrY7P+a1Rg=' https://static.cloudflareinsights.com 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY=' 'sha256-eQuPjK9gyGgVdG8wOb8JD6hWUvJKo06S/x1cBPdeTdY='; style-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.nomercy.tv https://cdn-dev.nomercy.tv https://storage.nomercy.tv; base-uri 'self';"; add_header Report-To ""; add_header Referrer-Policy "strict-origin-when-cross-origin"; diff --git a/index.html b/index.html index 8e47d90f..4463c4c0 100644 --- a/index.html +++ b/index.html @@ -1,106 +1,106 @@ - - + + - - + + - - - + + + - + NoMercy TV - + - + - + - - - - - + + + + + - - + + - - - - - + + + + + - - - + + + - + - - - - + + + + - + @@ -108,338 +108,748 @@ - - - + + + + + - + - -
-
+ +
+
- - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +
-
- - - - - - - -
+
+ + + + + + + +
-
-
- - +
+
+ + diff --git a/public/locales/nl/translation.json b/public/locales/nl/translation.json index a954d8b1..fec660e8 100644 --- a/public/locales/nl/translation.json +++ b/public/locales/nl/translation.json @@ -61,6 +61,8 @@ "View album": "Album weergeven", "Add to songs you like": "Voeg aan nummers die je leuk vind toe", "Add to playlist": "Voeg aan afspeellijst toe", + "Add to my list": "Voeg aan mijn lijst toe", + "Remove from my list": "Verwijder van mijn lijst", "Share": "Delen", "Copy link": "Link kopieren", "Embed song": "Nummer embedden", @@ -319,5 +321,14 @@ "Add selection": "Selectie toevoegen", "Select all": "Alles selecteren", "Add folder": "Map toevoegen", - "Select": "Selecteren" + "Select": "Selecteren", + + "Good Evening": "Goedenavond", + "Good Afternoon": "Goedemiddag", + "Good Morning": "Goedemorgen", + "Good Night": "Goedenacht", + "Goodbye": "Tot ziens", + + "What would you like to see?": "Wat wilt u zien?", + "What would you like to listen to?": "Wat wilt u luisteren?" } diff --git a/src/Layout/Desktop/DashboardLayout.vue b/src/Layout/Desktop/DashboardLayout.vue index 694724e2..9f88bc7d 100644 --- a/src/Layout/Desktop/DashboardLayout.vue +++ b/src/Layout/Desktop/DashboardLayout.vue @@ -136,7 +136,7 @@ watch(dataUpdatedAt, (value) => {
+ class="flex flex-col relative z-0 h-available min-h-[90vh] h-px overflow-clip items-start justify-start self-stretch w-available bg-slate-light-3 dark:bg-slate-dark-2">
diff --git a/src/components/Cards/SearchCard.vue b/src/components/Cards/SearchCard.vue index 77db439b..cf222361 100644 --- a/src/components/Cards/SearchCard.vue +++ b/src/components/Cards/SearchCard.vue @@ -89,10 +89,7 @@ const loadMore = ref(null);

- {{ $t('Good') }} - - {{ greetingValue }} - + {{ $t(`Good ${greetingValue}`) }}

{{ $t('Welcome to your one-stop search for all your streaming needs') }}. @@ -117,10 +114,7 @@ const loadMore = ref(null); class="relative flex w-full flex-shrink-0 flex-grow-0 flex-col items-center justify-end gap-3">

- {{ $t('Good') }} - - {{ greetingValue }} - + {{ $t(`Good ${greetingValue}`) }}

{{ $t('Welcome to your one-stop search for all your streaming needs') }}. diff --git a/src/components/NMHomeCard.vue b/src/components/NMHomeCard.vue index 7fbcb657..9638c5b8 100644 --- a/src/components/NMHomeCard.vue +++ b/src/components/NMHomeCard.vue @@ -270,8 +270,8 @@ onIonViewWillLeave(() => {

- {{ $t('Remove from my List') }} - {{ $t('Add to my List') }} + {{ $t('Remove from my list') }} + {{ $t('Add to my list') }}

diff --git a/src/lib/middleware/getLocations.ts b/src/lib/middleware/getLocations.ts index 44c3d6f3..2f87586b 100644 --- a/src/lib/middleware/getLocations.ts +++ b/src/lib/middleware/getLocations.ts @@ -1,7 +1,7 @@ import apiClient from '../clients/apiClient'; import servers, { setServers } from '@/store/servers'; -import { updateUserFromApi } from '@/store/user'; +import {updateUserFromApi, user} from '@/store/user'; import { setCurrentServer } from '@/store/currentServer'; import type { User } from '@/types/auth'; @@ -31,23 +31,27 @@ const getLocations = (): Promise => new Promise((resolve, reject) => { setMessages(data.data.receivedMessages); setNotifications(data.data.notifications); + user.value = { + ...user.value, + locale: data.data.locale, + name: data.data.name, + }; + if (servers.value.length == 0) { - done.value = true; await router.push({ name: 'No Servers' }); } else if (servers.value.length == 1) { - done.value = true; setCurrentServer(servers.value[0]); } else if (servers.value.length > 1 && !!localStorage.getItem('currentServer')) { - done.value = true; setCurrentServer(servers.value.find(server => server.id == localStorage.getItem('currentServer'))!); } else if (servers.value.length > 1) { - done.value = true; await router.push({ name: 'Select Server' }); } + done.value = true; + resolve(); }) .catch((error) => { diff --git a/src/store/colorTheme.ts b/src/store/colorTheme.ts index 113d2558..987e0cca 100644 --- a/src/store/colorTheme.ts +++ b/src/store/colorTheme.ts @@ -37,7 +37,7 @@ export const setColorTheme = async (value: string) => { if (value) { el.classList.add(`theme-${value}`); } else { - el.classList.add('theme-system'); + el.classList.add('theme-violet'); } await Preferences.set({ diff --git a/src/views/Base/Info/Desktop.vue b/src/views/Base/Info/Desktop.vue index 2e0de0e7..2860391a 100644 --- a/src/views/Base/Info/Desktop.vue +++ b/src/views/Base/Info/Desktop.vue @@ -14,7 +14,7 @@ import useServerClient from '@/lib/clients/useServerClient'; import { setTitle, sortByPosterAlphabetized } from '@/lib/stringArray'; import { pickPaletteColor } from '@/lib/colorHelper'; import serverClient from '@/lib/clients/serverClient'; -import { background, poster, setBackground, setColorPalette, setLogo, setPoster } from '@/store/ui'; +import {background, colorPalette, poster, setBackground, setColorPalette, setLogo, setPoster} from '@/store/ui'; import { currentSong } from '@/store/audioPlayer'; import ListControlHeaderMoreMenu from '@/Layout/Desktop/components/Menus/ListControlHeaderMoreMenu.vue'; @@ -123,9 +123,6 @@ onMounted(() => { onUnmounted(() => { clearInterval(interval.value ?? undefined); - setPoster(null); - setBackground(null); - setColorPalette(null); }); const toggleTrailer = () => { @@ -325,14 +322,14 @@ const menuItems: IMenuItem[] = [
-
- { }); onUnmounted(() => { - setPoster(null); - setBackground(null); - setColorPalette(null); content.value?.$el?.scrollToTop(window.innerHeight); }); @@ -110,8 +107,8 @@ router.afterEach(() => {
- diff --git a/src/views/Base/Info/components/MobileInfoCard.vue b/src/views/Base/Info/components/MobileInfoCard.vue index 1fd4c2a7..531747ec 100644 --- a/src/views/Base/Info/components/MobileInfoCard.vue +++ b/src/views/Base/Info/components/MobileInfoCard.vue @@ -52,7 +52,7 @@ const title = computed(() => {