mirror of
https://github.com/jeffvli/feishin.git
synced 2026-07-11 21:19:59 +02:00
Compare commits
3 Commits
f6f25154a1
...
de0ddfe226
| Author | SHA1 | Date | |
|---|---|---|---|
| de0ddfe226 | |||
| d23f7619ec | |||
| 44de6f2207 |
@@ -44,8 +44,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -129,8 +127,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -19,8 +19,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -123,8 +121,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -16,8 +16,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -16,8 +16,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -38,8 +38,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -16,8 +16,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -16,8 +16,6 @@ jobs:
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -12,8 +12,6 @@ jobs:
|
||||
|
||||
- name: Install Node.js and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
+1
-4
@@ -3,10 +3,7 @@ FROM node:23-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package.json first to cache node_modules
|
||||
COPY package.json pnpm-lock.yaml .
|
||||
|
||||
# Match CI (pnpm/action-setup version: 10). Latest pnpm 11 fails install without approve-builds.
|
||||
RUN corepack enable && corepack prepare pnpm@10 --activate
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .
|
||||
|
||||
RUN pnpm install
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ linux:
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.2'
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ linux:
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.2'
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
publish:
|
||||
|
||||
@@ -63,7 +63,7 @@ linux:
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.2'
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
afterAllArtifactBuild: scripts/after-all-artifact-build.mjs
|
||||
|
||||
+42
-42
@@ -69,79 +69,78 @@
|
||||
"postversion": "node ./scripts/update-app-stream.mjs"
|
||||
},
|
||||
"resolutions": {
|
||||
"react-router": "7.14.0",
|
||||
"xml2js": "0.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
|
||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
|
||||
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
|
||||
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.2.0",
|
||||
"@electron-toolkit/preload": "^3.0.2",
|
||||
"@electron-toolkit/utils": "^4.0.0",
|
||||
"@mantine/colors-generator": "^9.1.1",
|
||||
"@mantine/core": "^9.1.1",
|
||||
"@mantine/dates": "^9.1.1",
|
||||
"@mantine/form": "^9.1.1",
|
||||
"@mantine/hooks": "^9.1.1",
|
||||
"@mantine/modals": "^9.1.1",
|
||||
"@mantine/notifications": "^9.1.1",
|
||||
"@radix-ui/react-context-menu": "^2.2.16",
|
||||
"@tanstack/react-query": "^5.96.2",
|
||||
"@tanstack/react-query-devtools": "^5.96.2",
|
||||
"@tanstack/react-query-persist-client": "^5.96.2",
|
||||
"@mantine/colors-generator": "^9.3.0",
|
||||
"@mantine/core": "^9.3.0",
|
||||
"@mantine/dates": "^9.3.0",
|
||||
"@mantine/form": "^9.3.0",
|
||||
"@mantine/hooks": "^9.3.0",
|
||||
"@mantine/modals": "^9.3.0",
|
||||
"@mantine/notifications": "^9.3.0",
|
||||
"@radix-ui/react-context-menu": "^2.3.0",
|
||||
"@tanstack/react-query": "5.96.2",
|
||||
"@tanstack/react-query-devtools": "5.96.2",
|
||||
"@tanstack/react-query-persist-client": "5.96.2",
|
||||
"@ts-rest/core": "^3.52.1",
|
||||
"@wavesurfer/react": "^1.0.12",
|
||||
"@xhayper/discord-rpc": "^1.3.3",
|
||||
"@xhayper/discord-rpc": "^1.3.4",
|
||||
"audiomotion-analyzer": "^4.5.4",
|
||||
"axios": "^1.14.0",
|
||||
"axios": "^1.17.0",
|
||||
"butterchurn": "3.0.0-beta.5",
|
||||
"butterchurn-presets": "3.0.0-beta.4",
|
||||
"cheerio": "^1.2.0",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.1.1",
|
||||
"dayjs": "^1.11.20",
|
||||
"dompurify": "^3.3.3",
|
||||
"dayjs": "^1.11.21",
|
||||
"dompurify": "^3.4.8",
|
||||
"electron-debug": "^3.2.0",
|
||||
"electron-localshortcut": "^3.2.1",
|
||||
"electron-log": "^5.4.3",
|
||||
"electron-log": "^5.4.4",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-updater": "^6.8.3",
|
||||
"electron-updater": "^6.8.9",
|
||||
"fast-average-color": "9.5.0",
|
||||
"fast-xml-parser": "^5.5.10",
|
||||
"fast-xml-parser": "^5.8.0",
|
||||
"format-duration": "^3.0.2",
|
||||
"fuse.js": "^7.2.0",
|
||||
"fuse.js": "^7.4.2",
|
||||
"i18next": "^25.10.10",
|
||||
"icecast-metadata-stats": "^0.1.12",
|
||||
"idb-keyval": "^6.2.2",
|
||||
"idb-keyval": "^6.2.5",
|
||||
"immer": "^10.2.0",
|
||||
"is-electron": "^2.2.2",
|
||||
"lodash": "^4.18.1",
|
||||
"md5": "^2.3.0",
|
||||
"motion": "^12.38.0",
|
||||
"motion": "^12.40.0",
|
||||
"mpris-service": "^2.1.2",
|
||||
"nanoid": "^3.3.11",
|
||||
"nanoid": "^3.3.12",
|
||||
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
|
||||
"overlayscrollbars": "^2.14.0",
|
||||
"overlayscrollbars": "^2.16.0",
|
||||
"overlayscrollbars-react": "^0.5.6",
|
||||
"qs": "^6.15.0",
|
||||
"react": "^19.2.4",
|
||||
"qs": "^6.15.2",
|
||||
"react": "^19.2.7",
|
||||
"react-call": "^1.8.2",
|
||||
"react-dom": "^19.2.4",
|
||||
"react-dom": "^19.2.7",
|
||||
"react-error-boundary": "^5.0.0",
|
||||
"react-i18next": "^16.6.6",
|
||||
"react-icons": "^5.6.0",
|
||||
"react-player": "^2.16.1",
|
||||
"react-router": "^7.14.0",
|
||||
"react-router": "^7.17.0",
|
||||
"react-split-pane": "^3.2.0",
|
||||
"react-virtualized-auto-sizer": "^1.0.26",
|
||||
"react-window": "1.8.11",
|
||||
"react-window-v2": "npm:react-window@^2.2.7",
|
||||
"semver": "^7.7.4",
|
||||
"semver": "^7.8.2",
|
||||
"string-to-color": "^2.2.2",
|
||||
"wavesurfer.js": "^7.12.5",
|
||||
"ws": "^8.20.0",
|
||||
"wavesurfer.js": "^7.12.7",
|
||||
"ws": "^8.21.0",
|
||||
"zod": "^3.25.76",
|
||||
"zustand": "^5.0.12"
|
||||
"zustand": "^5.0.14"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
|
||||
@@ -150,8 +149,8 @@
|
||||
"@types/electron-localshortcut": "^3.1.3",
|
||||
"@types/lodash": "^4.17.24",
|
||||
"@types/md5": "^2.3.6",
|
||||
"@types/node": "^24.12.2",
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/node": "^24.13.1",
|
||||
"@types/react": "^19.2.17",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/react-window": "^1.8.8",
|
||||
"@types/source-map-support": "^0.5.10",
|
||||
@@ -160,32 +159,33 @@
|
||||
"babel-plugin-react-compiler": "^1.0.0",
|
||||
"concurrently": "^9.2.1",
|
||||
"cross-env": "^10.1.0",
|
||||
"electron": "^41.7.0",
|
||||
"electron-builder": "^26.8.2",
|
||||
"electron": "^41.7.1",
|
||||
"electron-builder": "^26.15.0",
|
||||
"electron-devtools-installer": "^4.0.0",
|
||||
"electron-vite": "^4.0.1",
|
||||
"eslint": "^9.39.4",
|
||||
"eslint-plugin-perfectionist": "^4.15.1",
|
||||
"eslint-plugin-prettier": "^5.5.5",
|
||||
"eslint-plugin-prettier": "^5.5.6",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"eslint-plugin-react-hooks": "^7.0.1",
|
||||
"eslint-plugin-react-hooks": "^7.1.1",
|
||||
"eslint-plugin-react-refresh": "^0.4.26",
|
||||
"i18next-parser": "^9.4.0",
|
||||
"postcss-preset-mantine": "^1.18.0",
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"prettier": "^3.8.1",
|
||||
"prettier": "^3.8.3",
|
||||
"prettier-plugin-packagejson": "^2.5.22",
|
||||
"stylelint": "^16.26.1",
|
||||
"stylelint-config-css-modules": "^4.6.0",
|
||||
"stylelint-config-recess-order": "^7.7.0",
|
||||
"stylelint-config-standard": "^39.0.1",
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "^7.3.1",
|
||||
"vite": "^7.3.5",
|
||||
"vite-plugin-conditional-import": "^0.1.7",
|
||||
"vite-plugin-dynamic-import": "^1.6.0",
|
||||
"vite-plugin-ejs": "^1.7.0",
|
||||
"vite-plugin-pwa": "^1.2.0"
|
||||
"vite-plugin-pwa": "^1.3.0"
|
||||
},
|
||||
"packageManager": "pnpm@11.5.2",
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"electron",
|
||||
|
||||
Generated
+2186
-2388
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,9 @@
|
||||
allowBuilds:
|
||||
abstract-socket: true
|
||||
electron: true
|
||||
electron-winstaller: true
|
||||
esbuild: true
|
||||
|
||||
overrides:
|
||||
"xml2js": "0.5.0"
|
||||
"react-router": "7.14.0"
|
||||
+11
-11
@@ -549,19 +549,19 @@
|
||||
"cancel": "Zrušit",
|
||||
"forceRestartRequired": "Restartujte pro použití změn… zavřete oznámení pro restartování",
|
||||
"setting_one": "Nastavení",
|
||||
"setting_few": "nastavení",
|
||||
"setting_few": "Nastavení",
|
||||
"setting_other": "Nastavení",
|
||||
"version": "Verze",
|
||||
"title": "Název",
|
||||
"filter_one": "Filtr",
|
||||
"filter_few": "filtry",
|
||||
"filter_few": "Filtry",
|
||||
"filter_other": "Filtrů",
|
||||
"filters": "Filtry",
|
||||
"create": "Vytvořit",
|
||||
"bitrate": "Datový tok",
|
||||
"saveAndReplace": "Uložit a nahradit",
|
||||
"action_one": "Akce",
|
||||
"action_few": "akce",
|
||||
"action_few": "Akce",
|
||||
"action_other": "Akcí",
|
||||
"playerMustBePaused": "Přehrávač musí být pozastaven",
|
||||
"confirm": "Potvrdit",
|
||||
@@ -570,7 +570,7 @@
|
||||
"comingSoon": "Již brzy…",
|
||||
"reset": "Resetovat",
|
||||
"channel_one": "Kanál",
|
||||
"channel_few": "kanály",
|
||||
"channel_few": "Kanály",
|
||||
"channel_other": "Kanálů",
|
||||
"disable": "Vypnout",
|
||||
"sortOrder": "Pořadí",
|
||||
@@ -1161,13 +1161,13 @@
|
||||
},
|
||||
"entity": {
|
||||
"genre_one": "Žánr",
|
||||
"genre_few": "žánry",
|
||||
"genre_few": "Žánry",
|
||||
"genre_other": "Žánry",
|
||||
"playlistWithCount_one": "{{count}} playlist",
|
||||
"playlistWithCount_few": "{{count}} playlisty",
|
||||
"playlistWithCount_other": "{{count}} playlistů",
|
||||
"playlist_one": "Playlist",
|
||||
"playlist_few": "playlisty",
|
||||
"playlist_few": "Playlisty",
|
||||
"playlist_other": "Playlisty",
|
||||
"artist_one": "Umělec",
|
||||
"artist_few": "Umělci",
|
||||
@@ -1179,7 +1179,7 @@
|
||||
"albumArtist_few": "Umělci alb",
|
||||
"albumArtist_other": "Umělci alb",
|
||||
"track_one": "Skladba",
|
||||
"track_few": "skladby",
|
||||
"track_few": "Skladby",
|
||||
"track_other": "Skladby",
|
||||
"albumArtistCount_one": "{{count}} umělec alba",
|
||||
"albumArtistCount_few": "{{count}} umělci alba",
|
||||
@@ -1194,7 +1194,7 @@
|
||||
"artistWithCount_few": "{{count}} umělci",
|
||||
"artistWithCount_other": "{{count}} umělců",
|
||||
"folder_one": "Složka",
|
||||
"folder_few": "složky",
|
||||
"folder_few": "Složky",
|
||||
"folder_other": "Složky",
|
||||
"smartPlaylist": "Chytrý $t(entity.playlist, {\"count\": 1})",
|
||||
"album_one": "Album",
|
||||
@@ -1209,9 +1209,9 @@
|
||||
"play_one": "{{count}} přehrání",
|
||||
"play_few": "{{count}} přehrání",
|
||||
"play_other": "{{count}} přehrání",
|
||||
"song_one": "Píseň",
|
||||
"song_few": "písničky",
|
||||
"song_other": "Písní",
|
||||
"song_one": "Skladba",
|
||||
"song_few": "Skladby",
|
||||
"song_other": "Skladby",
|
||||
"radioStation_one": "Stanice rádia",
|
||||
"radioStation_few": "Stanice rádia",
|
||||
"radioStation_other": "Stanice rádia",
|
||||
|
||||
+29
-29
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"action": {
|
||||
"addToFavorites": "Lisa üksusesse $t(entity.favorite, {\"count\": 2})",
|
||||
"addToPlaylist": "Lisa üksusesse $t(entity.playlist, {\"count\": 1})",
|
||||
"addToFavorites": "Lisa > $t(entity.favorite, {\"count\": 2})",
|
||||
"addToPlaylist": "Lisa > $t(entity.playlist, {\"count\": 1})",
|
||||
"addOrRemoveFromSelection": "Lisa või eemalda valikust",
|
||||
"selectRangeOfItems": "Vali mitu üksust korraga",
|
||||
"clearQueue": "Tühjenda järjekord",
|
||||
@@ -206,12 +206,12 @@
|
||||
"playlistWithCount_one": "{{count}} esitusloend",
|
||||
"playlistWithCount_other": "{{count}} esitusloendit",
|
||||
"smartPlaylist": "Nutikas $t(entity.playlist, {\"count\": 1})",
|
||||
"track_one": "Rada",
|
||||
"track_other": "Rajad",
|
||||
"song_one": "Lugu",
|
||||
"song_other": "Lood",
|
||||
"trackWithCount_one": "{{count}} rada",
|
||||
"trackWithCount_other": "{{count}} rada"
|
||||
"track_one": "Pala",
|
||||
"track_other": "Palad",
|
||||
"song_one": "Laul",
|
||||
"song_other": "Laulud",
|
||||
"trackWithCount_one": "{{count}} pala",
|
||||
"trackWithCount_other": "{{count}} pala"
|
||||
},
|
||||
"error": {
|
||||
"apiRouteError": "Päringut ei saanud edastada",
|
||||
@@ -288,11 +288,11 @@
|
||||
"releaseDate": "Ilmumiskuupäev",
|
||||
"releaseYear": "Ilmumisaasta",
|
||||
"search": "Otsing",
|
||||
"songCount": "Lugude arv",
|
||||
"songCount": "Laulude arv",
|
||||
"explicitStatus": "$t(common.explicitStatus)",
|
||||
"title": "Pealkiri",
|
||||
"sortName": "Sortimisnimi",
|
||||
"trackNumber": "Lugu",
|
||||
"trackNumber": "Pala",
|
||||
"toYear": "Aastasse"
|
||||
},
|
||||
"filterOperator": {
|
||||
@@ -342,11 +342,11 @@
|
||||
"addToPlaylist": {
|
||||
"create": "Loo $t(entity.playlist, {\"count\": 1}) {{playlist}}",
|
||||
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"noneAdded": "$t(entity.playlist, {\"count\": 1}) '{{playlist}}' ei lisatud ühtegi lugu",
|
||||
"noneAdded": "$t(entity.playlist, {\"count\": 1}) '{{playlist}}' ei lisatud ühtegi pala",
|
||||
"input_skipDuplicates": "Jäta duplikaadid vahele",
|
||||
"searchOrCreate": "Otsi $t(entity.playlist, {\"count\": 2}) või kirjuta uue loomiseks",
|
||||
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) lisati $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||
"title": "Lisa esitusloendisse $t(entity.playlist, {\"count\": 1})"
|
||||
"title": "Lisa > $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"createPlaylist": {
|
||||
"input_description": "$t(common.description)",
|
||||
@@ -414,9 +414,9 @@
|
||||
"input_kind_songs": "Lood",
|
||||
"input_kind": "Juhuvalikud",
|
||||
"input_limit_albums": "Mitu albumit?",
|
||||
"input_limit_songs": "Mitu lugu?",
|
||||
"input_limit_songs": "Mitu laulu?",
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"input_limit": "Mitu lugu?",
|
||||
"input_limit": "Mitu laulu?",
|
||||
"input_minYear": "Aastast",
|
||||
"input_maxYear": "Aastani",
|
||||
"input_played": "Esita filter",
|
||||
@@ -587,7 +587,7 @@
|
||||
"itemDetail": {
|
||||
"copyPath": "Kopeeri tee lõikelauale",
|
||||
"copiedPath": "Tee kopeeriti edukalt",
|
||||
"openFile": "Kuva lugu failihalduris"
|
||||
"openFile": "Kuva pala failihalduris"
|
||||
},
|
||||
"playlist": {
|
||||
"reorder": "Ümberreastamine on lubatud vaid ID järgi sorteerimisel"
|
||||
@@ -663,11 +663,11 @@
|
||||
"next": "Järgmine",
|
||||
"play": "Esita",
|
||||
"playbackFetchCancel": "See võtab veidi aega… tühistamiseks sulge teavitus",
|
||||
"playbackFetchInProgress": "Lugude laadimine…",
|
||||
"playbackFetchNoResults": "Ühtegi lugu ei leitud",
|
||||
"playbackFetchInProgress": "Laulude laadimine…",
|
||||
"playbackFetchNoResults": "Ühtegi laulu ei leitud",
|
||||
"playbackSpeed": "Taasesituse kiirus",
|
||||
"playRandom": "Esita juhuslikult",
|
||||
"playSimilarSongs": "Esita sarnaseid lugusid",
|
||||
"playSimilarSongs": "Esita sarnaseid laule",
|
||||
"previous": "Eelmine",
|
||||
"queue_clear": "Tühjenda järjekord",
|
||||
"queue_moveToBottom": "Liiguta valitud lõppu",
|
||||
@@ -733,7 +733,7 @@
|
||||
"autoDJ_itemCount": "Üksuste arv",
|
||||
"autoDJ_itemCount_description": "Järjekorda lisatavate üksuste arv",
|
||||
"autoDJ_timing": "Ajastus",
|
||||
"autoDJ_timing_description": "Lugude arv järjekorras enne automaatse DJ käivitumist",
|
||||
"autoDJ_timing_description": "Laulude arv järjekorras enne automaatse DJ käivitumist",
|
||||
"autoDJ_mode": "Režiim",
|
||||
"autoDJ_mode_albums": "Albumid",
|
||||
"autoDJ_mode_description": "Vali, kas lisada järjekorda üksikud lood või terved albumid",
|
||||
@@ -850,7 +850,7 @@
|
||||
"externalLinks_description": "Lubab esitaja ja albumi lehtedel näidata väliseid linke (Last.fm, MusicBrainz)",
|
||||
"externalLinks": "Kuva välised lingid",
|
||||
"followCurrentSong_description": "Keri esitusjärjekord automaatselt hetkel mängiva looni",
|
||||
"followCurrentSong": "Jälgi praegust lugu",
|
||||
"followCurrentSong": "Jälgi praegust laulu",
|
||||
"followLyric_description": "Keri laulusõnad praegusesse kohta",
|
||||
"followLyric": "Jälgi laulusõnu",
|
||||
"font_description": "Määrab rakenduses kasutatava fondi",
|
||||
@@ -884,13 +884,13 @@
|
||||
"hotkey_listPlayLast": "Lisa järjekorra lõppu",
|
||||
"hotkey_listPlayNext": "Esita järgmisena",
|
||||
"hotkey_listPlayNow": "Esita kohe",
|
||||
"hotkey_listShowPlayingSong": "Kuva esitatav lugu loendis",
|
||||
"hotkey_listShowPlayingSong": "Kuva esitatav laul loendis",
|
||||
"hotkey_navigateHome": "Liigu avalehele",
|
||||
"hotkey_playbackNext": "Järgmine lugu",
|
||||
"hotkey_playbackNext": "Järgmine pala",
|
||||
"hotkey_playbackPause": "Paus",
|
||||
"hotkey_playbackPlay": "Esita",
|
||||
"hotkey_playbackPlayPause": "Esita / peata",
|
||||
"hotkey_playbackPrevious": "Eelmine lugu",
|
||||
"hotkey_playbackPrevious": "Eelmine pala",
|
||||
"hotkey_playbackStop": "Peata",
|
||||
"hotkey_rate0": "Eemalda hinne",
|
||||
"hotkey_rate1": "Hinne 1 tärn",
|
||||
@@ -959,26 +959,26 @@
|
||||
"neteaseTranslation_description": "Sisselülitamisel otsitakse ja kuvatakse võimaluse korral NetEase'ist pärit tõlgitud laulusõnu",
|
||||
"neteaseTranslation": "Luba NetEase'i tõlked",
|
||||
"notify": "Luba lauluteavitused",
|
||||
"notify_description": "Näita teavitust, kui lugu vahetub",
|
||||
"notify_description": "Näita teavitust, kui laul vahetub",
|
||||
"pathReplace": "Failitee asendamine",
|
||||
"pathReplace_description": "Asenda oma serveri vaikimisi failitee",
|
||||
"pathReplace_optionRemovePrefix": "Eemalda eesliide",
|
||||
"pathReplace_optionAddPrefix": "Lisa eesliide",
|
||||
"passwordStore_description": "Millist paroolihoidlat kasutada. Muuda seda juhul, kui paroolide salvestamisega on probleeme",
|
||||
"passwordStore": "Paroolihoidla",
|
||||
"playerFilters": "Filtreeri lugusid järjekorrast",
|
||||
"playerFilters": "Filtreeri laule järjekorrast",
|
||||
"playerFilters_description": "Jäta lood järjekorda lisamata järgmiste kriteeriumide põhjal",
|
||||
"playbackStyle_description": "Vali pleieri esitusstiil",
|
||||
"playbackStyle_optionCrossFade": "Ristvahetus",
|
||||
"playbackStyle_optionNormal": "Tavaline",
|
||||
"playbackStyle": "Taasesituse stiil",
|
||||
"playButtonBehavior_description": "Määrab esitusnupu vaikimisi käitumise lugude järjekorda lisamisel",
|
||||
"playButtonBehavior_description": "Määrab esitusnupu vaikimisi käitumise laulude järjekorda lisamisel",
|
||||
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
|
||||
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
|
||||
"playButtonBehavior_optionPlay": "$t(player.play)",
|
||||
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
|
||||
"playButtonBehavior": "Esitusnupu käitumine",
|
||||
"artistRadioCount_description": "Määrab lugude arvu, mis laetakse esitaja- ja looraadio jaoks",
|
||||
"artistRadioCount_description": "Määrab laulude arvu, mis laetakse esitaja- ja looraadio jaoks",
|
||||
"artistRadioCount": "Esitaja-/looraadio lugude arv",
|
||||
"imageResolution": "Pildi resolutsioon",
|
||||
"imageResolution_description": "Rakenduses kasutatavate piltide resolutsioon. Väärtuse 0 puhul kasutatakse pildi algset resolutsiooni",
|
||||
@@ -1322,7 +1322,7 @@
|
||||
"sampleRate": "Diskreetimissagedus",
|
||||
"size": "Suurus",
|
||||
"title": "Pealkiri",
|
||||
"trackNumber": "Lugu",
|
||||
"trackNumber": "Pala",
|
||||
"owner": "Omanik",
|
||||
"channels": "Kanalid",
|
||||
"songCount": "Lood"
|
||||
@@ -1339,7 +1339,7 @@
|
||||
"alignLeft": "Joonda vasakule",
|
||||
"alignCenter": "Joonda keskele",
|
||||
"alignRight": "Joonda paremale",
|
||||
"followCurrentSong": "Jälgi praegust lugu",
|
||||
"followCurrentSong": "Jälgi praegust laulu",
|
||||
"displayType": "Kuvamisviis",
|
||||
"gap": "$t(common.gap)",
|
||||
"itemGap": "Elementide vahe (px)",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"delete": "刪除",
|
||||
"descending": "降冪",
|
||||
"description": "描述",
|
||||
"forceRestartRequired": "重新啟動應用程式以使更改生效…關閉通知後即可重啟",
|
||||
"forceRestartRequired": "重啟以套用變更… 關閉通知後即可重啟",
|
||||
"menu": "選單",
|
||||
"action_other": "操作",
|
||||
"add": "新增",
|
||||
@@ -31,7 +31,7 @@
|
||||
"forward": "前進",
|
||||
"gap": "空隙",
|
||||
"home": "首頁",
|
||||
"increase": "增高",
|
||||
"increase": "提升",
|
||||
"left": "左",
|
||||
"limit": "限制",
|
||||
"manage": "管理",
|
||||
@@ -40,14 +40,14 @@
|
||||
"owner": "所有者",
|
||||
"path": "路徑",
|
||||
"playerMustBePaused": "播放器必須先暫停",
|
||||
"previousSong": "上一首$t(entity.track, {\"count\": 1})",
|
||||
"previousSong": "上一首 $t(entity.track, {\"count\": 1})",
|
||||
"quit": "退出",
|
||||
"random": "隨機",
|
||||
"rating": "評分",
|
||||
"refresh": "重新整理",
|
||||
"reset": "重置",
|
||||
"resetToDefault": "恢復為預設值",
|
||||
"restartRequired": "需要重新啟動應用程式",
|
||||
"resetToDefault": "重置為預設",
|
||||
"restartRequired": "需要重新啟動",
|
||||
"right": "右",
|
||||
"save": "儲存",
|
||||
"saveAndReplace": "儲存並取代",
|
||||
@@ -55,7 +55,7 @@
|
||||
"search": "搜尋",
|
||||
"sortOrder": "順序",
|
||||
"title": "標題",
|
||||
"trackNumber": "音軌編號",
|
||||
"trackNumber": "曲目",
|
||||
"unknown": "未知",
|
||||
"size": "大小",
|
||||
"version": "版本",
|
||||
@@ -72,7 +72,7 @@
|
||||
"name": "名稱",
|
||||
"no": "否",
|
||||
"none": "無",
|
||||
"noResultsFromQuery": "未查詢到匹配結果",
|
||||
"noResultsFromQuery": "查詢回傳了無結果",
|
||||
"note": "注釋",
|
||||
"additionalParticipants": "額外參與者",
|
||||
"newVersion": "新版本 ({{version}}) 已被安裝",
|
||||
@@ -105,8 +105,8 @@
|
||||
"clean": "清除",
|
||||
"explicitStatus": "露骨狀態",
|
||||
"explicit": "露骨",
|
||||
"gridRows": "網格行",
|
||||
"noFilters": "未設定任何過濾器",
|
||||
"gridRows": "網格列",
|
||||
"noFilters": "未配置篩選器",
|
||||
"countSelected": "{{count}} 個已選取",
|
||||
"retry": "重試",
|
||||
"example": "範例",
|
||||
@@ -116,45 +116,45 @@
|
||||
"itemsMore": "{{count}} 更多",
|
||||
"filter_single": "單選",
|
||||
"filter_multiple": "複選",
|
||||
"newVersionAvailable": "有新的版本可供使用",
|
||||
"newVersionAvailable": "有新版本可用",
|
||||
"numberOfResults": "{{numberOfResults}} 項結果",
|
||||
"grouping": "分組",
|
||||
"back": "返回",
|
||||
"openFolder": "開啟資料夾"
|
||||
},
|
||||
"error": {
|
||||
"endpointNotImplementedError": "{{serverType}} 尚未實現端點 {{endpoint}}",
|
||||
"apiRouteError": "請求失敗:無法路由",
|
||||
"audioDeviceFetchError": "無法取得音訊設備",
|
||||
"endpointNotImplementedError": "{{serverType}} 尚未實作端點 {{endpoint}}",
|
||||
"apiRouteError": "無法路由請求",
|
||||
"audioDeviceFetchError": "嘗試取得音訊裝置時發生了錯誤",
|
||||
"authenticationFailed": "驗證失敗",
|
||||
"credentialsRequired": "需要憑證",
|
||||
"genericError": "發生了錯誤",
|
||||
"invalidServer": "無效的伺服器",
|
||||
"localFontAccessDenied": "無法取得本地字型",
|
||||
"localFontAccessDenied": "存取本地字型被拒絕",
|
||||
"loginRateError": "登入請求嘗試次數過多,請稍後再試",
|
||||
"remoteDisableError": "$t(common.disable)遠端伺服器時出現錯誤",
|
||||
"remoteEnableError": "$t(common.enable)遠端伺服器時出現錯誤",
|
||||
"remotePortError": "設定遠端伺服器連接埠時發生錯誤",
|
||||
"remotePortWarning": "重啟伺服器使新連接埠生效",
|
||||
"remoteDisableError": "嘗試 $t(common.disable) 遠端伺服器時發生了錯誤",
|
||||
"remoteEnableError": "嘗試 $t(common.enable) 遠端伺服器時發生了錯誤",
|
||||
"remotePortError": "嘗試設定遠端伺服器連接埠時發生了錯誤",
|
||||
"remotePortWarning": "重啟伺服器以套用新連接埠",
|
||||
"serverRequired": "需要伺服器",
|
||||
"sessionExpiredError": "工作階段已過期",
|
||||
"systemFontError": "嘗試取得系統字型時出現錯誤",
|
||||
"sessionExpiredError": "您的工作階段已過期",
|
||||
"systemFontError": "嘗試取得系統字型時發生了錯誤",
|
||||
"serverNotSelectedError": "未選擇伺服器",
|
||||
"mpvRequired": "需要 MPV",
|
||||
"playbackError": "無法播放媒體",
|
||||
"badAlbum": "您看到此頁面是因為這首歌不是專輯的一部分。如果您的音樂資料夾頂層有一首歌,則很可能會看到此問題。 Jellyfin 僅將資料夾中的曲目分組",
|
||||
"playbackError": "嘗試播放媒體時發生了錯誤",
|
||||
"badAlbum": "您看到此頁面是因為這首歌不是專輯的一部分。如果您的音樂資料夾頂層有一首歌,則很可能會看到此問題。 Jellyfin 僅會將資料夾中的曲目分組",
|
||||
"badValue": "無效選項「{{value}}」。該值不再存在",
|
||||
"networkError": "發生網路錯誤",
|
||||
"notificationDenied": "通知權限被拒絕。此設定無效",
|
||||
"networkError": "發生了網路錯誤",
|
||||
"notificationDenied": "通知權限被拒絕。此設定無影響",
|
||||
"openError": "無法開啟檔案",
|
||||
"multipleServerSaveQueueError": "播放佇列中包含不是來自目前伺服器的歌曲,此操作不受支援",
|
||||
"multipleServerSaveQueueError": "播放佇列中包含了並非來自當前伺服器的歌曲。此操作不受支援",
|
||||
"saveQueueFailed": "儲存播放佇列失敗",
|
||||
"settingsSyncError": "偵測到渲染器與主程式之間的設定不一致,請重新啟動應用程式以套用變更",
|
||||
"noNetwork": "伺服器無法連線",
|
||||
"noNetworkDescription": "無法連接到此伺服器",
|
||||
"settingsSyncError": "偵測到渲染器與主程式之間的設定不一致。請重新啟動應用程式以套用變更",
|
||||
"noNetwork": "伺服器不可用",
|
||||
"noNetworkDescription": "無法連線至此伺服器",
|
||||
"invalidJson": "無效的 JSON",
|
||||
"serverLockSingleServer": "當伺服器鎖定時只允許一個伺服器",
|
||||
"playbackPausedDueToError": "發生錯誤,已停止播放"
|
||||
"playbackPausedDueToError": "播放因錯誤而暫停"
|
||||
},
|
||||
"page": {
|
||||
"contextMenu": {
|
||||
@@ -269,7 +269,7 @@
|
||||
"transcoding": "轉碼",
|
||||
"discord": "Discord",
|
||||
"queryBuilder": "查詢建構器",
|
||||
"playerFilters": "播放過濾器",
|
||||
"playerFilters": "播放篩選器",
|
||||
"logger": "日誌記錄器",
|
||||
"lyricsDisplay": "歌詞顯示"
|
||||
},
|
||||
@@ -713,7 +713,7 @@
|
||||
"followCurrentSong_description": "自動將播放佇列捲動至當前播放的歌曲",
|
||||
"followCurrentSong": "跟隨當前歌曲",
|
||||
"playerbarSlider_description": "不建議在速度緩慢或計費的網路下使用波形",
|
||||
"playerFilters": "從佇列中過濾歌曲",
|
||||
"playerFilters": "從佇列中篩選歌曲",
|
||||
"playerFilters_description": "根據以下條件,排除要新增至佇列中的歌曲",
|
||||
"autoDJ": "Auto DJ",
|
||||
"autoDJ_itemCount": "項目數量",
|
||||
@@ -764,7 +764,7 @@
|
||||
"sidebarPlaylistSorting_description": "允許在側邊欄中使用拖放手動對播放清單進行排序,而不是預設的伺服器排序",
|
||||
"sidebarPlaylistListFilterRegex_description": "在側邊欄中隱藏與此正規表達式匹配的播放清單",
|
||||
"sidebarPlaylistListFilterRegex_placeholder": "範例: ^daily mix.*",
|
||||
"sidebarPlaylistListFilterRegex": "播放清單過濾器正規表達式",
|
||||
"sidebarPlaylistListFilterRegex": "播放清單篩選器正規表達式",
|
||||
"blurExplicitImages": "模糊露骨圖片",
|
||||
"blurExplicitImages_description": "標記為露骨的專輯和歌曲封面將被模糊",
|
||||
"releaseChannel_optionAlpha": "Alpha (每日建構版)",
|
||||
@@ -888,7 +888,7 @@
|
||||
"size": "$t(common.size)",
|
||||
"title": "$t(common.title)",
|
||||
"titleCombined": "$t(common.title)(合併)",
|
||||
"trackNumber": "曲目編號",
|
||||
"trackNumber": "曲目",
|
||||
"year": "$t(common.year)",
|
||||
"rating": "$t(common.rating)",
|
||||
"codec": "$t(common.codec)",
|
||||
@@ -931,7 +931,7 @@
|
||||
"bpm": "BPM",
|
||||
"songCount": "曲目",
|
||||
"title": "標題",
|
||||
"trackNumber": "曲目編號",
|
||||
"trackNumber": "曲目",
|
||||
"size": "大小",
|
||||
"codec": "編解碼器",
|
||||
"owner": "擁有者",
|
||||
@@ -998,19 +998,19 @@
|
||||
"genreWithCount_other": "{{count}} 種曲風",
|
||||
"playlist_other": "播放清單",
|
||||
"playlistWithCount_other": "{{count}} 個播放清單",
|
||||
"smartPlaylist": "智慧$t(entity.playlist, {\"count\": 1})",
|
||||
"smartPlaylist": "智慧 $t(entity.playlist, {\"count\": 1})",
|
||||
"track_other": "曲目",
|
||||
"trackWithCount_other": "{{count}} 首曲目",
|
||||
"trackWithCount_other": "{{count}} 個曲目",
|
||||
"albumWithCount_other": "{{count}} 張專輯",
|
||||
"play_other": "{{count}}次播放",
|
||||
"play_other": "{{count}} 次播放",
|
||||
"song_other": "歌曲",
|
||||
"radioStation_other": "電台",
|
||||
"radioStationWithCount_other": "{{count}} 個電台"
|
||||
},
|
||||
"filter": {
|
||||
"albumCount": "$t(entity.album, {\"count\": 2})數",
|
||||
"albumCount": "$t(entity.album, {\"count\": 2}) 數",
|
||||
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"biography": "個人簡介",
|
||||
"biography": "簡介",
|
||||
"bitrate": "位元率",
|
||||
"bpm": "BPM",
|
||||
"channels": "$t(common.channel, {\"count\": 2})",
|
||||
@@ -1023,14 +1023,14 @@
|
||||
"id": "ID",
|
||||
"fromYear": "從年份",
|
||||
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"isCompilation": "為合輯",
|
||||
"isFavorited": "已收藏",
|
||||
"isPublic": "已公開",
|
||||
"isRated": "已評分",
|
||||
"isCompilation": "是否為合輯",
|
||||
"isFavorited": "是否為收藏",
|
||||
"isPublic": "是否為公開",
|
||||
"isRated": "是否已評分",
|
||||
"name": "名稱",
|
||||
"note": "注釋",
|
||||
"isRecentlyPlayed": "最近播放過",
|
||||
"lastPlayed": "上次播放過",
|
||||
"isRecentlyPlayed": "是否最近播放過",
|
||||
"lastPlayed": "上次播放",
|
||||
"mostPlayed": "播放最多",
|
||||
"owner": "$t(common.owner)",
|
||||
"path": "路徑",
|
||||
@@ -1048,7 +1048,7 @@
|
||||
"releaseYear": "發行年份",
|
||||
"search": "搜尋",
|
||||
"title": "標題",
|
||||
"toYear": "從年份",
|
||||
"toYear": "至年份",
|
||||
"trackNumber": "曲目",
|
||||
"explicitStatus": "$t(common.explicitStatus)",
|
||||
"sortName": "排序名稱",
|
||||
@@ -1102,7 +1102,7 @@
|
||||
"title": "查詢編輯器",
|
||||
"addRuleGroup": "新增規則群組",
|
||||
"removeRuleGroup": "移除規則群組",
|
||||
"resetToDefault": "恢復為預設值",
|
||||
"resetToDefault": "重置為預設",
|
||||
"clearFilters": "清除篩選"
|
||||
},
|
||||
"updateServer": {
|
||||
@@ -1143,8 +1143,8 @@
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"input_limit": "多少曲目?",
|
||||
"input_minYear": "起始年份",
|
||||
"input_maxYear": "結束年份",
|
||||
"input_played": "播放過濾器",
|
||||
"input_maxYear": "至年份",
|
||||
"input_played": "播放篩選器",
|
||||
"input_played_optionAll": "所有曲目",
|
||||
"input_played_optionUnplayed": "僅未播放的曲目",
|
||||
"input_played_optionPlayed": "僅播放過的曲目",
|
||||
@@ -1381,7 +1381,7 @@
|
||||
}
|
||||
},
|
||||
"systemAudioCaptureFailed": "無法開始擷取:{{message}}",
|
||||
"systemAudioNoAudioTrack": "沒有回傳任何音軌。確保在提示時啟用音訊擷取。",
|
||||
"systemAudioNoAudioTrack": "沒有回傳任何曲目。確保在提示時啟用音訊擷取。",
|
||||
"systemAudioConsentAllow": "允許",
|
||||
"systemAudioConsentBody": "此視覺化器需要存取系統音訊才能運作",
|
||||
"systemAudioConsentDecline": "拒絕",
|
||||
|
||||
@@ -72,7 +72,7 @@ export const orderSearchResults = (args: {
|
||||
|
||||
searchResults = Array.from(combinedResults.values());
|
||||
} else {
|
||||
searchResults = fuse.search<InternetProviderLyricSearchResponse>({
|
||||
searchResults = fuse.search({
|
||||
...(params.artist && { artist: params.artist }),
|
||||
...(params.name && { name: params.name }),
|
||||
});
|
||||
|
||||
@@ -224,25 +224,26 @@ export const PlaylistQueryEditor = ({
|
||||
return detailQuery?.data?.rules?.order || 'asc';
|
||||
}, [detailQuery?.data?.rules?.order, detailQuery?.data?.rules?.sort]);
|
||||
|
||||
const appliedQuery = appliedJsonState?.query;
|
||||
const detailQueryRules = detailQuery?.data?.rules;
|
||||
const effectiveQuery = useMemo(
|
||||
() =>
|
||||
appliedJsonState?.query ??
|
||||
(detailQuery?.data?.rules?.all
|
||||
? { all: detailQuery.data.rules.all }
|
||||
: detailQuery?.data?.rules?.any
|
||||
? { any: detailQuery.data.rules.any }
|
||||
: detailQuery?.data?.rules),
|
||||
[appliedJsonState?.query, detailQuery?.data?.rules],
|
||||
appliedQuery ??
|
||||
(detailQueryRules?.all
|
||||
? { all: detailQueryRules.all }
|
||||
: detailQueryRules?.any
|
||||
? { any: detailQueryRules.any }
|
||||
: detailQueryRules),
|
||||
[appliedQuery, detailQueryRules],
|
||||
);
|
||||
const effectiveLimit = appliedJsonState?.limit ?? detailQuery?.data?.rules?.limit;
|
||||
const effectiveLimitPercent =
|
||||
appliedJsonState?.limitPercent ?? detailQuery?.data?.rules?.limitPercent;
|
||||
|
||||
const appliedSort = appliedJsonState?.sort;
|
||||
const effectiveSortBy = useMemo(
|
||||
() =>
|
||||
(appliedJsonState?.sort ? [appliedJsonState.sort] : parseSortBy()) as
|
||||
| SongListSort
|
||||
| SongListSort[],
|
||||
[appliedJsonState?.sort, parseSortBy],
|
||||
() => (appliedSort ? [appliedSort] : parseSortBy()) as SongListSort | SongListSort[],
|
||||
[appliedSort, parseSortBy],
|
||||
);
|
||||
const effectiveSortOrder = appliedJsonState?.sort
|
||||
? appliedJsonState.sort.startsWith('-')
|
||||
|
||||
@@ -298,6 +298,7 @@ export const useServerAuthenticated = () => {
|
||||
await new Promise((resolve) => setTimeout(resolve, NETWORK_RETRY_DELAY_MS));
|
||||
|
||||
// Retry authentication
|
||||
// eslint-disable-next-line react-hooks/immutability
|
||||
return authenticateServer(serverWithAuth, nextRetry);
|
||||
}
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ const appRouterModals = {
|
||||
|
||||
export const AppRouter = () => {
|
||||
const router = (
|
||||
<HashRouter unstable_useTransitions={false}>
|
||||
<HashRouter>
|
||||
<ModalsProvider modals={appRouterModals}>
|
||||
<RouterErrorBoundary>
|
||||
<Routes>
|
||||
|
||||
Reference in New Issue
Block a user