Compare commits

..

1456 Commits

Author SHA1 Message Date
jeffvli ecda918b46 update to v1.8.0 2026-03-09 21:53:26 -07:00
Tarulia 93834788b5 use electron-builder's static AppImage runtime (#1816)
electron-builder added compatibility with the AppImage Type2 runtime
(i.e. FUSE-less runtime). However, this is - for now anyway - an opt-in
feature, which this commit enables.
2026-03-09 21:52:48 -07:00
jeffvli 66e7b44d75 add client-side sort to artist favorite songs (#1691) 2026-03-09 20:58:02 -07:00
jeffvli 8825fc1e84 unhide image on error on libraryheader 2026-03-09 20:49:02 -07:00
jeffvli ac0cc19c04 prefer artistInfo artist image 2026-03-09 20:49:02 -07:00
jeffvli de29465b1f enable skeleton animations by default 2026-03-09 20:49:02 -07:00
jeffvli 31a201ca32 rewrite Image component
- remove react-image dependency
- use manual blob load
- abort load when exiting viewport
2026-03-09 20:49:02 -07:00
Hosted Weblate 3644ea2969 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (Czech)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (Spanish)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 98.2% (1155 of 1175 strings) (French)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2026-03-10 03:08:35 +01:00
ashe e46c61e026 Remote URL hardcoding compatibility (#1810)
* Remote URL compatibility
---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-03-09 19:08:28 -07:00
Oliver Tzeng 3873218e94 fix translated zh-Hant and zh-Hans (#1807) 2026-03-09 17:08:07 -07:00
Jeff b4a61cbd6e use ad-hoc code signing for macOS build, disable hardenedRuntime (#1815) 2026-03-09 17:05:12 -07:00
jeffvli accc6e53f0 bump electron-builder for pnpm v10.3 ( #1796) 2026-03-09 12:54:32 -07:00
jeffvli adf48decc4 run PR publish on electron-builder config changes 2026-03-09 09:52:42 -07:00
jeffvli 49ff928414 refactor artist header to better handle artist image from info endpoint 2026-03-09 01:54:04 -07:00
Hosted Weblate 71efd4a6d7 Translated using Weblate
Currently translated at 97.8% (1149 of 1174 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-03-09 09:38:55 +01:00
jeffvli 01e4907295 update to v1.7.0 2026-03-09 01:36:19 -07:00
jeffvli 6a47e99680 add manual update notice for macOS, disable autoinstall (#1725) 2026-03-09 01:31:33 -07:00
jeffvli 078d8068e0 fix file path replacement to handle both add/replace (#1749) 2026-03-09 00:55:13 -07:00
jeffvli 58ae76ce2a use album order on artist page for queue add (#1754) 2026-03-09 00:47:55 -07:00
jeffvli bc6cd5b014 refactor grid columns internally into album artist sections to handle null cases 2026-03-08 22:15:54 -07:00
jeffvli 17deac8d65 decouple AlbumArtistInfo from AlbumArtistDetail (#1809) 2026-03-08 22:06:18 -07:00
jeffvli 7dbf8dd9fe add conditional render to queue/lyric state on mobile player (#1797) 2026-03-08 21:06:22 -07:00
Hosted Weblate 27ab9f89c9 Translated using Weblate
Currently translated at 100.0% (1174 of 1174 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1174 of 1174 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
2026-03-08 13:09:50 +00:00
jeffvli 602808c742 directly replace playlist rules on save and replace 2026-03-07 21:18:55 -08:00
jeffvli c1051956ad add size to album detail header 2026-03-07 20:25:04 -08:00
York 6d2c084355 fix: sleep timer end-of-song mode (#1706) 2026-03-07 20:23:19 -08:00
Hosted Weblate 6e3f0f2253 Translated using Weblate
Currently translated at 100.0% (1174 of 1174 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-03-07 10:09:54 +01:00
jeffvli d3d3688d60 add Symbola font for explicit status indicator 2026-03-07 00:50:00 -08:00
Kendall Garner 49c28299af remove package.lock, make lint happy 2026-03-06 21:04:51 -08:00
Kendall Garner 0bb6fea3db don't assume server exists in enable either 2026-03-06 20:59:13 -08:00
Kendall Garner 7027084394 fix(autosave): server isn't guaranteed to exist 2026-03-06 20:52:41 -08:00
Kendall Garner 7c4cbaad9a feat(player): add server-side autosave capability 2026-03-06 20:01:35 -08:00
jeffvli e603048a80 add settings override with env variables 2026-03-06 19:32:38 -08:00
jeffvli 9e08157517 add has_rating filter for Navidrome song list 2026-03-06 18:03:14 -08:00
Hosted Weblate d4c2b1e914 Translated using Weblate
Currently translated at 84.1% (985 of 1170 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: UnknownExplorer13 <kyedylanfenton@gmail.com>
2026-03-06 19:09:49 +00:00
Hosted Weblate 65dd67ec96 Translated using Weblate
Currently translated at 100.0% (1170 of 1170 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-03-06 12:09:50 +00:00
Hosted Weblate 76259309af Translated using Weblate
Currently translated at 74.7% (875 of 1170 strings) (Finnish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/

Co-authored-by: jonoafi <joona@jonottaa.com>
2026-03-06 00:09:53 +01:00
Hosted Weblate 3e5a9db279 Translated using Weblate
Currently translated at 100.0% (1170 of 1170 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1170 of 1170 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1170 of 1170 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-03-05 15:09:54 +00:00
Hosted Weblate c155bbdb37 Translated using Weblate
Currently translated at 100.0% (1169 of 1169 strings) (Indonesian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/id/

Co-authored-by: Arif Budiman <arifpedia@gmail.com>
2026-03-05 07:39:54 +01:00
jeffvli ecbc03f052 add dummy onErrorPause handler for radio player 2026-03-04 22:39:46 -08:00
jeffvli 6ef9efc8bf add 10s retry for playback on network err (#1779) 2026-03-04 22:32:33 -08:00
jeffvli 513e9e822d attempt to fix viewport size for mobile browsers (#1787) 2026-03-04 21:51:04 -08:00
jeffvli dbc215c44f add toggle visibility behavior to tray icon (#1793) 2026-03-04 21:38:11 -08:00
jeffvli 43c5cf4275 fix primary color css variable to use new shade value 2026-03-04 21:26:47 -08:00
Benjamin 41f1f376bc feat: customizable item layout on fullscreen player (#1769)
* change container display to release type, readd badge styling to improve contrast

* make everything customizable
2026-03-04 21:23:14 -08:00
jeffvli cad7fef454 add type assertion for primaryShade 2026-03-04 21:01:56 -08:00
jeffvli 93791aea15 add setting to override theme primary shade (#1791) 2026-03-04 20:58:30 -08:00
Hosted Weblate 884dcde289 Translated using Weblate
Currently translated at 67.2% (782 of 1163 strings) (Finnish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/

Co-authored-by: Lauri Koo <late91@gmail.com>
2026-03-05 05:09:50 +01:00
Hosted Weblate 21f993a951 Translated using Weblate
Currently translated at 100.0% (1163 of 1163 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-03-04 05:09:49 +00:00
Hosted Weblate 4784228831 Translated using Weblate
Currently translated at 100.0% (1163 of 1163 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: skajmer <skajmer@protonmail.com>
2026-03-03 21:09:48 +00:00
Hosted Weblate c6e3e0c07e Translated using Weblate
Currently translated at 100.0% (1163 of 1163 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1163 of 1163 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
2026-03-03 15:09:50 +00:00
Kendall Garner 30685e7252 fix(subsonic): do favorite filter processing on artist favorite 2026-03-03 06:54:59 -08:00
Kendall Garner 12a398a65c fix(server selector): better handling for large server/folder list 2026-03-02 22:30:14 -08:00
Kendall Garner 71360e37de fix(favorites): filter favorite artists on favorite page for Jellyfin 2026-03-02 21:02:24 -08:00
Kendall Garner f99b8ea9ee feat(queue): add go to current button 2026-03-02 20:30:35 -08:00
Kendall Garner 2854b928f6 fix(player): handle items in the queue moved to next before current index 2026-03-02 20:05:01 -08:00
Hosted Weblate 14e1f1d003 Translated using Weblate
Currently translated at 73.7% (857 of 1162 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 100.0% (1162 of 1162 strings) (Tamil)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ta/

Co-authored-by: Платон Петров <pplaton6@gmail.com>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
2026-03-01 23:10:04 +01:00
Hosted Weblate 85c490bd06 Translated using Weblate
Currently translated at 100.0% (1162 of 1162 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-03-01 08:09:52 +01:00
Hosted Weblate 96d78f8bda Translated using Weblate
Currently translated at 44.6% (519 of 1162 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-28 14:09:50 +00:00
jeffvli 5f65aebe63 convert nd album rating filter to yes/no (#1775) 2026-02-27 19:30:33 -08:00
Hosted Weblate cd96da9cd5 Translated using Weblate
Currently translated at 100.0% (1162 of 1162 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1162 of 1162 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1162 of 1162 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-02-27 23:09:53 +00:00
Hosted Weblate 674b66b682 Translated using Weblate
Currently translated at 84.6% (984 of 1162 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-02-27 15:09:56 +01:00
jeffvli 934851456b prevent click propagation on detached queue button (#1762) 2026-02-27 00:53:09 -08:00
jeffvli afca396654 attempt to fix mpv autoNext behavior (#1768) 2026-02-27 00:39:27 -08:00
jeffvli b62f62671d fix table config drag and drop interaction on bottom edge 2026-02-26 20:59:28 -08:00
Norman eb8913479b Add album grouping column (#1722)
* Add album grouping column

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-26 20:34:55 -08:00
Alexander Welsing 4918b412b2 Album radio (#1759)
* added album radio feature

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-26 20:33:00 -08:00
jeffvli a78f5803a5 fix mediasession play hotkey on after pause on web (#1758)
- chrome (and other browsers) determine that the audio element is inactive if the volume is set to 0 when paused, leading to the resume (play) mediasession event to no longer be available
2026-02-26 01:11:24 -08:00
dependabot[bot] 0d1799cbf7 Bump the npm_and_yarn group across 1 directory with 6 updates (#1763)
Bumps the npm_and_yarn group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [axios](https://github.com/axios/axios) | `1.13.2` | `1.13.5` |
| [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) | `5.3.3` | `5.3.6` |
| [lodash](https://github.com/lodash/lodash) | `4.17.21` | `4.17.23` |
| [qs](https://github.com/ljharb/qs) | `6.14.1` | `6.14.2` |
| [minimatch](https://github.com/isaacs/minimatch) | `3.1.2` | `3.1.5` |
| [tar](https://github.com/isaacs/node-tar) | `6.2.1` | `7.5.9` |



Updates `axios` from 1.13.2 to 1.13.5
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.2...v1.13.5)

Updates `fast-xml-parser` from 5.3.3 to 5.3.6
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.3...v5.3.6)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `qs` from 6.14.1 to 6.14.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2)

Updates `minimatch` from 3.1.2 to 3.1.5
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)

Updates `tar` from 6.2.1 to 7.5.9
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.2.1...v7.5.9)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.5
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: fast-xml-parser
  dependency-version: 5.3.6
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: qs
  dependency-version: 6.14.2
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: minimatch
  dependency-version: 3.1.5
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: tar
  dependency-version: 7.5.9
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 22:22:53 -08:00
jeffvli 438db40d0e remove audio prefix from subsonic contentType property 2026-02-25 22:22:13 -08:00
dependabot[bot] aca5e1fe87 Bump react-router in the npm_and_yarn group across 1 directory (#1534)
Bumps the npm_and_yarn group with 1 update in the / directory: [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router).


Updates `react-router` from 7.11.0 to 7.12.0
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.12.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.12.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 22:06:26 -08:00
Tarulia 8aaf24ff87 Redo Icons in SVG (#1731)
Also includes exports from SVG for all relevant files:
- `assets/icons/` in 16-1024px size PNGs
- `assets/icons/icon.ico` using same sizes as the old one
- `assets/icons/` IconTemplate
- `media/` black and white logo-only variants
- `resource/icon.png`
2026-02-25 21:35:13 -08:00
Hosted Weblate 75dbea1ab7 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Co-authored-by: HUMET <ressaguer@proton.me>
2026-02-25 16:09:51 +00:00
jeffvli 61616dd2b9 move remote hook to global scope (#1752) 2026-02-24 00:45:43 -08:00
jeffvli ceef7964af add originalyear to smart playlist filters (#1746) 2026-02-24 00:34:07 -08:00
jeffvli ec12e89653 fix missing blur config from expanded album image 2026-02-23 23:48:56 -08:00
Hosted Weblate 386ca41a5d Translated using Weblate
Currently translated at 99.3% (1152 of 1160 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
2026-02-24 01:09:49 +00:00
Hosted Weblate a8fd5a4f46 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Dutch)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/

Co-authored-by: bokse <weblate@bokse.nl>
2026-02-23 16:09:54 +01:00
Hosted Weblate 4590383a97 Translated using Weblate
Currently translated at 83.1% (964 of 1160 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 100.0% (1160 of 1160 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-02-22 14:09:50 +01:00
Hosted Weblate 405208cf92 Translated using Weblate
Currently translated at 97.8% (1135 of 1160 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-02-22 00:09:48 +01:00
Hosted Weblate f19c37276a Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: skajmer <skajmer@protonmail.com>
2026-02-21 15:09:49 +01:00
Hosted Weblate 3269034bfb Translated using Weblate
Currently translated at 88.9% (1032 of 1160 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Translated using Weblate

Currently translated at 99.1% (1150 of 1160 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 42.4% (492 of 1160 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: PhillyMay <mein.alias@outlook.com>
Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-20 22:09:52 +00:00
Lyosha e5f99af43b Fix image resolution setting value checking (#1741) 2026-02-20 13:10:26 -08:00
Hosted Weblate 2866ca9537 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 40.6% (471 of 1160 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Translated using Weblate

Currently translated at 99.1% (1150 of 1160 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-20 17:09:51 +00:00
Kendall Garner a377eae2f4 fix(build): do not add hash to favicon and assets 2026-02-20 08:48:36 -08:00
Hosted Weblate dbd8ce2380 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-02-20 12:09:53 +01:00
Kendall Garner 0741351318 fix(share): only copy to clipboard if available and secure 2026-02-19 19:55:10 -08:00
Hosted Weblate ab9e02adfc Translated using Weblate
Currently translated at 39.6% (459 of 1158 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-19 19:09:47 +01:00
Kendall Garner 12ff690619 fix(window): recreate window on macos when closed but not quit 2026-02-18 21:50:44 -08:00
jeffvli 5039012fcb catch errors on desktop scrobble notification failure (#1723) 2026-02-18 20:54:31 -08:00
jeffvli 75af57a7b3 use correct player seek event for mpris updater (#1740) 2026-02-18 20:37:18 -08:00
jeffvli 9027eee99f fix lyrics type in player sidebar 2026-02-18 20:28:14 -08:00
jeffvli 50fe373f1e simplify lyrics implementation
- removes complex lyrics fetch and override logic, and instead uses a single query as a source of truth for the lyrics
- properly handles loading state, invalidation, and refetch
2026-02-18 20:25:52 -08:00
Alexander Welsing 2c546867a8 change "Fields" query parameter to array (#1733)
* change "Fields" query parameter to array

* platformToTarget.key() -> to array
2026-02-17 18:45:31 -08:00
Kendall Garner 9dad934a40 transcode player bar waveform 2026-02-17 14:30:26 -08:00
Hosted Weblate 34dbb4c794 Translated using Weblate
Currently translated at 77.2% (894 of 1158 strings) (Italian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/

Co-authored-by: Giuseppe Filomeno <giusefilo@gmail.com>
2026-02-17 19:10:04 +00:00
Hosted Weblate 7472af66ef Translated using Weblate
Currently translated at 99.3% (1150 of 1158 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
2026-02-17 00:09:52 +01:00
Adam f293fb287d Add hook script to update and publish appstream metainfo on electron build (#1719) 2026-02-16 12:54:11 -08:00
libussa 7656e84c20 fix stale SERVER_URL when changing env var in Docker (#1714)
settings.js (which injects SERVER_URL into the browser) was served
without Cache-Control headers, causing Cloudflare and other reverse
proxies to cache the old value indefinitely. Additionally, when
SERVER_LOCK is enabled, the persisted server URL in localStorage was
never compared against the current window.SERVER_URL, so same-browser
sessions kept using the old server even after settings.js was updated.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:44:29 -08:00
Kendall Garner c524e8d3b7 fix(left-controls): use joined artsts instead of array by artist id 2026-02-16 07:52:36 -08:00
Hosted Weblate 7f13ce491b Translated using Weblate
Currently translated at 92.0% (1066 of 1158 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: Nicolas DERIVE <kalon33@ubuntu.com>
2026-02-16 15:09:54 +00:00
Hosted Weblate 6c16aabce0 Translated using Weblate
Currently translated at 88.3% (1023 of 1158 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Co-authored-by: PhillyMay <mein.alias@outlook.com>
2026-02-15 13:10:11 +01:00
Hosted Weblate f5240b1766 Translated using Weblate
Currently translated at 78.7% (912 of 1158 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Co-authored-by: PhillyMay <mein.alias@outlook.com>
2026-02-15 04:09:48 +01:00
Hosted Weblate cc5a95d725 Translated using Weblate
Currently translated at 100.0% (1158 of 1158 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1158 of 1158 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
2026-02-14 20:09:53 +01:00
Hosted Weblate 8ba63988d8 Translated using Weblate
Currently translated at 97.8% (1133 of 1158 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Translated using Weblate

Currently translated at 100.0% (1158 of 1158 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1158 of 1158 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-02-14 15:09:49 +01:00
jeffvli 289f307a52 update to v1.6.0 2026-02-13 23:08:33 -08:00
jeffvli 91ac36c835 fix Subsonic root folder condition (#1686)
- some older subsonic servers used numeric ids which causes the rootFolderId regex to fail which resulted in the getFolder endpoint to always attempt to fetch the root
2026-02-13 23:03:24 -08:00
jeffvli 503e4b2bac fix list refresh not working on discography/genre pages 2026-02-13 21:38:12 -08:00
jeffvli c39ddc3b45 refactor PlaylistQueryEditor to new file 2026-02-13 21:05:37 -08:00
jeffvli 1163c4ad5e add JSON editor for playlist query builder (#1711) 2026-02-13 21:05:34 -08:00
jeffvli e497734c07 allow all rule groups to be empty (#1710) 2026-02-13 20:26:58 -08:00
Kendall Garner 77fef33cbf improve album artist favorite performance and search (#1709)
* improve album artist favorite performance and search

* adjust top songs / favorite songs sections

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-13 20:13:28 -08:00
Hosted Weblate 81189db1e1 Translated using Weblate
Currently translated at 100.0% (1156 of 1156 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Co-authored-by: HUMET <ressaguer@proton.me>
2026-02-14 03:46:02 +00:00
Maevi 054a3d005e Listen on IPv6 by default in docker image (#1707) 2026-02-13 19:45:55 -08:00
jeffvli dfbff64430 fix duplicate server add when SERVER_LOCK is configured (#1623) 2026-02-13 19:42:36 -08:00
jeffvli 2b4046a82e fix double click propagation on the table expand button 2026-02-13 17:49:49 -08:00
jeffvli 9eb879fc37 hide favorite / rating from playlist album view items 2026-02-13 17:39:35 -08:00
jeffvli 9e63ee2735 add loading spinners for some lazy loaded content 2026-02-13 15:04:54 -08:00
jeffvli 9950e51d45 remove lazy loading from context menu initialization 2026-02-13 15:01:18 -08:00
jeffvli 70fdd4bdc3 refactor album expansion to global scope 2026-02-13 14:59:15 -08:00
jeffvli e855f7dd01 remove invalid detail view type for song list config 2026-02-13 12:19:14 -08:00
jeffvli 123842dfda attempt to optimize the tagList query
- this query in some cases can return a very large amount of data, depending on the size of the user's library
- increasing the cacheTime reduces the frequency of fetches while disabling structuralSharing reduces the need for react-query to do a deep equality comparison for the cache
2026-02-13 11:53:42 -08:00
Hosted Weblate 1338513f82 Translated using Weblate
Currently translated at 100.0% (1156 of 1156 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@alius.cz>
2026-02-13 19:09:45 +01:00
Hosted Weblate c9c88dd82d Translated using Weblate
Currently translated at 100.0% (1156 of 1156 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1156 of 1156 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
2026-02-13 14:09:48 +01:00
York 02a5395453 fix: regenerate macOS icon (.icns) to fix glitched small icons (#1705) 2026-02-13 00:15:12 -08:00
jeffvli 7ba2f6b827 fix removed filter functions 2026-02-12 22:04:08 -08:00
jeffvli f1b5dc8ef3 add additional client-side filters to playlist songs 2026-02-12 22:00:07 -08:00
Kendall Garner 78875572e9 add explicit blurring to left expanded image and full screen (#1701)
* add explicit blurring to left expanded image and full screen
2026-02-12 18:49:57 -08:00
jeffvli f487560ec5 fix vite web build again for hashed assets and PWA cache clear 2026-02-12 18:21:27 -08:00
jeffvli f752090c78 Revert "attempt fix for web/docker cache busting on new release"
This reverts commit 91e7c7434c.
2026-02-12 18:17:49 -08:00
jeffvli 96f5b2b82a Revert "fix vite web build to work with subpath"
This reverts commit 1a9f36ce9e.
2026-02-12 18:17:44 -08:00
jeffvli 80292ae579 fix alpha autoupdater logic to use correct config for latest 2026-02-12 18:17:08 -08:00
Hosted Weblate 1d156ac506 Translated using Weblate
Currently translated at 100.0% (1154 of 1154 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@alius.cz>
2026-02-13 00:09:58 +00:00
jeffvli dc5586f859 adjuat audioDevice description to remove web player disclaimer 2026-02-12 11:18:55 -08:00
jeffvli 1a9f36ce9e fix vite web build to work with subpath 2026-02-12 11:18:55 -08:00
York 203c8a6588 fix: restore original macOS squircle icon and regenerate icns properly (#1703) 2026-02-12 10:03:23 -08:00
Hosted Weblate 2e6cf8d869 Translated using Weblate
Currently translated at 100.0% (1154 of 1154 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Fordas <fordas15@gmail.com>
2026-02-12 17:09:48 +00:00
Hosted Weblate b1827dd352 Translated using Weblate
Currently translated at 100.0% (1154 of 1154 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1154 of 1154 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-02-12 11:09:50 +01:00
jeffvli 0d2dddddbc fix invalid comparison on detail rating column hide condition 2026-02-12 01:40:01 -08:00
jeffvli 1d8e1957ba handle image drag from item detail list 2026-02-12 01:37:59 -08:00
jeffvli dc957cb3cc hide detail rating column on zero value 2026-02-12 00:57:24 -08:00
jeffvli c314fa0bf3 properly handle context menu in playlist album view 2026-02-12 00:54:45 -08:00
jeffvli c5ebfac647 fix playlist grid view itemType to PLAYLIST_SONG to support remove from playlist 2026-02-12 00:28:39 -08:00
jeffvli 4adea11a93 support select all hotkey in detail list view 2026-02-12 00:13:32 -08:00
Jeff e6f49b9f1f Add album view for playlists (#1700)
* update client side song ordering to include album order

* add compact styling to LibraryHeader

* move search button to top right of LibraryHeader
2026-02-11 21:48:25 -08:00
York 9cde569c7d Add option to show playing icon in Discord RPC (#1699)
* feat: add option to show playing/paused icon in Discord RPC
2026-02-11 21:14:58 -08:00
jeffvli 91e7c7434c attempt fix for web/docker cache busting on new release
- remove static asset filenames
- add cache clear config to PWA
- move PWA to base dir instead of assets
2026-02-11 20:52:28 -08:00
Yoshua Wakeham ffef5dfdee fix: actually show Jellyfin recently played songs carousel (#1697) 2026-02-11 20:35:23 -08:00
Kendall Garner 409dd69fcb reduce explicit indicator spacing slightly 2026-02-11 19:34:20 -08:00
Hosted Weblate 064cf5103a Translated using Weblate
Currently translated at 100.0% (1152 of 1152 strings)

Co-authored-by: Ondo <SparkyOndo@proton.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translation: feishin/Translation
2026-02-11 23:09:47 +01:00
Hosted Weblate 7e3a613a93 Translated using Weblate
Currently translated at 100.0% (1152 of 1152 strings)

Translated using Weblate

Currently translated at 100.0% (1152 of 1152 strings)

Translated using Weblate

Currently translated at 99.9% (1151 of 1152 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2026-02-11 16:09:52 +01:00
Hosted Weblate e7c49f6d67 Translated using Weblate
Currently translated at 36.6% (422 of 1152 strings)

Translated using Weblate

Currently translated at 33.5% (387 of 1152 strings)

Translated using Weblate

Currently translated at 100.0% (1152 of 1152 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 96.3% (1101 of 1143 strings)

Translated using Weblate (Ukrainian)

Currently translated at 32.1% (368 of 1143 strings)

Translated using Weblate (French)

Currently translated at 91.3% (1044 of 1143 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1143 of 1143 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (1143 of 1143 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Raphael <raphael.margueron@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: Yurii <04_hours.lambing@icloud.com>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2026-02-11 11:02:22 +01:00
jeffvli 022b83ab32 fix playlist add returning zero results on modal menu (#1695) 2026-02-11 00:35:22 -08:00
jeffvli 551d705ee1 adjust fixed-width columns on the Item Detail list and prevent text wrapping 2026-02-10 21:52:22 -08:00
jeffvli 83f73c7fa9 remove unused enableAnimation from ImageContainer 2026-02-10 21:46:54 -08:00
York cc8cb4f4f1 Add sleep timer to player bar (#1671)
* feat: add sleep timer to player bar

- Add sleep timer button in player bar right controls
- Preset options: End of song, 5/10/15/30/45 min, 1 hr, 2 hrs
- Custom timer with HH:MM:SS input fields
- Timer only counts down while music is playing
- Timer pauses playback when it expires
- End-of-song mode pauses at the next track change
- Uses theme-aware styling (--theme-colors-surface)
- Add sleepTimer/sleepTimerOff icons (LuTimer/LuTimerOff)
- Add i18n strings for sleep timer UI

---------

Co-authored-by: York <york@BonecharMac.local>
Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-10 21:19:37 -08:00
York 496eab7d09 fix: regenerate macOS icon (.icns) to fix glitched small icons (#1688)
Co-authored-by: York <york@BonecharMac.local>
2026-02-10 21:11:10 -08:00
York 5197c967c2 fix: use theme mode property for macOS native window theme (#1685)
Co-authored-by: York <york@BonecharMac.local>
2026-02-10 21:09:32 -08:00
jeffvli 74b615dba7 include stable version check on alpha update 2026-02-10 20:20:37 -08:00
jeffvli b67ee797cb move arm64 build configuration to electron-builder config (#1689) 2026-02-10 19:25:26 -08:00
Hosted Weblate 4228084810 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (French)

Currently translated at 90.7% (1034 of 1139 strings)

Translated using Weblate (Ukrainian)

Currently translated at 29.0% (331 of 1139 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (Ukrainian)

Currently translated at 26.5% (302 of 1139 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.0% (251 of 1139 strings)

Translated using Weblate (Danish)

Currently translated at 90.0% (1026 of 1139 strings)

Translated using Weblate (Danish)

Currently translated at 28.1% (321 of 1139 strings)

Translated using Weblate (Ukrainian)

Currently translated at 9.5% (109 of 1139 strings)

Translated using Weblate (Ukrainian)

Currently translated at 5.7% (66 of 1139 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (Czech)

Currently translated at 99.7% (1136 of 1139 strings)

Translated using Weblate (Danish)

Currently translated at 4.8% (55 of 1139 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (Danish)

Currently translated at 0.4% (5 of 1139 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (Polish)

Currently translated at 99.9% (1138 of 1139 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1135 of 1135 strings)

Translated using Weblate (Dutch)

Currently translated at 99.8% (1133 of 1135 strings)

Translated using Weblate (Dutch)

Currently translated at 84.4% (959 of 1135 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1135 of 1135 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1135 of 1135 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (1135 of 1135 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1131 of 1131 strings)

Translated using Weblate (German)

Currently translated at 78.9% (893 of 1131 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (1131 of 1131 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 92.7% (1047 of 1129 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1129 of 1129 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1129 of 1129 strings)

Translated using Weblate (Japanese)

Currently translated at 85.1% (961 of 1129 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (1129 of 1129 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1129 of 1129 strings)

Co-authored-by: Alexander Welsing <kontakt@a-wels.de>
Co-authored-by: Denisa Alicia Rissa <denisarissa@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: Yurii <04_hours.lambing@icloud.com>
Co-authored-by: bokse <weblate@bokse.nl>
Co-authored-by: haha4ni <haha4ni@hotmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/da/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2026-02-10 09:22:15 +01:00
jeffvli b514c7972d update to v1.5.0 2026-02-10 00:22:00 -08:00
jeffvli 83d9042a47 decouple playlist song sort order from search results (#1650) 2026-02-09 22:28:37 -08:00
jeffvli a28c403093 adjust wording and toggles for analytics/updates (#1654) 2026-02-09 22:19:49 -08:00
jeffvli 2927fa5ff7 set default font to Inter
- prefer to use monospace font due to new item detail columns
2026-02-09 22:00:46 -08:00
Jeff f39a7f8d6f Add album detail list view (#1681) 2026-02-09 21:56:08 -08:00
Kai Gritun 397610d8ab fix: remove duplicate CommandPalette in mobile layout (#1669)
The CommandPalette component was being rendered twice when in mobile view:
1. In ResponsiveLayout via LayoutHotkeys (which handles all layouts)
2. In MobileLayout directly

This caused two overlapping command menus to open when pressing Ctrl+K
in mobile view, with keyboard input going to the background menu.

The fix removes the duplicate CommandPalette from MobileLayout since
LayoutHotkeys already provides it for all layouts (both desktop and mobile).

Fixes #1666

Co-authored-by: Kai Gritun <kai@kaigritun.com>
2026-02-07 19:22:46 -08:00
Ahmed ElSayed fb170bb7c4 Add win-arm64 target (#1665) 2026-02-07 15:39:57 -08:00
Mateleo d93f6e8720 feat: enable scrobbling on song repeat and fix package name typo (#1662)
- Add `handleScrobbleFromRepeat` callback to reset scrobble state and send 'start' event when player repeats a song, ensuring accurate scrobbling in repeat mode.
- Fix typo in `web.vite.config.ts` by correcting '@tanstack_react-query-persist-client' to '@tanstack/react-query-persist-client' for proper package reference.
2026-02-07 15:25:29 -08:00
Martín González Gómez 668de93829 Open settings with shortcut (#1655)
* Open settings with shortcut. Also add settings to menubar.
2026-02-07 15:19:05 -08:00
jeffvli 7cecd859ae add mbzReleaseGroupId to Album type 2026-02-06 05:22:56 -08:00
jeffvli fea2966f62 refactor jellyfin field properties and include ProviderIds 2026-02-06 05:17:40 -08:00
jeffvli 6efa308e85 fix release channel input value 2026-02-06 04:13:53 -08:00
Pyx 82b50a60bc Implement Glassy Dark theme (#1388)
* implement theme

* refactor theme stylesheets to load inline to simplify vite bundling

* add missing css module scope name for web build

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-06 02:01:32 -08:00
jeffvli f52c4f7900 fix alpha release notes to compare to development instead of alpha tag 2026-02-06 00:16:11 -08:00
jeffvli 2fb621993d rename electron-builder config to alpha instead of nightly 2026-02-05 23:52:38 -08:00
jeffvli cf663de2fc add handlers and setting for nightly release 2026-02-05 23:45:32 -08:00
jeffvli 65c215fa9c fix R2_ENDPOINT_URL reference 2026-02-05 20:58:15 -08:00
jeffvli 8af972c20b add nightly publish build 2026-02-05 20:48:05 -08:00
jeffvli 027e4046a2 handle radio metadata in discord rpc / fullscreen player (#1649) 2026-02-05 19:14:30 -08:00
jeffvli 4c256348fc add configuration to blur explicit album/song art 2026-02-04 01:20:31 -08:00
jeffvli 6e3275c05c add explicit / clean indicators for album and song titles (#1634) 2026-02-04 00:35:35 -08:00
Jake Klingler 3518a3f3b6 populate bit depth from jellyfin (#1648) 2026-02-04 00:10:28 -08:00
jeffvli 2b6b0cb38b fix artist favorite songs (subsonic) 2026-02-03 23:58:44 -08:00
jeffvli f56a836ffd add personal/community toggle for artist top songs (#1372) 2026-02-03 23:58:44 -08:00
jeffvli 2d963a9d23 use correct filters for album song sort options 2026-02-03 23:58:44 -08:00
rushii 4423b06807 fix(Settings): mpv path selector (#1641)
An unnecessary default value appears to be stringifying a Promise when a separate useEffect hook is supposed to properly load the setting value.
2026-02-03 22:56:09 -08:00
T 1f9223b476 Fix: ratings display on player bar and mobile player (#1646)
* fix(playerbar): use settings to display ratings

* fix(mobile player): use settings to display ratings
2026-02-03 22:50:43 -08:00
Alexander Welsing b4ecf5d257 Update instant mix to use the new items endpoint instead of songs (#1642)
songs/:itemId:/InstantMix -> items/:itemId/InstantMix
2026-02-03 22:34:34 -08:00
jeffvli 0dd13cbab1 add release notes modal to appmenu 2026-02-03 01:06:52 -08:00
jeffvli 48e50430fe add play button group to artist top / favorite song sections 2026-02-02 22:54:10 -08:00
jeffvli ac5611fdca add favorite songs section to artist page (#1604) 2026-02-02 22:23:38 -08:00
jeffvli 50c3dbc0a0 set first item of track radio to the triggering item 2026-02-02 21:18:29 -08:00
jeffvli ddd840d2df fix inconsistent size of musicbrainz icon on album page 2026-02-02 21:14:03 -08:00
jeffvli c0c9878fad add cors / ssl ignore switches to all login components (#1606) 2026-02-02 21:05:01 -08:00
jeffvli c4fc8a8aef fix overlayscrollbars init on loading state 2026-02-02 20:53:11 -08:00
Kendall Garner 0620b096db fix(mpv): only check player time when there is an item in the track (#1639) 2026-02-02 20:49:34 -08:00
Kendall Garner f998491beb fix(playlist): optimistically update rating for playlist song list 2026-02-02 20:48:44 -08:00
Damien Erambert 55a6ea4fca Prevent double fetching when force refreshing paginated views (#1637)
* Prevent double fetching when force refreshing paginated views

* remove await from infinite list loader query invalidation

* add mutation and loading state to list refresh

* add non-suspense query to list genre filters to add loading state

* remove list count data set on random queries

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-02 20:25:19 -08:00
Damien Erambert 72fc5beb98 Use a re-usable Intl.Collator instance for locale compare when possible (#1638)
* Use a re-usable Intl.Collator instance for locale compare
2026-02-02 18:28:01 -08:00
jeffvli a45b607fe7 add Noto Sans Hebrew to default font configuration 2026-02-02 18:14:19 -08:00
jeffvli adfdf04240 update to v1.4.2 2026-02-02 01:45:02 -08:00
jeffvli faa7281993 add datetime to release notes 2026-02-02 01:45:02 -08:00
Hosted Weblate 2d0f4e7881 Translated using Weblate (Polish)
Currently translated at 99.9% (1128 of 1129 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 92.7% (1047 of 1129 strings)

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 97.6% (1102 of 1129 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 95.9% (1083 of 1129 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 90.5% (1022 of 1129 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: haha4ni <haha4ni@hotmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2026-02-02 10:44:51 +01:00
jeffvli ce9183ffd6 revert black background on visualizer container 2026-02-01 22:36:21 -08:00
jeffvli 3a5508653b add missing CrossfadeStyle types 2026-02-01 22:13:59 -08:00
jeffvli 7e4e28037c add typecheck to lint 2026-02-01 22:13:48 -08:00
Kendall Garner d2d8ea8249 misc type fixes, album artist header page favorite/rating work now 2026-02-01 22:04:46 -08:00
jeffvli ba835bec3e update to v1.4.1 2026-02-01 20:38:17 -08:00
jeffvli 9850874dfd support viewing up to 5 previous releases in the release notes modal 2026-02-01 20:37:51 -08:00
jeffvli 51a8285ba2 adjust fullscreen player z-indexes back
- the modal needs to appear above
- instead, move the titlebar controls z-index under the fullscreen players
2026-02-01 20:28:47 -08:00
jeffvli e12150d026 match Save as Collection popover width to its target 2026-02-01 20:26:02 -08:00
jeffvli 54bc241984 add Save as Collection button to the filters modal 2026-02-01 20:25:43 -08:00
jeffvli a698f83c45 fix butterchurn preset display not updating 2026-02-01 20:14:25 -08:00
jeffvli 854e7cc67e update to v1.4.0 2026-02-01 19:11:27 -08:00
Hosted Weblate c3920cbcc0 Translated using Weblate (Indonesian)
Currently translated at 100.0% (1126 of 1126 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1126 of 1126 strings)

Translated using Weblate (Russian)

Currently translated at 73.3% (826 of 1126 strings)

Translated using Weblate (Russian)

Currently translated at 73.3% (826 of 1126 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1126 of 1126 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 92.5% (1042 of 1126 strings)

Translated using Weblate (Japanese)

Currently translated at 85.3% (961 of 1126 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 92.2% (1039 of 1126 strings)

Translated using Weblate (Catalan)

Currently translated at 98.8% (1113 of 1126 strings)

Translated using Weblate (Arabic)

Currently translated at 10.0% (113 of 1126 strings)

Translated using Weblate (Swedish)

Currently translated at 33.6% (379 of 1126 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 91.6% (1032 of 1126 strings)

Translated using Weblate (Tamil)

Currently translated at 58.3% (657 of 1126 strings)

Translated using Weblate (Indonesian)

Currently translated at 56.1% (632 of 1126 strings)

Translated using Weblate (Korean)

Currently translated at 38.0% (428 of 1126 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 61.1% (689 of 1126 strings)

Translated using Weblate (Spanish)

Currently translated at 99.3% (1119 of 1126 strings)

Translated using Weblate (Polish)

Currently translated at 99.3% (1119 of 1126 strings)

Translated using Weblate (Italian)

Currently translated at 60.2% (678 of 1126 strings)

Translated using Weblate (Hungarian)

Currently translated at 81.9% (923 of 1126 strings)

Translated using Weblate (Basque)

Currently translated at 82.9% (934 of 1126 strings)

Translated using Weblate (Japanese)

Currently translated at 84.7% (954 of 1126 strings)

Translated using Weblate (Portuguese)

Currently translated at 36.6% (413 of 1126 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 36.3% (409 of 1126 strings)

Translated using Weblate (Serbian)

Currently translated at 44.4% (501 of 1126 strings)

Translated using Weblate (Slovenian)

Currently translated at 43.7% (493 of 1126 strings)

Translated using Weblate (Turkish)

Currently translated at 61.7% (695 of 1126 strings)

Translated using Weblate (Czech)

Currently translated at 99.3% (1119 of 1126 strings)

Translated using Weblate (Dutch)

Currently translated at 73.3% (826 of 1126 strings)

Translated using Weblate (Persian)

Currently translated at 44.8% (505 of 1126 strings)

Translated using Weblate (Slovak)

Currently translated at 59.6% (672 of 1126 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 85.5% (963 of 1126 strings)

Translated using Weblate (Finnish)

Currently translated at 62.5% (704 of 1126 strings)

Co-authored-by: Aitor Astorga <a.astorga.sdv@protonmail.com>
Co-authored-by: Alexander Temnikov <sachat2006@gmail.com>
Co-authored-by: Arif Budiman <arifpedia@gmail.com>
Co-authored-by: Aurora <arci@anche.no>
Co-authored-by: Darwin <daerwendeshu@outlook.com>
Co-authored-by: Fadilah Riczky <friczky@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hadi <xhopeter@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ilija <zojka2g@gmail.com>
Co-authored-by: Joao <joaohirasawaa@gmail.com>
Co-authored-by: Jonne Saloranta <saloranta.jonne@gmail.com>
Co-authored-by: Joren Vansteenkiste <vansteenkiste.joren@telenet.be>
Co-authored-by: Martin Stojanoski <martin.stojanoski2000@gmail.com>
Co-authored-by: Mattias <mattiasghodsian@gmail.com>
Co-authored-by: Mücahit Kaya <kaya-mucahit@outlook.com>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: WilliamNT <hwbendeguz@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: aorinngoDo <aorinngo@email.cz>
Co-authored-by: haha4ni <haha4ni@hotmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: klodrik <klodrik@zoominn.no>
Co-authored-by: peter cerny <posli.to.semka@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: tgp0625 <tgp0625@naver.com>
Co-authored-by: xB <abxb19@gmail.com>
Co-authored-by: Роман <romkaeliseev@gmail.com>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ar/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/eu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fa/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/id/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ko/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sk/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sv/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ta/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/tr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2026-02-02 04:10:51 +01:00
jeffvli 6a68cebc93 increase fullscreen overlay z-index above titlebar 2026-02-01 19:10:38 -08:00
jeffvli ba474205c8 bump electron to v39.4.0 2026-02-01 18:59:46 -08:00
jeffvli dffe5bfffb fix duplicate import merge error 2026-02-01 18:56:48 -08:00
jeffvli 7615c0d2ba track image viewport state in sessionStorage 2026-02-01 18:55:08 -08:00
jeffvli 216353837c decrease zIndex of error boundary ServerSelector to prevent display above FullScreenPlayer 2026-02-01 18:55:08 -08:00
jeffvli 7f180b2c50 add bottom padding to fullscreenplayer header 2026-02-01 18:55:08 -08:00
Exceen ce46e0f351 feat: add regex filter setting for sidebar playlists (#1589)
* added regex filter for sidebar playlists

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-01 18:25:37 -08:00
jeffvli 0999b93b47 add missing border radius to item card container 2026-01-31 02:41:25 -08:00
jeffvli 63c21cf7c2 add 2 line clamp to genre image placeholder 2026-01-31 01:42:51 -08:00
jeffvli 72ab1dc8a0 add download context menu action for browser 2026-01-31 00:41:48 -08:00
jeffvli 131e1ec11d support filter pinning on the genre detail list 2026-01-30 21:42:17 -08:00
jeffvli 4d60f5b8d9 add genre image card placeholder 2026-01-30 21:39:05 -08:00
jeffvli 6962a05c96 fix icon and wrap on collection title 2026-01-30 21:29:33 -08:00
jeffvli 25ee57da1c remove filter modal from playlist list header 2026-01-30 21:12:18 -08:00
jeffvli 37e41c9c8e re-add background to modal header 2026-01-30 21:10:59 -08:00
jeffvli 69b6821deb add secondary sort for album release date 2026-01-30 21:07:44 -08:00
jeffvli 8e6078515a add spinner for color loading fallback 2026-01-30 21:07:07 -08:00
jeffvli 73868dbcbf add translation keys for window bar 2026-01-30 20:51:24 -08:00
jeffvli 49ae774d48 fix translation files to use correct plurality references 2026-01-30 20:51:12 -08:00
Hosted Weblate 5b3e2da95b Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 85.8% (962 of 1120 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1120 of 1120 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1120 of 1120 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1120 of 1120 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1119 of 1119 strings)

Translated using Weblate (Japanese)

Currently translated at 85.3% (955 of 1119 strings)

Translated using Weblate (Russian)

Currently translated at 67.1% (751 of 1119 strings)

Translated using Weblate (Basque)

Currently translated at 78.0% (869 of 1114 strings)

Translated using Weblate (Basque)

Currently translated at 77.9% (868 of 1114 strings)

Translated using Weblate (Japanese)

Currently translated at 84.0% (936 of 1114 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1114 of 1114 strings)

Translated using Weblate (Japanese)

Currently translated at 83.9% (935 of 1114 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (1114 of 1114 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1114 of 1114 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1114 of 1114 strings)

Translated using Weblate (Czech)

Currently translated at 97.3% (1084 of 1114 strings)

Translated using Weblate (Danish)

Currently translated at 0.3% (4 of 1114 strings)

Added translation using Weblate (Danish)

Translated using Weblate (Czech)

Currently translated at 100.0% (1114 of 1114 strings)

Translated using Weblate (Basque)

Currently translated at 84.5% (942 of 1114 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1114 of 1114 strings)

Translated using Weblate (Basque)

Currently translated at 84.5% (938 of 1110 strings)

Translated using Weblate (Basque)

Currently translated at 84.3% (936 of 1110 strings)

Translated using Weblate (Dutch)

Currently translated at 74.5% (828 of 1110 strings)

Translated using Weblate (Turkish)

Currently translated at 63.0% (700 of 1110 strings)

Translated using Weblate (French)

Currently translated at 92.9% (1032 of 1110 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1110 of 1110 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1110 of 1110 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (1110 of 1110 strings)

Translated using Weblate (Russian)

Currently translated at 72.0% (800 of 1110 strings)

Co-authored-by: Aitor Astorga <a.astorga.sdv@protonmail.com>
Co-authored-by: Denisa Alicia Rissa <denisarissa@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Koray HATIRNAZ <hatirnazkoray@gmail.com>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: haha4ni <haha4ni@hotmail.com>
Co-authored-by: jay <jayma13222@gmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: Роман <romkaeliseev@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/da/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/eu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/tr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2026-01-31 04:03:41 +00:00
jeffvli 1a5e513526 add list filter collections 2026-01-30 20:03:27 -08:00
jeffvli ad83e95a46 decouple audio device setting property depending on player type (#1617) 2026-01-30 17:55:25 -08:00
jeffvli bdd5c78d39 add custom skeleton component, remove dependency 2026-01-30 17:50:34 -08:00
Damien Erambert 6a0c2213a5 Prevent scrollbar appearing in album metadata column on large viewport (#1629)
* Prevent layout shifting due to scrollbar appearing in album metadata column
2026-01-30 17:48:55 -08:00
jeffvli 99515591f1 conditionally load analytics script based on disabled status (#1630) 2026-01-30 12:20:04 -08:00
Steffen Martinsen b8228844df feat: Add support for player controls in macOS dock menu (#1627)
* Added simple macOS dock menu similar to tray menu

* Enhanced and moved dock menu to darwin folder and enabled mpris on macOS to support play/pause state

* Added missing property sortName to silence TS error
2026-01-30 12:01:02 -08:00
jeffvli 7613bc32c2 decrease image debounce duration 2026-01-29 22:28:01 -08:00
jeffvli 4d81dc49fa fix global hotkey volume step (#1614) 2026-01-29 22:23:09 -08:00
jeffvli 8c65775310 fix selection state on ItemGridList when single select mode 2026-01-29 21:34:51 -08:00
jeffvli 74c9d0ca6f remove eager loading prop from Image 2026-01-29 21:32:10 -08:00
jeffvli 871bb9da3a update lyrics autofetcher to async search 2026-01-29 20:52:36 -08:00
jeffvli 8ae1fb4fdb fix type errors 2026-01-29 20:46:07 -08:00
jeffvli 1a39182d80 fix spoiler line breaks (#1622) 2026-01-29 20:43:57 -08:00
jeffvli a1a837298f fix title/description of home feature style setting 2026-01-29 19:58:54 -08:00
jeffvli 74b0e38f7e remove direct references to plural translation keys 2026-01-29 19:52:42 -08:00
jeffvli c1f48b21a4 add config to show/hide table header 2026-01-29 19:43:00 -08:00
jeffvli a496c04701 persist image render after entering viewport 2026-01-29 19:12:07 -08:00
das_ 590a7c7dfa Fix Discord details url exceeding max length (#1620)
* fix discord details url exceeding max length
2026-01-28 21:08:00 -08:00
Mike Benz 796629b4e6 Enable Playlist in sidebar to be sorted (#1542)
* add playlist reorder in sidebar
2026-01-28 20:54:20 -08:00
jeffvli ced3b491ff add SortName client side sort option (#1612) 2026-01-28 20:45:47 -08:00
jeffvli 78aebd7c5d add configuration to revert to single-select ItemGrid behavior 2026-01-28 20:14:05 -08:00
jeffvli 9532601efe make compact image container full width 2026-01-28 19:54:14 -08:00
jeffvli bd34a729b3 set debounce / viewport for images used in the app 2026-01-28 19:49:37 -08:00
jeffvli 23990b581b add enableDebounce prop to Image to conditionally debounce image loading 2026-01-24 18:08:44 -08:00
jeffvli f786da52bb add custom useDebouncedValue hook to handle initial set value 2026-01-24 17:42:53 -08:00
jeffvli ee145d6f65 add enableViewport prop to Image to conditionally lazy load 2026-01-24 17:27:32 -08:00
jeffvli c310ad65ef handle i18n plurality references with context instead of direct key access (#1591) 2026-01-24 17:20:11 -08:00
jeffvli 26284e2412 decrease long animation durations (#1553) 2026-01-24 17:08:06 -08:00
Kendall Garner 6e4cd6912b enable refresh for all home carousels, and fix favorite/rating on home 2026-01-24 14:54:29 -08:00
jeffvli 974313c30b add hebrew font 2026-01-24 11:57:14 -08:00
marank 8ed586e2f3 add support for disc subtitles from subsonic discTitles field (#1609) 2026-01-23 21:30:09 -08:00
marank f016d2cdf4 Cover art support for folder view (Subsonic servers only) (#1608)
* add coverArt support for subsonic folders
2026-01-23 21:26:51 -08:00
Jeff c79e041777 Fix macOS tray icon (#1600)
* add 32x32 icon for macOS tray

* add 16x16 image

* add black/transparent icon
2026-01-23 21:10:49 -08:00
jeffvli a50984d2cb remove memoization from individual table columns
- causes issues with drag/drop state
2026-01-23 20:43:28 -08:00
jeffvli 819945dcba fix issue where the first row would not show row border 2026-01-23 19:12:07 -08:00
jeffvli 9f81bff020 fix swipe area on grid carousel 2026-01-23 19:10:36 -08:00
jeffvli b45594515e retry autofit calculation to prevent zero value on initial render and memoization 2026-01-22 02:53:25 -08:00
jeffvli 3a5d701195 fix genres detail content being constrained to maxWidth 2026-01-22 02:10:13 -08:00
jeffvli 34e037725c disable autoscroll on non-list tables 2026-01-22 02:08:09 -08:00
jeffvli b4fd7b6a66 add prop to disable custom autoscroll on ItemTableList 2026-01-22 02:07:24 -08:00
jeffvli 81af324260 handle radio metadata for mpris / mediasession (#1586) 2026-01-22 01:30:45 -08:00
jeffvli a5541745c3 add toggle for single/multiple home feature carousel (#1581) (#1412) 2026-01-22 01:18:34 -08:00
jay 39d691d528 fix: stop volume slider clicks from opening full screen (#1585)
* fix volume slider clicks from opening full screen
2026-01-22 01:01:06 -08:00
jeffvli 0c1537e5ef prevent duplicate audio device in selector (#1598) 2026-01-22 00:33:52 -08:00
jeffvli 3405f853e3 allow swiping on the the grid carousel title area (#1521) 2026-01-22 00:33:52 -08:00
jeffvli 8b0b53029c fix missing autoscroll cleanup on ScrollArea 2026-01-22 00:33:51 -08:00
jeffvli f6012d3b03 add more memoization to the ItemTableList 2026-01-22 00:33:51 -08:00
jeffvli f4072c183b refactor feature hooks to be conditionally initialized 2026-01-21 02:23:25 -08:00
jeffvli 9a4a8eb742 refactor some usePlayerSong consumers to only fetch needed properties 2026-01-21 02:02:49 -08:00
jeffvli dbfb547af9 remove favorite/rating handlers from PlayerContext to prevent rerenders from consumers 2026-01-21 01:57:47 -08:00
jeffvli 0492b867aa optimize rating/favorite to prevent blocking UI 2026-01-21 01:38:11 -08:00
jeffvli b7cbb3055a fix memory leak on table autoscroll 2026-01-21 00:32:48 -08:00
jeffvli c3c18e22ea add butterchurn presets ignore constant for broken presets 2026-01-20 18:02:59 -08:00
jeffvli 9318d00a5b refactor butterchurn state to prevent rerender flicker on cycle 2026-01-20 17:58:58 -08:00
jeffvli a5940a9124 fix item grid calling onScrollEnd on initial render 2026-01-20 15:41:19 -08:00
jeffvli 9a8986834e remove wait for color calc on detail pages causing extra render 2026-01-20 15:40:48 -08:00
jeffvli c5d2c60d70 update to v1.3.0 2026-01-18 19:08:38 -08:00
Hosted Weblate 52d2cf5cb4 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Czech)

Currently translated at 100.0% (1113 of 1113 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (1113 of 1113 strings)

Translated using Weblate (Russian)

Currently translated at 68.1% (759 of 1113 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1113 of 1113 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1113 of 1113 strings)

Translated using Weblate (Polish)

Currently translated at 99.9% (1112 of 1113 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1111 of 1111 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1111 of 1111 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1111 of 1111 strings)

Translated using Weblate (French)

Currently translated at 93.3% (1035 of 1109 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 87.5% (971 of 1109 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 93.8% (1041 of 1109 strings)

Translated using Weblate (Dutch)

Currently translated at 74.9% (831 of 1109 strings)

Translated using Weblate (Basque)

Currently translated at 77.8% (863 of 1109 strings)

Translated using Weblate (Basque)

Currently translated at 76.1% (845 of 1109 strings)

Translated using Weblate (Basque)

Currently translated at 75.1% (833 of 1109 strings)

Translated using Weblate (Ukrainian)

Currently translated at 0.1% (1 of 1109 strings)

Translated using Weblate (Basque)

Currently translated at 69.5% (771 of 1109 strings)

Translated using Weblate (Dutch)

Currently translated at 65.7% (729 of 1109 strings)

Translated using Weblate (Dutch)

Currently translated at 61.7% (685 of 1109 strings)

Translated using Weblate (Dutch)

Currently translated at 56.8% (630 of 1109 strings)

Translated using Weblate (Dutch)

Currently translated at 54.8% (608 of 1109 strings)

Translated using Weblate (Dutch)

Currently translated at 47.0% (522 of 1109 strings)

Translated using Weblate (Dutch)

Currently translated at 47.0% (522 of 1109 strings)

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Slovak)

Currently translated at 61.1% (678 of 1109 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Catalan)

Currently translated at 99.8% (1107 of 1109 strings)

Translated using Weblate (Japanese)

Currently translated at 80.7% (896 of 1109 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 93.8% (1041 of 1109 strings)

Translated using Weblate (French)

Currently translated at 93.3% (1035 of 1109 strings)

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (French)

Currently translated at 93.3% (1035 of 1109 strings)

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (French)

Currently translated at 93.6% (1039 of 1109 strings)

Co-authored-by: Aitor Astorga <a.astorga.sdv@protonmail.com>
Co-authored-by: Alexander <spokeosen@gmail.com>
Co-authored-by: Desiler <qboin94@gmail.com>
Co-authored-by: Emily <Markix124@protonmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: HUMET <ressaguer@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: bokse <weblate@bokse.nl>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: Роман <romkaeliseev@gmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/eu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sk/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2026-01-19 03:53:37 +01:00
jeffvli a63763bfe8 use dev path for local settings store 2026-01-18 18:53:21 -08:00
jeffvli 15633d07f0 remove the Priority queue type 2026-01-18 18:53:21 -08:00
Kendall Garner 04f7c7fdd4 fix(remote): proper image when mpris and remote interleave 2026-01-18 18:18:36 -08:00
jeffvli 1c6ee88912 remove ♫ icon from card/table date fields 2026-01-18 17:46:16 -08:00
jeffvli c53b2f8ed8 fix title columns link width 2026-01-18 17:45:58 -08:00
jeffvli 5c2c18268b fix type assertions and add mantine type extension 2026-01-18 17:30:33 -08:00
jeffvli 5fd0ffaa4f make reset filter button size consistent with unpin 2026-01-18 17:24:52 -08:00
jeffvli 4d0b0d0c8d add compact sizing variants to ActionIcon 2026-01-18 17:24:52 -08:00
Kendall Garner 45df497ee6 natural numeric sort for tag and disable disc/track total for nd track filter 2026-01-18 17:19:30 -08:00
jeffvli 2dd83b111f allow search on visualizer select inputs 2026-01-18 17:17:39 -08:00
jeffvli 6b599bf53d remove compilation from primary album section groupings 2026-01-18 17:07:53 -08:00
jeffvli d10e4a3d68 rework auto lyrics matcher (#1569)
- remove priority order in favor of best match from all selected providers (lrclib synchronized)
- improve % match for title / artist
2026-01-18 16:02:37 -08:00
jeffvli 7f1c4a4d18 add sync status to lrclib lyrics (#1568) 2026-01-18 15:47:07 -08:00
jeffvli c3d4f6cacd properly handle disableArtistFilter and disableGenreFilter props for all list filters 2026-01-18 14:07:52 -08:00
jeffvli dad3d10a83 move filter reset button to header 2026-01-18 14:04:30 -08:00
Kendall Garner 5c06624f8c Initial work: support showing studios for jellyfin, allow pill to be clickable (#1566) 2026-01-18 13:53:34 -08:00
Kendall Garner cf428a14a3 fix left control and context menu image display for queue items of different server 2026-01-18 08:35:19 -08:00
jeffvli a0e09b80cf fix missing playlistItemId for subsonic song normalization (#1564) 2026-01-18 02:28:31 -08:00
jeffvli 0e388dabf5 add fullscreen visualizer (#1546) 2026-01-18 02:17:55 -08:00
jeffvli 27a5153b8a add click handler onto the accessible deselect icon on the multiselect 2026-01-18 00:50:03 -08:00
jeffvli cad3b4c905 fix stale updates in Grid/Table config 2026-01-17 22:01:24 -08:00
jeffvli bda82a8198 add gap between input and items in VirtualMultiSelect 2026-01-17 21:38:12 -08:00
Nooby b9d14e03f1 Add Rosé Pine themes (#1549)
* Add Rosé Pine theme
2026-01-17 20:35:11 -08:00
jeffvli ea46b98400 prevent mpv hotkey conflict with radio when inactive 2026-01-17 20:29:57 -08:00
jeffvli 123f09da6c fix spinner position in VirtualMultiSelect 2026-01-17 20:19:06 -08:00
jeffvli 4155cd0963 optimize ND/JF list fetch
- no longer requires 2 separate fetches for count and data
- the list count includes the first page so we set the query data directly
2026-01-17 19:57:12 -08:00
jeffvli 27f82aef94 conditionally disable Subsonic list filters based on availability (#1567) 2026-01-17 18:20:40 -08:00
jeffvli 9f9d685353 decrease font weight of JoinedArtists display 2026-01-17 17:46:51 -08:00
jeffvli 9b97a3fa61 add reset button to list filters 2026-01-17 17:43:55 -08:00
jeffvli 5b519320c2 enhance album/song list filters 2026-01-17 16:56:35 -08:00
jeffvli 790782b799 fix itemCount not updating properly on zero value 2026-01-17 16:25:37 -08:00
jeffvli 8c5188dfd0 add VirtualMultiSelect component for filters 2026-01-17 16:25:12 -08:00
jeffvli d793e67b56 replace separator string with smaller bullet 2026-01-17 13:29:25 -08:00
jeffvli 9bccf7c405 replace Rating column header with icon instead of text 2026-01-17 13:23:53 -08:00
jeffvli 291daa434c validate that the current song is different from server before revalidating in queue 2026-01-17 13:19:56 -08:00
jeffvli ef5daad1dd add more dynamic imports to optimize bundle 2026-01-17 07:32:16 -08:00
jeffvli 6cb5c95c1f add chrome target for vite build 2026-01-17 07:27:52 -08:00
jeffvli 37068a3b89 fix sourcemaps in vite build 2026-01-17 04:57:28 -08:00
jeffvli 5901748b76 fix disc group selection state in album songs 2026-01-17 04:29:06 -08:00
jeffvli 945a4052e2 decrease opacity of non-active sync lyric 2026-01-17 03:40:53 -08:00
jeffvli cd887f8615 adjust lyrics scroll mask to improve edge visibility (#1562) 2026-01-17 03:37:49 -08:00
jeffvli 3f3540dd2b fix mouseover state causing rerender in fullscreen player (#1535) 2026-01-17 03:02:05 -08:00
jeffvli b4b0c6cedd fix Toggle Queue hotkey when using detached queue (#1522) 2026-01-17 02:43:11 -08:00
jeffvli afd91d2ae3 fix sidebar drag region overlapping window controls with web windowbar (#1536) 2026-01-17 02:38:37 -08:00
jeffvli e0e1799902 add fallback to minYear if no dates tagged 2026-01-17 02:35:11 -08:00
jeffvli e64d77feba add timeout to prevent accidental context submenu close (#1552) 2026-01-17 02:31:09 -08:00
jeffvli ac944c43bb add composer column to song/album table (#1559) 2026-01-17 02:16:56 -08:00
jeffvli aec2f85165 add filter Link to album recordlabels (#1541) 2026-01-17 02:00:06 -08:00
jeffvli 85a7df29db fix settings reset
- force reset by deleting local storage state and reloading the window
- the default reset functionality does not seem to work due to the persistence
2026-01-17 01:53:08 -08:00
jeffvli 18d56f32cf add Title (artist) column (#1496) 2026-01-17 01:49:59 -08:00
jeffvli d1aed5007f refactor item list to use accessor function 2026-01-16 23:45:46 -08:00
jeffvli e2b20eb89b split out item list table functionality 2026-01-16 23:45:19 -08:00
jeffvli a5fa022eb6 add context to item list table 2026-01-16 23:45:04 -08:00
jeffvli 79e7d7a010 refactor item list table drag/hover 2026-01-16 23:43:50 -08:00
jeffvli 431ff76e19 clean up old logs 2026-01-16 11:05:33 -08:00
jeffvli dc5414284a invalidate recentlyPlayed and mostPlayed carousels on scrobble submission 2026-01-16 04:35:06 -08:00
jeffvli a59e57572c support query key override on infinite carousels 2026-01-16 04:34:44 -08:00
jeffvli 2827b2ae01 invalidate the album query on scrobble submission 2026-01-16 04:23:57 -08:00
jeffvli fc5024be90 revalidate current song in queue during playback 2026-01-16 04:18:02 -08:00
jeffvli dab1103279 manually increment queue play count on scrobble 2026-01-16 04:12:44 -08:00
jeffvli f5dabc134a revert library title wrap style 2026-01-16 03:55:29 -08:00
jeffvli 9e57125c96 reduce window minHeight to 120px (#1561) 2026-01-16 03:55:18 -08:00
jeffvli 8a14327aaf use placeholderData instead of initialData for detail routes 2026-01-16 02:43:14 -08:00
jeffvli b9311e841c remove fade animation on album songs table 2026-01-16 02:01:08 -08:00
jeffvli 46b80b9a18 add loading placeholder cards to grid carousel 2026-01-16 01:31:48 -08:00
jeffvli b6a670689c fix ItemCard skeleton sizing to match original 2026-01-15 22:14:34 -08:00
jeffvli 1a3fbe0a7a improve text wrap on library header 2026-01-15 21:40:47 -08:00
jeffvli 66a2b4c225 fix sidebar visualizer/lyrics combined behavior (#1529) 2026-01-15 21:35:45 -08:00
jeffvli 83c47454c6 fix image condition for discord rpc image with Jellyfin (#1509) 2026-01-14 22:03:22 -08:00
jeffvli 0947e209ce remove unused import 2026-01-14 21:58:08 -08:00
jeffvli 1f12ef2151 increase album release section limit to 100 (#1523) 2026-01-14 21:55:21 -08:00
jeffvli 8de80c00a8 ensure song follow is run on play queue render 2026-01-14 21:34:46 -08:00
jeffvli b79ebdfbef revert to old feature carousel style (#1412) 2026-01-14 21:15:24 -08:00
jeffvli a8604dd150 add recently played songs carousel for jellyfin (#1494) 2026-01-14 20:18:19 -08:00
jeffvli c676f5b91f use existing web player engine for radio playback (#1543) 2026-01-14 20:01:30 -08:00
jeffvli 41054ed819 add audio device selection for mpv 2026-01-14 19:12:36 -08:00
jeffvli d95204513f remove Windows only description for mediasession (#1557) 2026-01-14 18:47:10 -08:00
jeffvli 1850cc68d8 Revert "refactor image to only render in viewport once"
This reverts commit 746951b55f.
2026-01-14 18:46:09 -08:00
binder-badge c1c07b861e Update screenshots on readme (#1555)
* update screenshots on readme
2026-01-14 18:32:54 -08:00
Michael Levy 244aebb0f5 fix: Use .ico file on Windows (#1544)
* use ico file on windows
2026-01-14 18:25:43 -08:00
jeffvli ae49e3cf2f allow system tray in macOS (#1539) 2026-01-14 18:21:26 -08:00
Kendall Garner 40f04d6800 fix navidrome tag list sort 2026-01-11 17:07:57 -08:00
skajmer bc0ba8c116 Add missing _other strings (#1547)
Adds strings that were previously missing
2026-01-12 00:48:24 +00:00
jeffvli 746951b55f refactor image to only render in viewport once 2026-01-10 14:22:05 -08:00
haha4ni 89d4698155 fix:Chinese locale missing *_one key (#1531) 2026-01-09 16:20:55 +00:00
Kendall Garner 415cc71f74 fix(jellyfin): use undefined instead of -1 for limit for jellyfin 10.10, fix item-image 2026-01-09 08:11:02 -08:00
jeffvli 0e41144a10 fix title overflow on firefox 2026-01-08 23:50:38 -08:00
Kendall Garner b5dbb30b02 fix(query builder): default to no value for empty string 2026-01-08 21:16:40 -08:00
Kendall Garner bc40123891 fix(queue): use song serverId when switching servers 2026-01-08 20:43:35 -08:00
Kendall Garner f465e34ea3 fix(jellyfin): use correct filter for album/artist with small count 2026-01-08 20:32:57 -08:00
Kendall Garner eca925a4eb fix: respect volume wheel step for volume hotkey 2026-01-08 08:09:39 -08:00
Kendall Garner 6442728931 allow legacy auth setting to be default when server lock is disabled 2026-01-08 07:47:07 -08:00
Kendall Garner 7e67d0dac6 fix: properly handle server lock and related properties 2026-01-08 07:42:59 -08:00
Kendall Garner 2fdc214c21 remove download icon from non-electron contexts 2026-01-07 21:56:53 -08:00
Kendall Garner 652be94eb2 fix(remote): send song url to remote 2026-01-07 21:34:57 -08:00
Kendall Garner 93a5bafc38 fix: add scroll area to server selector dropdown in sidebar 2026-01-07 20:51:04 -08:00
jeffvli c2de979527 fix incorrect condition to try similar songs in autodj 2026-01-07 13:57:53 -08:00
Kendall Garner fd78bdf8af fix(login): add scroll area to login required page 2026-01-07 07:35:26 -08:00
haveac1gar e0e82e7246 Added sorting by Disc Number and Track Number for SongListSort.COMMENT (#1518) 2026-01-05 20:15:15 -08:00
jeffvli cb749480a4 fix missing ANALYTICS_DISABLED var in example docker compose 2026-01-04 16:12:20 -08:00
jeffvli 5ec8f1a904 add fallback to year for navidrome release display (#1498) 2026-01-04 15:22:37 -08:00
jeffvli 83b20d9086 fix card container height when inconsistent row count 2026-01-04 15:07:34 -08:00
jeffvli 211f09fe19 fix presets delete (#1497) 2026-01-04 14:42:44 -08:00
jeffvli 03c1fb0ff2 add missing table body to hotkeys manager 2026-01-04 14:31:18 -08:00
jeffvli 834412ad31 fix release notes not displayed on version change 2026-01-04 14:24:34 -08:00
jeffvli 7ae0aa198e use separator string for releasetype display 2026-01-04 02:54:00 -08:00
Hosted Weblate 5d24d90a7c Translated using Weblate (Czech)
Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1109 of 1109 strings)

Translated using Weblate (Czech)

Currently translated at 99.0% (1099 of 1109 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1104 of 1104 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1099 of 1099 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1099 of 1099 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 88.4% (972 of 1099 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1099 of 1099 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kaffu Chino <kaffu-chino@outlook.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2026-01-04 10:37:14 +00:00
jeffvli b5923539c2 update to v1.2.0 2026-01-04 02:37:04 -08:00
jeffvli 3a9d49549c remove duplicate text in release notes modal 2026-01-04 02:36:59 -08:00
jeffvli ff272a5385 fix butterchurn init and cleanup 2026-01-04 02:35:44 -08:00
jeffvli 327875df6a make queue controls follow panel in sidebar (#1492) 2026-01-04 02:09:35 -08:00
jeffvli 9bbb213bc2 use shorthand localized date format 2026-01-04 01:58:15 -08:00
jeffvli 3122c1a058 fix long press to work only on left click (#1493) 2026-01-04 01:53:34 -08:00
jeffvli af055ab6dd support original date display and sort (#1488) 2026-01-04 01:49:51 -08:00
jeffvli e34d84deee fix missing defaultValue on NumberInput 2026-01-04 01:01:14 -08:00
jeffvli 0596faf51e readd mpv reload handler 2026-01-04 01:01:01 -08:00
jeffvli 5f1867c14f add support for track subtitle display (#1177) 2026-01-04 00:44:22 -08:00
jeffvli 1c6b204e80 bump butterchurn package 2026-01-03 23:04:22 -08:00
jeffvli 29957780cb fix wrong imageRes being used in some cases 2026-01-03 16:00:32 -08:00
jeffvli fd0d783e7d use weighted ordering for album sections with secondary releasetypes 2026-01-03 15:51:58 -08:00
jeffvli 5ec025a70e fix artist album search conditional render on no results 2026-01-03 15:42:41 -08:00
jeffvli dc0c6401de fix image column skeleton aspect ratio 2026-01-03 06:31:42 -08:00
jeffvli 06fc7b391f remove remixer from navidrome album type 2026-01-03 06:31:40 -08:00
jeffvli 8c91f1c52d remove scroll shadows from fullscreen player 2026-01-03 03:23:58 -08:00
jeffvli 968d991a1a improve table scroll shadow styles 2026-01-03 03:19:40 -08:00
jeffvli f4f75f342c use throttle on scroll shadow instead of debounce 2026-01-03 03:08:05 -08:00
jeffvli ba32832619 actually fix the related tab (#1484) 2026-01-03 03:05:53 -08:00
jeffvli 186811156e add remixer to song artist (#1400) 2026-01-03 03:03:10 -08:00
jeffvli 261c5541cd cleanup path replacement 2026-01-03 02:24:53 -08:00
jeffvli 5c14d20f78 join releasetypes on 'all' mode on artist page 2026-01-03 02:09:59 -08:00
jeffvli c67731f852 add missing gain node to butterchurn (#1475) 2026-01-03 01:33:48 -08:00
jeffvli 0336f4afea fix related tab sizing (#1484) 2026-01-03 01:19:37 -08:00
jeffvli ace4c77bdc add missing cleanup functions on visualizers 2026-01-03 01:01:55 -08:00
jeffvli ffe3f08705 optimize item table 2026-01-03 01:01:54 -08:00
jeffvli d06d1674d1 optimize various base components 2026-01-03 01:01:54 -08:00
jeffvli a66c67e86d optimize settings store 2026-01-03 01:01:54 -08:00
dependabot[bot] 0cfc4119ba Bump qs in the npm_and_yarn group across 1 directory (#1465)
Bumps the npm_and_yarn group with 1 update in the / directory: [qs](https://github.com/ljharb/qs).


Updates `qs` from 6.14.0 to 6.14.1
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.0...v6.14.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-03 00:53:50 -08:00
Qimiao Chen af0354a4d5 Avoid an infinite loop when artist.name is an empty string. (#1483)
* Avoid an infinite loop when  is an empty string.

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2026-01-03 00:53:26 -08:00
jeffvli e696c0c636 add context menu item to show song in file manager (#1397) 2026-01-02 01:32:51 -08:00
jeffvli 6aeec1e89c add filepath replacement setting (#1402) 2026-01-02 01:23:29 -08:00
jeffvli e406b27170 fix radio cancellation error on double click (#1419) 2026-01-01 20:40:24 -08:00
jeffvli 55cead87c8 add LEGACY_AUTH env variable (#1473) 2026-01-01 20:33:27 -08:00
jeffvli aaf840d358 resend mediasession on player repeat (#1472) 2026-01-01 20:17:49 -08:00
jeffvli af8470e254 fix missing export lyrics button 2026-01-01 20:08:27 -08:00
jeffvli c7809c62ce throttle volume slider 2026-01-01 15:32:20 -08:00
jeffvli cb47883328 remove unused properties from PlayerData 2026-01-01 15:31:57 -08:00
jeffvli 588e0609fd add list playback and navigation hotkeys (#1469) 2026-01-01 14:02:02 -08:00
jeffvli 091d2efb2e fix grid song play behavior (#1477) 2026-01-01 12:41:04 -08:00
Flutter e5c5985f0f feat: playlist grid view (#1476)
* feat: grid view for playlists
2026-01-01 12:21:47 -08:00
jeffvli b7627fd469 fix sidebar image empty icon 2026-01-01 12:21:20 -08:00
jeffvli 22c0f8f8c6 add manual garbage collection 2026-01-01 12:21:20 -08:00
Leonardo Salgueiro a7d2a427ec forcing string value for EP to always be upper case (#1474) 2026-01-01 11:59:27 -08:00
jeffvli 14cc4079a3 fix Inter font missing variable weights 2025-12-31 18:19:34 -08:00
jeffvli bb93b0895e fix table keyboard navigation (#1469) 2025-12-31 18:10:31 -08:00
jeffvli 1a3e2eec70 add up to 2 genre carousels on the album page 2025-12-31 16:30:10 -08:00
jeffvli 926b77c770 fix Subsonic artist list broken pagination 2025-12-31 15:55:45 -08:00
jeffvli a4472bb449 include custom gradients and opacity in copied visualizer preset 2025-12-31 15:52:28 -08:00
jeffvli cd04d7a760 re-add visualizer preset update functionality 2025-12-31 15:32:44 -08:00
jeffvli 6356c55c81 add loading state to external lyrics fetch 2025-12-31 15:20:22 -08:00
jeffvli 37ed99d0fb optimize artist page load speed 2025-12-31 15:15:30 -08:00
jeffvli 72475fbcc2 update to v1.1.0 2025-12-31 01:53:43 -08:00
Hosted Weblate 0096aeeb1b Translated using Weblate (Czech)
Currently translated at 100.0% (1094 of 1094 strings)

Translated using Weblate (German)

Currently translated at 81.1% (888 of 1094 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 86.1% (942 of 1094 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 76.4% (836 of 1094 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1094 of 1094 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 72.2% (789 of 1092 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 72.1% (787 of 1091 strings)

Translated using Weblate (Polish)

Currently translated at 99.6% (1087 of 1091 strings)

Translated using Weblate (Japanese)

Currently translated at 79.3% (865 of 1090 strings)

Translated using Weblate (Japanese)

Currently translated at 77.0% (840 of 1090 strings)

Translated using Weblate (Spanish)

Currently translated at 96.9% (1055 of 1088 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1088 of 1088 strings)

Translated using Weblate (Spanish)

Currently translated at 94.9% (1033 of 1088 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (1088 of 1088 strings)

Translated using Weblate (Spanish)

Currently translated at 87.5% (953 of 1088 strings)

Translated using Weblate (Basque)

Currently translated at 70.0% (762 of 1088 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 94.2% (1025 of 1088 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 94.2% (1025 of 1088 strings)

Co-authored-by: Aitor Astorga <a.astorga.sdv@protonmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kaffu Chino <kaffu-chino@outlook.com>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: Zarakkas <kaz@users.noreply.hosted.weblate.org>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/eu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-31 10:52:01 +01:00
jeffvli 91ccc71fcd fix media session using stale image reference (#1296) 2025-12-31 01:51:52 -08:00
jeffvli b00f9795bf add song infinite carousel (#1464) 2025-12-31 01:20:04 -08:00
jeffvli 255b9a9c2d fix lyrics fetch and clear (#1342)
- split server and remote lyrics into separate queries
- lyrics cache now always contain server lyrics, override will use separate remote query
- clear button is reverted to only clear the override query, and back to server
2025-12-31 01:07:56 -08:00
jeffvli 8eab4933ae fix click handler on LibraryHeader image 2025-12-30 21:19:29 -08:00
jeffvli 031f443238 re-add missing styles onto library header image 2025-12-30 21:09:47 -08:00
jeffvli 72d0fca28b support secondary public server URL 2025-12-30 21:05:38 -08:00
jeffvli 7aeadb531f use ItemImage in library header 2025-12-30 16:17:37 -08:00
jeffvli 4e213ea79e improve library header title size calculation 2025-12-30 16:13:04 -08:00
jeffvli b99ea61115 allow analytics opt out from env (#1454) 2025-12-30 15:40:58 -08:00
jeffvli 4a025f82e4 fix incorrect imageId assignments (#1456) 2025-12-30 15:18:03 -08:00
jeffvli 6ddaf0366c support copy / paste audiomotionanalyzer gradients 2025-12-30 15:03:05 -08:00
jeffvli 62183ecb58 adjust analytics to wait for server before track 2025-12-30 13:59:52 -08:00
jeffvli 3ee92b068b fix list filters sidebar not persisting closed state 2025-12-30 13:45:21 -08:00
jeffvli 4dc3a0e8d1 decrease opacity of header background image 2025-12-30 13:37:26 -08:00
jeffvli 43652ce65d add several audiomotionanalyzer presets 2025-12-30 13:32:54 -08:00
jeffvli b08c8a1719 update default audiomotionanalyzer preset 2025-12-30 13:22:08 -08:00
jeffvli 0385f13928 fix missing mpv parameters translation 2025-12-30 05:37:23 -08:00
jeffvli 3bf2c585b8 fix localization on visualizer form 2025-12-30 05:35:37 -08:00
jeffvli 7d05e4536b adjust default react-query stale/gc time 2025-12-30 04:43:14 -08:00
jeffvli 0553f3b5a2 fix missing rating input on the compact item card 2025-12-30 04:08:39 -08:00
jeffvli c01a0d79e1 fix missing format on item card album count row 2025-12-30 04:04:05 -08:00
jeffvli adc094005f improve compact size item card 2025-12-30 03:59:17 -08:00
jeffvli 5b7557bd45 fix subsonic release date format to yyyy-mm-dd 2025-12-30 03:40:12 -08:00
jeffvli 6aa3905922 use exact album artist names (#1459) 2025-12-30 03:39:53 -08:00
jeffvli aa75aaaffb add more metadata to album header / side 2025-12-30 02:33:23 -08:00
jeffvli 62ab4b7a00 add releaseType to album header 2025-12-29 21:16:39 -08:00
jeffvli 145dc5c99e add fallback for navidrome release date 2025-12-29 20:54:58 -08:00
jeffvli 82a566aee1 add artist release type configuration, fix page configurations 2025-12-29 20:54:58 -08:00
Pyx 42058ff6d6 fix: correct propagation on settings menu (#1453)
* fix propagation error on settings menu
2025-12-29 14:57:49 -08:00
sheepman4267 9841cfba38 Bump electron version (#1452) 2025-12-29 14:51:50 -08:00
jeffvli 6c8099efe5 update to v1.0.2 2025-12-28 20:08:03 -08:00
jeffvli 8ba87d57cd fix default lyrics fetchers 2025-12-28 20:05:37 -08:00
jeffvli 4d57faa197 update to v1.0.1 2025-12-28 18:13:41 -08:00
Hosted Weblate 4129a8f56e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 69.2% (752 of 1086 strings)

Translated using Weblate (Polish)

Currently translated at 99.6% (1082 of 1086 strings)

Translated using Weblate (Polish)

Currently translated at 93.6% (1017 of 1086 strings)

Translated using Weblate (Polish)

Currently translated at 88.0% (955 of 1084 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (1084 of 1084 strings)

Translated using Weblate (Polish)

Currently translated at 87.8% (952 of 1084 strings)

Translated using Weblate (Czech)

Currently translated at 88.7% (961 of 1083 strings)

Translated using Weblate (Spanish)

Currently translated at 87.4% (947 of 1083 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 87.6% (948 of 1082 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (951 of 951 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (951 of 951 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Hungarian)

Currently translated at 100.0% (939 of 939 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (939 of 939 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (939 of 939 strings)

Translated using Weblate (Turkish)

Currently translated at 74.8% (701 of 936 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (936 of 936 strings)

Translated using Weblate (Korean)

Currently translated at 45.9% (430 of 936 strings)

Translated using Weblate (German)

Currently translated at 94.8% (888 of 936 strings)

Translated using Weblate (Swedish)

Currently translated at 41.1% (385 of 936 strings)

Translated using Weblate (German)

Currently translated at 94.8% (888 of 936 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (936 of 936 strings)

Translated using Weblate (Dutch)

Currently translated at 52.4% (491 of 936 strings)

Translated using Weblate (Swedish)

Currently translated at 39.6% (371 of 936 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (936 of 936 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (936 of 936 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (932 of 932 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (932 of 932 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.4% (927 of 932 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.4% (927 of 932 strings)

Translated using Weblate (French)

Currently translated at 99.8% (927 of 928 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (927 of 927 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (927 of 927 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (926 of 926 strings)

Translated using Weblate (French)

Currently translated at 100.0% (926 of 926 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Fredrik Wastring <fredrik.was@gmail.com>
Co-authored-by: Guanjun Shi <yzsgjcdd@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Mücahit Kaya <kaya-mucahit@outlook.com>
Co-authored-by: Naim V <naimverboom@gmail.com>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: Soderes Sanyi <kennex@protonmail.com>
Co-authored-by: Zarakkas <kaz@users.noreply.hosted.weblate.org>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: wonkwan lee <gorathkr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ko/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sv/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/tr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-29 03:12:30 +01:00
jeffvli 1aa91fe2f5 add defaults to main settings to sync with renderer 2025-12-28 18:12:14 -08:00
jeffvli 5c399f7117 add timeout to prevent too many lyrics fetch on song change 2025-12-28 17:49:39 -08:00
jeffvli 3c07f03651 fix custom gradients in audiomotion visualizer 2025-12-28 17:45:21 -08:00
jeffvli b26b6eab09 move server selector inline with other collapsed sidebar items 2025-12-28 17:27:01 -08:00
jeffvli b2579c031d pin album/song list filters by default 2025-12-28 17:19:38 -08:00
jeffvli 98e2458a03 enable lyrics/visualizer in sidebar by default 2025-12-28 17:19:38 -08:00
jeffvli b30e26ae7e adjust app default columns 2025-12-28 17:19:32 -08:00
jeffvli fd158b956a reorganize album metadata tags 2025-12-28 16:27:27 -08:00
jeffvli 109788ebbb update multiselect styles 2025-12-28 15:07:57 -08:00
jeffvli ffdef596ad auto follow queue when autodj is triggered 2025-12-28 14:34:38 -08:00
jeffvli 0a54f7c44c remove similarSongs from autodj when music folder is selected (#1451)
- Similar songs queries for both Subsonic/Jellyfin do not support querying by musicFolderId
2025-12-28 14:09:22 -08:00
jeffvli d5d995de5f fix missing musicFolderId on search (#1451) 2025-12-28 13:34:26 -08:00
jeffvli 304c38db1e fix infinite loader potentially refetching count multiple times on query change 2025-12-28 06:55:58 -08:00
jeffvli ef631d12cc support multiselect for nd album artist_id filter 2025-12-28 06:44:31 -08:00
jeffvli 4006980b29 adjust artist page suspense fetching 2025-12-28 06:36:14 -08:00
jeffvli f9c3c107bd adjust featured genres breakpoints 2025-12-28 06:04:54 -08:00
jeffvli 7106b100ce set default playerbar type to Slider 2025-12-28 06:04:41 -08:00
jeffvli e2d56c70b1 add optimistic update for top songs list (#1414) 2025-12-28 03:47:01 -08:00
jeffvli 1a930021b6 handle favorite/update in similarArtists 2025-12-28 03:43:59 -08:00
jeffvli 66699b9572 fix regression on round ItemCard 2025-12-28 03:23:57 -08:00
jeffvli 99be12e648 improve list loading indicator 2025-12-28 03:05:20 -08:00
jeffvli dde4e1b33c improve image placeholders and loading 2025-12-28 02:43:31 -08:00
jeffvli 88711eac2f fix Jellyfin imageId normalization 2025-12-28 02:26:27 -08:00
jeffvli f21ca83179 force single line on feature carousel artist 2025-12-28 02:03:20 -08:00
jeffvli f43950874d use "album" releasetype as default artist album fallback 2025-12-28 02:03:05 -08:00
jeffvli a3794158f0 increase default sidebar image res to 400 2025-12-28 01:34:18 -08:00
jeffvli 7f52b31b40 use multiselect for navidrome song tag filters 2025-12-28 01:26:36 -08:00
jeffvli 18a864a049 use multiselect for navidrome tag filters (#1420) 2025-12-28 01:24:54 -08:00
jeffvli 4eac6457ea add MPRIS volume handler (#1415) 2025-12-28 01:15:38 -08:00
Leonardo Salgueiro df0d4b7032 feat: adding setting to show/hide user ratings (#1426)
* adding show/hide user ratings setting
2025-12-28 01:04:50 -08:00
jeffvli f0942c7795 revert spinner icon 2025-12-28 01:04:11 -08:00
jeffvli 396325f397 refactor artist album grid to use flex layout 2025-12-28 00:51:20 -08:00
BatteredBunny 63015195b0 feat: Add DISABLE_AUTO_UPDATES env variable for disabling updates in the application entirely (#1446) 2025-12-28 00:50:55 -08:00
jeffvli e821397e6c add horizontal scroll to feature carousel (#1123) 2025-12-27 18:29:10 -08:00
jeffvli aae68853ef kill butterchurn visualizer if player is idle 2025-12-27 18:18:06 -08:00
jeffvli f904aafd4a add isEnabled property for playback filters 2025-12-27 18:12:14 -08:00
jeffvli 38b2508de6 unrender sidebar play queue when fullscreen player is open 2025-12-27 17:50:42 -08:00
jeffvli 8fee57157a fix lyrics settings button variant 2025-12-27 17:44:41 -08:00
jeffvli 6207cea9f1 support animated artist images 2025-12-27 17:29:26 -08:00
jeffvli c299752e44 Revert "enable autoHideSuspend on all overlayscrollbars instances"
This reverts commit b9a0d9b847.
2025-12-27 17:06:09 -08:00
jeffvli 82e4f832eb fix queue panels size persistence 2025-12-27 16:59:30 -08:00
jeffvli c8221c07ef fix layout shift caused by sidebar panel divider 2025-12-27 16:22:19 -08:00
jeffvli 710fc16f62 adjust artist album grid span 2025-12-27 16:22:02 -08:00
jeffvli 331cddcabb allow query preview when query editor is closed 2025-12-27 15:57:43 -08:00
jeffvli b9a0d9b847 enable autoHideSuspend on all overlayscrollbars instances 2025-12-27 15:48:50 -08:00
jeffvli 9c59a38f7a improve performance on page ScrollArea by throttling scroll callback 2025-12-27 15:48:29 -08:00
jeffvli b573999d33 add titles translations for secondary release types 2025-12-27 15:44:27 -08:00
jeffvli 35d8698ca0 add broadcast and other release type groupings 2025-12-27 15:23:42 -08:00
jeffvli 23e4574667 add configuration to show secondary release types 2025-12-27 15:19:00 -08:00
jeffvli 7db15c7c72 separate EP and Single in artist releasetypes 2025-12-27 15:03:38 -08:00
jeffvli d94b220319 fix playlist image urls 2025-12-27 14:58:57 -08:00
jeffvli acfc106f40 fix artist page initial fetch 2025-12-27 14:57:58 -08:00
jeffvli 856400048b fix image on context menu preview 2025-12-27 14:25:57 -08:00
jeffvli a7c2a92f16 set fixed height for play queue controls 2025-12-27 02:46:21 -08:00
jeffvli fc3d700a57 fix styling of transparent variant button disabled state 2025-12-27 02:44:09 -08:00
jeffvli a60973ffee adjust page animation transition 2025-12-27 02:42:41 -08:00
jeffvli a1114235d6 add layout animation for artist album cards 2025-12-27 02:25:13 -08:00
jeffvli 928b0b6f4d add a limit of 20 albums per section 2025-12-27 02:15:13 -08:00
jeffvli 60d6d49eaa fix height of sidebar panel handles 2025-12-27 02:07:03 -08:00
jeffvli 804a670bf1 default artistBackground to true 2025-12-27 02:04:00 -08:00
jeffvli e51bb05564 add play controls to artist album sections 2025-12-27 02:03:53 -08:00
jeffvli a21ee21652 add album section count badge 2025-12-27 01:55:34 -08:00
jeffvli 8b2d162733 adjust grid column counts based on new breakpoint configuration 2025-12-27 01:43:48 -08:00
jeffvli cc76c9f31e update name of Single section to Single EP 2025-12-27 01:33:29 -08:00
jeffvli aa7a5037fa add opacity configuration for visualizers 2025-12-27 01:33:05 -08:00
jeffvli 0acb1f54fc lint files 2025-12-27 01:27:10 -08:00
jeffvli 403ed8cae6 move artist radio button to page content 2025-12-27 01:19:56 -08:00
jeffvli 3db229ef68 re-add similar artists carousel to artist page 2025-12-27 01:13:28 -08:00
jeffvli f0d22267c3 replace react-resizable-panels with react-split-pane
- react-resizable-panels was causing an issue with browser navigation
2025-12-27 00:55:38 -08:00
jeffvli 796e511626 redesign artist page (#416) (#447) 2025-12-26 21:13:04 -08:00
jeffvli 06e757d3b2 decrease default lyric font/gap size 2025-12-26 18:40:30 -08:00
jeffvli 0c8032d097 adjust default audiomotion visualizer styles 2025-12-26 15:31:26 -08:00
jeffvli 7cd86d1301 default enable lyrics/visualizer in sidebar 2025-12-26 15:31:17 -08:00
jeffvli 781df3ab06 remove accordion from table/grid config 2025-12-26 15:16:51 -08:00
jeffvli 88b9124185 replace themes scrollbar with neutral colors 2025-12-26 15:14:01 -08:00
jeffvli 48724f816c fix compact item card styling for light mode 2025-12-26 15:09:43 -08:00
jeffvli 1a184a73de revert behavior for queue add by id 2025-12-26 14:55:53 -08:00
jeffvli e4b5cf36e1 fix duplicate PLAYER_PLAY event causing race condition in mpv 2025-12-26 14:49:06 -08:00
jeffvli dff182cbc5 use correct id for runtime images in useItemImageUrl 2025-12-26 14:04:48 -08:00
jeffvli fb8245539f fix missing normalizations for subsonic imageId (#1449) 2025-12-26 14:04:04 -08:00
jeffvli bb3cb4a6ad fix mpv volume on initial startup 2025-12-26 05:24:44 -08:00
jeffvli fb2e30c484 remove padding from sidebar visualizer 2025-12-26 02:32:10 -08:00
jeffvli 73c5292cc1 move the visualizer settings out of error boundary 2025-12-26 02:24:20 -08:00
jeffvli 800074dced add ignored presets for butterchurn 2025-12-25 17:19:56 -08:00
farfromrefuge f78a572a3c fix:music filtering subsonic (#1442)
* Add musicFolderId filtering for tracks in Subsonic API

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2025-12-25 14:22:23 -08:00
jeffvli 97b20cec19 persist queue sidebar panel sizing 2025-12-25 13:13:32 -08:00
jeffvli fd833f683b fix lyric alignment select on fullscreen player config (#1390) 2025-12-25 01:49:59 -08:00
jeffvli 076d9b3083 re-add pause / unpause events to Jellyfin scrobble (#1413) 2025-12-25 01:47:04 -08:00
jeffvli 3a2a1b0dc8 prevent sidebar item conflict with server selector 2025-12-25 01:39:33 -08:00
jeffvli 20c19cac6f add server selector to collapsed sidebar (#1401) 2025-12-25 01:37:07 -08:00
jeffvli 8205eeed22 split lyrics settings by key (#1389) 2025-12-25 01:29:31 -08:00
jeffvli 5eb2cff6e9 add additional configuration to player sidebar
- allow reordering of panels
- allow separation between lyrics and visualizer panels
- allow resize of panels
2025-12-24 23:20:00 -08:00
jeffvli d822d9cd29 increase default table image res to 80px 2025-12-24 19:25:44 -08:00
jeffvli 4142132ebc removal modal opacity on visualizer settings modal 2025-12-24 19:21:28 -08:00
jeffvli fb2746323b fix missing radial spin speed setting 2025-12-24 19:19:02 -08:00
Jeff d9172efae9 Add visualizer configuration (#1443)
* add visualizer configuration

* add visualizer presets

* add butterchurn visualizer

* wrap visualizers in error boundary
2025-12-24 18:12:13 -08:00
jeffvli 8e04f98e26 fix expand button on compact ItemCard 2025-12-24 03:17:39 -08:00
jeffvli 51587fbb6b add grid item card size presets 2025-12-23 21:59:52 -08:00
jeffvli cf06d69822 add sidebar visualizer / lyrics toggle in player config 2025-12-23 21:41:33 -08:00
jeffvli 22751de2f6 fix image url generation on album detail header 2025-12-23 21:30:26 -08:00
Kendall Garner 04fbf5d3d2 Export lyrics (#1383)
* add export button to the lyrics actions

* add export button to the lyrics search modal

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-12-23 21:27:47 -08:00
jeffvli 936ba73fe4 remove refresh buttons from grid carousel by default 2025-12-23 21:27:12 -08:00
jeffvli 05efd0f318 temporarily remove item list selection dialog 2025-12-23 21:05:50 -08:00
jeffvli ce570eddd2 improve auto dj to trigger on remaining songs change 2025-12-23 21:05:40 -08:00
jeffvli 5b1f269344 update radio permission to allow normal users to create 2025-12-23 20:58:58 -08:00
jeffvli 0806d9852a fix sidebar playlist image url generation 2025-12-23 20:53:14 -08:00
jeffvli c3e38d7133 fix drag preview image url generation 2025-12-23 20:53:07 -08:00
farfromrefuge a322717e0e feat: add artist radio and track radio (in context menu) (#1437)
* Add API support for artist radio and track radio features

* Add translation strings and settings UI for artist radio count

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-12-23 20:46:19 -08:00
jeffvli dcb84dd442 only run PR build on src changes 2025-12-23 20:26:24 -08:00
jeffvli ac257a9dc1 update PR publish to wait for lint success 2025-12-23 20:23:53 -08:00
Jeff 25bfb65b6d Add image URL generation at runtime to allow for dynamic image sizes (#1439)
* add getImageUrl to domain endpoints

* add new ItemImage component and hooks to generate image url

* add configuration for image resolution based on types
2025-12-23 20:18:52 -08:00
jeffvli 96f38e597c fix SegmentedControl indicator bugged position 2025-12-23 18:19:52 -08:00
Kendall Garner 383b728ddc chore(readmee): more accurate docker compose (2) 2025-12-23 17:39:11 -05:00
Kendall Garner 003cfbdd6c chore(readmer): more accurate docker compose 2025-12-23 17:38:13 -05:00
jeffvli a67ae50d16 fix links in album description 2025-12-22 20:43:26 -08:00
jeffvli ac3dcb5e17 fix releaseDate behavior on navidrome song normalization 2025-12-22 20:15:37 -08:00
Fleeym 833f82edff improve network error detection (#1436) 2025-12-22 20:15:06 -08:00
Fleeym 76f55111ec improve network error route (#1435) 2025-12-22 20:03:06 -08:00
Tiberiu (ELECTRO) Lazăr f418bbfd2f Fix API parameter for Jellyfin 10.12 and up (#1429)
* Fix API parameter for Jellyfin 10.11 and up

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-12-22 19:51:06 -08:00
Fleeym b02eba510d set minimum ServerRequired list size to 1 (#1434)
The server list in ServerRequired was expecting at least 2 items before it was shown, meaning that if you are on the login screen, you couldn't select your configured server and had to add another one.
2025-12-22 19:45:40 -08:00
Benjamin 7a77b9bfe7 feat: show record label copyright at bottom of track listing (#1421)
* show record label copyright at bottom of track listing

* add recordLabels support for Jellyfin

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-12-22 19:08:35 -08:00
Exceen c34b6774b9 fixed favorite tracks/albums/artists selection (#1418) 2025-12-22 18:43:16 -08:00
Kendall Garner f3fe5b013a fix(subsonic): support favoriting/unfavoriting artist 2025-12-19 21:35:26 -05:00
jeffvli 37be2cc8fa lint files 2025-12-16 21:10:55 -08:00
jeffvli e3c26aa5fa remove selection dialog from certain list views 2025-12-16 21:06:56 -08:00
jeffvli e21f538aa4 add item list selection dialog 2025-12-16 20:24:46 -08:00
jeffvli c9cd87bae5 remove release_channel from settings sync 2025-12-15 23:17:47 -08:00
jeffvli 9a8cb45510 Revert "prevent autoupdater from setting release channel (#1396)"
This reverts commit 614761efd7.
2025-12-15 23:06:25 -08:00
jeffvli 68b6a58ac5 handle text overflow on sidebar playlist duration 2025-12-15 21:37:58 -08:00
jeffvli 5b5cdbfb7f prevent action bar icons from being squished on resize (fix) 2025-12-15 21:37:17 -08:00
jeffvli cf4e505743 prevent action bar icons from being squished on resize 2025-12-15 21:36:27 -08:00
jeffvli 8464ed439e use success notification instead of warn on 0 playlist entries added (#1393) 2025-12-15 21:15:20 -08:00
jeffvli 9e49a45db9 fix initial list order on artist discography (#1378) 2025-12-15 21:07:24 -08:00
jeffvli 8dc5f2a580 add page view tracker 2025-12-15 20:50:58 -08:00
jeffvli 6bb848a675 remove analytics properties for based on desktop-only settings 2025-12-15 20:31:15 -08:00
jeffvli 8edf61f9e7 localize dates (#1237) 2025-12-15 20:20:32 -08:00
jeffvli 96d2699a2d add migration to clear all original store settings (#1396) 2025-12-15 19:07:12 -08:00
jeffvli 614761efd7 prevent autoupdater from setting release channel (#1396) 2025-12-15 18:12:16 -08:00
jeffvli 154f0180e1 fix potential infinite updater loop due to stale settings sync state 2025-12-15 11:27:17 -08:00
jeffvli 593ad7ad12 allow custom message on restart toast 2025-12-15 11:27:17 -08:00
Hosted Weblate 2372f1890c Translated using Weblate (Hungarian)
Currently translated at 97.7% (905 of 926 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.4% (921 of 926 strings)

Translated using Weblate (French)

Currently translated at 99.5% (922 of 926 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (926 of 926 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (926 of 926 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (926 of 926 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (924 of 924 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (924 of 924 strings)

Translated using Weblate (Polish)

Currently translated at 99.3% (918 of 924 strings)

Translated using Weblate (Swedish)

Currently translated at 35.1% (325 of 924 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (913 of 913 strings)

Translated using Weblate (Swedish)

Currently translated at 35.1% (321 of 913 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (913 of 913 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Fredrik Wastring <fredrik.was@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Soderes Sanyi <kennex@protonmail.com>
Co-authored-by: Vincent <clawd31@yahoo.fr>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sv/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-15 09:45:14 +00:00
jeffvli ad5485506d include select settings values in analytics 2025-12-15 01:44:31 -08:00
jeffvli ea7399541f revert to using custom window bar styles 2025-12-15 01:14:39 -08:00
jeffvli 455452bf77 revert padding of sidebar filters 2025-12-15 01:14:19 -08:00
jeffvli b2941b67d6 fix bg color / padding of sidebar panel 2025-12-15 01:12:11 -08:00
jeffvli bc898d6097 properly set mpv volume on init 2025-12-15 01:01:00 -08:00
jeffvli 88b27fa378 more small adjustments to light mode 2025-12-15 00:55:13 -08:00
jeffvli 3c2af4bd1a more minor theme adjustments 2025-12-14 19:33:03 -08:00
Kendall Garner f5d6c4983c remove rating from item card if using jellyfin 2025-12-14 16:45:54 -08:00
jeffvli 08a8f7f500 add utility to wait for detail bg color before page render 2025-12-14 16:35:38 -08:00
jeffvli f92754c2ac fix release notes modal showing even if no new version 2025-12-14 16:27:06 -08:00
jeffvli d4e39ca12d improve page header readability on all themes 2025-12-14 16:23:45 -08:00
jeffvli 868c64dda5 adjust SegmentedControl to use theme color 2025-12-14 16:11:45 -08:00
jeffvli 09dfc1ff1d adjust network request waterfall to force authentication first, add fallback for no network (#1028) 2025-12-14 16:00:05 -08:00
jeffvli 303eba87ca add a hook to sync main settings with renderer 2025-12-14 15:13:57 -08:00
jeffvli d8c46ba7ef adjust surface color for some themes 2025-12-14 14:55:38 -08:00
jeffvli 649f541077 reorder theme settings to the top of general 2025-12-14 14:55:10 -08:00
jeffvli 858678ea93 adjust custom window bar titles
- fix overflow
- fix positioning
- decrease text size
2025-12-14 06:47:26 -08:00
jeffvli 48bba76c74 fix window bar position on mobile layout 2025-12-14 06:40:33 -08:00
jeffvli 3f32e6cd2f decrease settings modal width 2025-12-14 06:36:02 -08:00
jeffvli 253a78b236 increase padding on list filters 2025-12-14 06:12:56 -08:00
jeffvli 69de9a98f0 add new app themes 2025-12-14 06:06:27 -08:00
jeffvli 0f4534c34c fix padding on server selector when radio is enabled 2025-12-14 05:18:32 -08:00
jeffvli a9476a98b1 adjust padding on sidebar items 2025-12-14 05:12:24 -08:00
jeffvli e56d885007 increase font size of sidebar playlist metadata 2025-12-14 04:58:40 -08:00
jeffvli b6e7bfb9bc remove drag area from page header when using custom window bars 2025-12-14 04:55:38 -08:00
jeffvli a377e3d3bb add privacy / owner to sidebar playlist metadata 2025-12-14 04:49:56 -08:00
jeffvli 752b191ad7 optimize playlist edit modal (#1234)
- remove user list fetch if not admin
- move to context modal to allow dynamic content
2025-12-14 04:43:48 -08:00
jeffvli b19e752314 fix loading state on queue restoration button 2025-12-14 04:29:12 -08:00
jeffvli 1e8e1789cd remove artist song list fetch post-processing
- the post-processing sort breaks the correct order returned by the API
2025-12-14 04:26:39 -08:00
jeffvli 1bc1f619ff fix mpv exiting on radio stop 2025-12-14 02:50:20 -08:00
jeffvli b4b106222e optimize library headers (#1374) 2025-12-14 02:33:19 -08:00
jeffvli 4cc51c3700 fix formatting in playlist duration (#1382) 2025-12-14 01:31:40 -08:00
jeffvli 8b0632495b fix debounce on onScrollEnd callback on ItemGridList 2025-12-14 01:07:26 -08:00
Jeff 7ed847fecb Add internet radio (#1384) 2025-12-13 21:26:33 -08:00
jeffvli f61d34c340 fix missing remote event handlers (#1344) 2025-12-13 20:58:12 -08:00
jeffvli 5c8d18d1c9 add validation for Subsonic releaseDate 2025-12-13 19:47:07 -08:00
jeffvli 401d0e5c19 remove duplicate mpv autoNext listener 2025-12-13 13:51:26 -08:00
Hosted Weblate e7bdb2d4ed Translated using Weblate (Polish)
Currently translated at 100.0% (913 of 913 strings)

Translated using Weblate (French)

Currently translated at 100.0% (908 of 908 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.4% (903 of 908 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (908 of 908 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (908 of 908 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (908 of 908 strings)

Added translation using Weblate (Ukrainian)

Translated using Weblate (Polish)

Currently translated at 100.0% (908 of 908 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Soderes Sanyi <kennex@protonmail.com>
Co-authored-by: Vincent <clawd31@yahoo.fr>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: russssl <deniskalicen@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-13 11:04:09 +01:00
jeffvli f9ce076a1a lint files 2025-12-13 02:04:00 -08:00
jeffvli a14e5f08ee allow user to unpin list sidebar 2025-12-13 02:03:04 -08:00
jeffvli ab1176d4f6 add improved play button group on list headers 2025-12-13 00:52:23 -08:00
jeffvli eb100351a6 add proper labels to ND tag filters 2025-12-13 00:20:43 -08:00
jeffvli a546a4d57b handle player stop on queue clear 2025-12-13 00:15:20 -08:00
jeffvli 1ac267fa99 fix context menu not triggering on sidebar playlist 2025-12-12 21:25:46 -08:00
jeffvli 2a36fa932c increase font weight of sidebar playlist name 2025-12-12 21:23:18 -08:00
jeffvli 8f1141b6e0 disable sidebar lyrics fetcher if panel is closed 2025-12-12 21:21:41 -08:00
Kendall Garner ed5d590a6b feat: sync play queue for navidrome/subsonic (#1335)
---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-12-12 21:05:00 -08:00
jeffvli 13afd3d9c4 fix window bar background color for light mode 2025-12-12 19:49:01 -08:00
jeffvli d821e0a1f8 make create playlist form implementation consistent 2025-12-12 19:32:19 -08:00
jeffvli f850c52f5d add new spinner icon 2025-12-12 19:32:19 -08:00
Damien Erambert 22dd20884d Light mode fixes (#1379)
* Fix color of text in text buttons in light mode

* fix border color of search input in light mode

* fix carousel text colors in light mode

* fix scroll shadows colors in light mode
2025-12-12 19:30:30 -08:00
jeffvli 578083d994 fix mpv autoNext and next song replacement behavior (part 2) 2025-12-12 18:44:14 -08:00
jeffvli 29a5fa3f74 fix mpv autoNext and next song replacement behavior 2025-12-12 18:25:06 -08:00
jeffvli 1bcc23862c fix authentication query for Subsonic/ND 2025-12-12 11:10:29 -08:00
jeffvli 4103ed7221 redesign sidebar playlist item 2025-12-12 01:08:03 -08:00
jeffvli ce6155fe47 more feature carousel optimizations
- decrease title size
- only show first artist
2025-12-12 00:54:29 -08:00
jeffvli e147a78ee0 replace Jellyfin raw streamUrl with /download endpoint 2025-12-12 00:43:39 -08:00
jeffvli 4b66c86fd6 prevent mpv from reinitializing on volume, speed, and transcoding 2025-12-11 21:39:49 -08:00
jeffvli aa435bbfc4 redesign feature carousel to be more compact 2025-12-11 21:25:35 -08:00
jeffvli a4dbeff5ea fix missing emitters from onPlayerPlay 2025-12-11 21:00:00 -08:00
jeffvli 61e70342a4 fix mpv player queue behavior to handle gapless playback 2025-12-11 20:36:47 -08:00
Hosted Weblate f7d488ba84 Translated using Weblate (German)
Currently translated at 91.4% (829 of 907 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Hungarian)

Currently translated at 97.3% (883 of 907 strings)

Translated using Weblate (French)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 82.6% (750 of 907 strings)

Translated using Weblate (Czech)

Currently translated at 98.5% (894 of 907 strings)

Translated using Weblate (German)

Currently translated at 90.2% (819 of 907 strings)

Translated using Weblate (German)

Currently translated at 86.7% (787 of 907 strings)

Translated using Weblate (Hungarian)

Currently translated at 95.3% (865 of 907 strings)

Translated using Weblate (French)

Currently translated at 98.2% (891 of 907 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 82.0% (744 of 907 strings)

Translated using Weblate (French)

Currently translated at 95.0% (862 of 907 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (907 of 907 strings)

Translated using Weblate (German)

Currently translated at 86.3% (783 of 907 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 80.2% (728 of 907 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.4% (902 of 907 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: Sebin Nyshkim <sebin.nyshkim@icloud.com>
Co-authored-by: Soderes Sanyi <kennex@protonmail.com>
Co-authored-by: Zarakkas <kaz@users.noreply.hosted.weblate.org>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-11 09:51:43 +01:00
jeffvli 01a95f5445 fix broken remote (#1344) 2025-12-11 00:51:32 -08:00
jeffvli bdce8ecafe add time validation to lyric seek (#1280) 2025-12-10 22:40:17 -08:00
lindenkron bb55fc2278 Add Lyrics button to right-controls. (#1363)
* Add Microphone icon to right-controls to show/hide lyrics.
2025-12-10 22:37:44 -08:00
jeffvli a778f4c715 add header to playlist page 2025-12-10 22:36:57 -08:00
jeffvli bea5bd7857 add activeRowId styles to song list table 2025-12-10 21:58:30 -08:00
jeffvli 10aec7bcac always set start song index to 0 when adding to queue in shuffle mode 2025-12-10 19:34:59 -08:00
jeffvli c1ea39aa14 normalize dates to UTC, remove year to date conversions 2025-12-10 17:40:32 -08:00
jeffvli 5da119e065 use absolute date for release date column (#1364) 2025-12-10 17:36:03 -08:00
jeffvli 27eebe474e fix username param on subsonic getUser (#1362) 2025-12-10 10:18:11 -08:00
jeffvli 16d656f010 force table displayType on folder list 2025-12-10 01:54:23 -08:00
Jeff eeb0a786fd potential fix for mpv clear (#1360) 2025-12-10 01:49:45 -08:00
jeffvli 32062d7c0f fix auto dj not triggering on single song queue (#1359) 2025-12-10 01:06:16 -08:00
jeffvli b627f4e489 revert mediaStop back to 0.x.x behavior 2025-12-10 00:48:02 -08:00
jeffvli 389dfd08f7 render login page on SERVER_LOCK (#1172) 2025-12-09 19:58:24 -08:00
jeffvli 8a681a7e95 fix missing server add form from server required (#1350) 2025-12-09 19:32:33 -08:00
jeffvli 6eba434c3e add new player handlers to command palette items (#1356) 2025-12-09 18:41:22 -08:00
jeffvli 816df56ef1 attempt to improve mpv exit handlers (#1348) 2025-12-09 18:07:54 -08:00
jeffvli a02fc28785 fix preserve pitch on player start, add to player config (#1349) 2025-12-09 17:57:56 -08:00
jeffvli 753f35f81b remove truncation from path column (#1351) 2025-12-09 17:38:16 -08:00
jeffvli fcfe39aa2b support alternate row colors on sidebar (#1354) 2025-12-09 17:32:29 -08:00
jeffvli d5799af44e remove drag bar from carousel - add vertical scroll 2025-12-09 00:09:03 -08:00
jeffvli 3d07290231 use album icon for unloaded image (#1136) 2025-12-08 22:31:30 -08:00
jeffvli a19a6815e9 remove unused refs from list/grid components 2025-12-08 22:00:34 -08:00
jeffvli 628b0184de fix web player crossfade transition state causing stutter on playerData change 2025-12-08 21:46:13 -08:00
jeffvli 38b06fdd06 fix table configuration on now playing route (#1346) 2025-12-08 20:04:26 -08:00
jeffvli 498a0f4b5d add constraints to volume updates by hotkey, throttle to 50ms (#1345) 2025-12-08 20:00:37 -08:00
jeffvli a96ea6c5ac remove unused filter button on genre list (#1340) 2025-12-08 19:56:19 -08:00
jeffvli b6ac954910 use correct list key for related songs on fullscreen player (#1343) 2025-12-08 19:53:48 -08:00
jeffvli 76b59921f1 fix descending song list id sort 2025-12-08 19:38:19 -08:00
jeffvli 507bf66f47 remove background from sidebar image 2025-12-08 19:26:58 -08:00
jeffvli d3191611c6 add user agent header to lrclib fetch 2025-12-08 09:41:23 -08:00
jeffvli 7f540472da use client-side shuffle for listquery random playback (#1247) 2025-12-07 21:24:17 -08:00
jeffvli cd2d8ae3c9 lint 2025-12-07 20:08:57 -08:00
Hosted Weblate 01a412efd0 Translated using Weblate (German)
Currently translated at 83.8% (752 of 897 strings)

Translated using Weblate (German)

Currently translated at 82.5% (741 of 898 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Zarakkas <kaz@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2025-12-08 03:57:23 +00:00
jeffvli 2929603565 check authentication for all servers on initialization and update permission roles 2025-12-08 03:57:23 +00:00
jeffvli e4b5158fe3 adjust some settings defaults 2025-12-07 19:57:10 -08:00
jeffvli 4f4300042b add bitDepth, sampleRate columns to table (#1205) 2025-12-07 19:41:03 -08:00
jeffvli bd8503b25d add client side sort to album song list 2025-12-07 19:15:34 -08:00
jeffvli 3c8054c93b Revert "split settings store to multiple localstorage keys"
This reverts commit 4862a65b21.
2025-12-07 18:28:17 -08:00
jeffvli 20aa65f16a restrict playlist actions by permission 2025-12-07 18:28:17 -08:00
jeffvli c82762a3fc check authentication for all servers on initialization and update permission roles 2025-12-07 18:28:12 -08:00
jeffvli 4ddada1fe3 add isAdmin to auth state 2025-12-07 17:21:46 -08:00
jeffvli 2f2dbbde3e fix play / add to playlist from playlist ctx menu 2025-12-07 16:48:47 -08:00
jeffvli adbcca00de fix sidebar playlist handlers (#1318) 2025-12-07 16:48:22 -08:00
jeffvli 65a7c3440b add player autodj (#7) 2025-12-07 15:04:39 -08:00
jeffvli 4862a65b21 split settings store to multiple localstorage keys 2025-12-07 14:00:00 -08:00
jeffvli 68fa8ac058 fix os form post typo 2025-12-07 12:58:32 -08:00
jeffvli d8b190c2b7 add skip to duplicates to playlist ctx menu - persist value 2025-12-07 12:39:28 -08:00
jeffvli 20a6fcbeb7 fix linting issues 2025-12-07 03:29:29 -08:00
dependabot[bot] 2fb40fd050 Bump js-yaml in the npm_and_yarn group across 1 directory (#1261)
Bumps the npm_and_yarn group with 1 update in the / directory: [js-yaml](https://github.com/nodeca/js-yaml).


Updates `js-yaml` from 4.1.0 to 4.1.1
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-07 03:29:01 -08:00
Kendall Garner 9634d7c50d feat(subsonic): support form post (#1333)
* feat(subsonic): support form post

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-12-07 03:28:49 -08:00
jeffvli 9dbee39d34 fix fetch confirmation to only show on list query 2025-12-07 03:14:38 -08:00
jeffvli 56098c6617 fix fullscreen player transition 2025-12-07 03:08:19 -08:00
jeffvli 9c81487f98 decrease z-index on LoadingOverlay to prevent conflicts 2025-12-07 02:28:18 -08:00
jeffvli 8841781e6b fix the loading state on listquery add to queue 2025-12-07 02:28:16 -08:00
Hosted Weblate ce7e5ad7ad Translated using Weblate (German)
Currently translated at 81.0% (728 of 898 strings)

Translated using Weblate (German)

Currently translated at 81.1% (723 of 891 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (885 of 885 strings)

Translated using Weblate (German)

Currently translated at 78.3% (693 of 885 strings)

Translated using Weblate (German)

Currently translated at 74.8% (662 of 885 strings)

Translated using Weblate (French)

Currently translated at 95.5% (846 of 885 strings)

Translated using Weblate (German)

Currently translated at 72.5% (642 of 885 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.4% (880 of 885 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (884 of 885 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (885 of 885 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Sebin Nyshkim <sebin.nyshkim@icloud.com>
Co-authored-by: Zarakkas <kaz@users.noreply.hosted.weblate.org>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-07 11:23:20 +01:00
jeffvli 512a769742 add log level setting 2025-12-07 00:50:09 -08:00
jeffvli 1507aff8e6 remove redundant discord rpc log 2025-12-07 00:43:50 -08:00
jeffvli a74ed3e4c7 add fallback to album artist if no artists in Jellyfin response (#1329) 2025-12-07 00:42:01 -08:00
jeffvli 1d6019c9d2 add go to page selector for list pagination 2025-12-07 00:36:58 -08:00
jeffvli 9385c25ea9 fix drag styles on playlist reorder 2025-12-07 00:20:27 -08:00
jeffvli e84d5eca8f fix missing drag "add" operation to playlist song items 2025-12-06 18:30:54 -08:00
jeffvli 84621474c0 use CommunityRating for jellyfin top songs (#1268) 2025-12-06 18:22:31 -08:00
jeffvli 42fca271ce remove stale start event on song change for jellyfin scrobble (#1332) 2025-12-06 18:12:15 -08:00
Kendall Garner 766756f64a add to playlist context menu for playlist songs 2025-12-06 17:55:12 -08:00
jeffvli 0a7029f7bc add support for full playlist re-order (#1327) 2025-12-06 17:41:13 -08:00
Kendall Garner 126b5ed67d notify when song added to playlist by context menu 2025-12-06 17:11:01 -08:00
jeffvli 4531f88e71 fix scroll persistence on folder list table 2025-12-05 19:03:12 -08:00
jeffvli dace0259aa move settings page back into modal 2025-12-05 18:54:36 -08:00
jeffvli 2d5671323f revert waveform playerbar changes 2025-12-05 11:31:02 -08:00
jeffvli 7db3eab38c improve scrobble conditions 2025-12-05 11:28:41 -08:00
jeffvli c7b0759ff0 fix discord rpc not triggering on song change 2025-12-05 10:24:38 -08:00
Kendall Garner 202c5da350 don't set dangerouslySetInnerHtml for spoiler component 2025-12-05 07:01:31 -08:00
jeffvli 8bb46d78aa fix settings reset to default functionality 2025-12-05 02:15:40 -08:00
jeffvli 64a67cf169 fix server lock route to login page 2025-12-05 02:15:10 -08:00
jeffvli 83886ed4ba add new spoiler component 2025-12-05 01:35:54 -08:00
jeffvli 40af5fb945 enable mediasession by default on web 2025-12-05 01:10:54 -08:00
jeffvli 3554572dc2 add interval update and update on discord initalization (#1317) 2025-12-05 01:08:47 -08:00
jeffvli 999976645d properly recalculate current index when adding to shuffled queue 2025-12-04 22:24:55 -08:00
jeffvli 458ede252a fix linting issues 2025-12-04 22:24:32 -08:00
jeffvli 1438f42616 decouple genre/artist album and song list page sorts 2025-12-04 22:11:12 -08:00
jeffvli b72af98a1b maintain defined order on reorder configurations (#1322) 2025-12-04 21:43:08 -08:00
jeffvli d463030271 improve transition on fullscreen player images 2025-12-04 21:33:10 -08:00
jeffvli de86f687ea fix shuffle order in usePlayerData 2025-12-04 21:33:10 -08:00
jeffvli 566d938b6c adjust jellyfin scrobble conditions, remove status change event (#1274) 2025-12-04 21:33:10 -08:00
jeffvli 7ac47377f1 maintain playlist order on header play (#1318) 2025-12-04 21:33:10 -08:00
Jeff c27a9bf95b Merge pull request #1321 from chenqimiao/feature/readme
Explain that SERVE_TYPE supports the parameter subsonic in readme
2025-12-04 21:21:30 -08:00
jeffvli 9004485aa9 fix music folder selection for jellyfin (#1319) 2025-12-04 18:45:58 -08:00
jeffvli 845b678e18 prevent infinite mutation retries (#1315) 2025-12-04 18:28:28 -08:00
jeffvli ab9da5207c fix album tags always showing compilation (#1313) 2025-12-04 18:23:44 -08:00
jeffvli e37c76301d fix playerbar waveform potentially disappearing 2025-12-04 18:19:06 -08:00
jeffvli 8c545f6d21 add missing play button onto title combined image 2025-12-04 18:03:26 -08:00
Qimiao Chen 286b6d1a11 Explain that SERVE_TYPE supports the parameter subsonic 2025-12-05 10:01:26 +08:00
jeffvli b66530f8fd fix table not re-rendering on column configuration change 2025-12-04 04:07:24 -08:00
jeffvli 7c5dc5bb39 attempt to optimize waveform fetch to avoid race condition for playback 2025-12-04 02:02:22 -08:00
Hosted Weblate 19a0529b42 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.5% (858 of 862 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.6% (855 of 858 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.6% (854 of 857 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 98.4% (844 of 857 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 96.3% (826 of 857 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 86.3% (738 of 855 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (French)

Currently translated at 98.7% (846 of 857 strings)

Translated using Weblate (French)

Currently translated at 88.6% (760 of 857 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Spanish)

Currently translated at 100.0% (857 of 857 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Dutch)

Currently translated at 56.3% (483 of 857 strings)

Translated using Weblate (Dutch)

Currently translated at 52.7% (451 of 855 strings)

Translated using Weblate (Dutch)

Currently translated at 51.6% (442 of 855 strings)

Translated using Weblate (Dutch)

Currently translated at 40.7% (348 of 855 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Polish)

Currently translated at 100.0% (855 of 855 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (855 of 855 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Hungarian)

Currently translated at 100.0% (855 of 855 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (855 of 855 strings)

Translated using Weblate (Hungarian)

Currently translated at 90.7% (776 of 855 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Czech)

Currently translated at 100.0% (857 of 857 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (855 of 855 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Japanese)

Currently translated at 87.9% (754 of 857 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (German)

Currently translated at 73.4% (628 of 855 strings)

Translated using Weblate (German)

Currently translated at 73.3% (627 of 855 strings)

Translated using Weblate (German)

Currently translated at 73.3% (627 of 855 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Naim V <naimverboom@gmail.com>
Co-authored-by: Sebin Nyshkim <sebin.nyshkim@icloud.com>
Co-authored-by: Soderes Sanyi <kennex@protonmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-04 09:48:11 +00:00
jeffvli 424c269c22 fix styling on release notes modal 2025-12-04 01:45:34 -08:00
jeffvli 376c09d1ea allow clear button to remove searched/override lyrics 2025-12-04 01:38:38 -08:00
jeffvli c14877916a add hotkey to album search input 2025-12-04 01:36:04 -08:00
jeffvli 4d626377ef fix mediasession controls 2025-12-04 01:31:57 -08:00
jeffvli 69fa5bc733 fix playlist refresh 2025-12-03 22:29:26 -08:00
jeffvli 20830cb979 fix playlist song list context menu showing remove item 2025-12-03 22:25:41 -08:00
jeffvli ccdd16292a add player filters to omit songs from queue based on criteria 2025-12-03 22:11:18 -08:00
jeffvli 5540ca4e32 improve handlers for artist / sidebar configuration 2025-12-03 20:51:10 -08:00
jeffvli a5372313c4 add some additional folder browsing qol
- automatically scroll to current folder
- fix tooltip offset on initial render
2025-12-03 20:39:26 -08:00
jeffvli 091625d7d9 decouple folder list sort from song list sort 2025-12-03 20:27:57 -08:00
jeffvli a27ddfe746 add genres to home route configuration 2025-12-03 20:22:49 -08:00
jeffvli 5ea7798c52 fix shuffle mode playback index (#1297) 2025-12-03 20:22:46 -08:00
jeffvli ee5d2b12c1 add setting to follow current song on playqueue 2025-12-03 20:11:38 -08:00
jeffvli 06e502c63d enable crossfade player for non-electron 2025-12-03 20:00:20 -08:00
jeffvli 92682c62dc fix featured genres refresh on query reset 2025-12-03 19:55:59 -08:00
jeffvli d8df70eddd fix error on album/albumartist header image (#1299) 2025-12-03 19:01:23 -08:00
jeffvli cb2581252b remove _custom query usage for playlists 2025-12-03 18:31:42 -08:00
jeffvli a47f94ebb2 add refresh button to album / artist carousels 2025-12-03 18:05:15 -08:00
jeffvli 9d498d4ca2 add default delay to tooltip group 2025-12-03 17:53:49 -08:00
jeffvli 85c0d8503b adjust grid carousel breakpoints 2025-12-03 17:48:58 -08:00
jeffvli d604074d82 remove maxWidth from now playing route 2025-12-03 17:48:46 -08:00
jeffvli d511b58c8f hide pagination controls on playqueue config 2025-12-03 16:54:40 -08:00
jeffvli 49ce670281 add network disclaimer for waveform playerbar 2025-12-03 16:25:37 -08:00
jeffvli 55ebc7d74a improve image column play handler to support long press 2025-12-03 16:25:28 -08:00
jeffvli a7e6a75c68 normalize tooltips 2025-12-03 16:00:41 -08:00
jeffvli c738725d94 remove duplicate divider from app menu 2025-12-03 15:14:24 -08:00
jeffvli b87d63ced9 add command palette to app menu 2025-12-03 14:55:22 -08:00
jeffvli 75ef5995ea use removeQueries instead of resetQueries on music folder change 2025-12-03 14:55:22 -08:00
jeffvli 16971aaa9c add manage servers item to app menu 2025-12-03 14:55:22 -08:00
jeffvli 0b5b554eec fix compact image sizing 2025-12-03 14:55:22 -08:00
jeffvli 917bf91583 add folder browsing support (#315) 2025-12-03 14:55:16 -08:00
jeffvli 355257104d reorganize external link settings 2025-12-02 20:25:42 -08:00
jeffvli 47d44851f0 fix tagList controller rename 2025-12-02 18:53:13 -08:00
jeffvli f84506ce01 use tags list for Navidrome genres to support counts 2025-12-02 18:38:08 -08:00
jeffvli 854a26e3f4 make page header padding consistent with filter bar 2025-12-02 18:38:08 -08:00
jeffvli ddb6447165 fix table image aspect ratio 2025-12-02 18:38:08 -08:00
jeffvli 4d2721db50 fix table scrollsync on column change 2025-12-02 18:38:02 -08:00
jeffvli d22b24d98f fix potential stale state on list config reorder, slight redesign 2025-12-02 17:40:00 -08:00
jeffvli 7701ea0a8c support multiple items in item details modal 2025-12-02 17:23:18 -08:00
jeffvli a35577444b add in-app release notes 2025-12-02 17:14:58 -08:00
jeffvli cab16b0893 add configuration for audio status fade 2025-12-02 16:59:36 -08:00
Kendall Garner bc5d0cf994 fix(player): restore preserving html audio pitch 2025-12-02 07:52:21 -08:00
Hosted Weblate f2b59d531b Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:12 +01:00
Hosted Weblate 9699092d9f Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:12 +01:00
Hosted Weblate 7d9cd39d85 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 85.3% (730 of 855 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: linger <linger0517@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-12-02 10:37:12 +01:00
Hosted Weblate bbd6457341 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:12 +01:00
Hosted Weblate 9f957c2197 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:12 +01:00
Hosted Weblate 248b71311d Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:12 +01:00
Hosted Weblate 578a373248 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate 59ae291e1f Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate 0472e6711b Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate d9c8e5ccba Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate 080258dc49 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate 7237b4d136 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate a58b3394e9 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate d5144d0dd4 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate 677c41efb9 Translated using Weblate (Hungarian)
Currently translated at 87.7% (749 of 854 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Hungarian)

Currently translated at 100.0% (756 of 756 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Soderes Sanyi <kennex@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate 765f96254e Translated using Weblate (Czech)
Currently translated at 91.4% (781 of 854 strings)

Translated using Weblate (Czech)

Currently translated at 87.9% (751 of 854 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Czech)

Currently translated at 100.0% (756 of 756 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate dd8bf8db35 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Catalan)

Currently translated at 100.0% (756 of 756 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate e0a12bc859 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Japanese)

Currently translated at 98.9% (748 of 756 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translation: feishin/Translation
2025-12-02 10:37:11 +01:00
Hosted Weblate 1d2eda4175 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:10 +01:00
Hosted Weblate e4b648a99c Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:10 +01:00
Hosted Weblate 533d22b050 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:10 +01:00
Hosted Weblate 2b9cb196d0 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:10 +01:00
Hosted Weblate 517dfcf2a7 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:10 +01:00
Hosted Weblate b715bd178f Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2025-12-02 10:37:10 +01:00
jeffvli 97af90c004 re-add play button to image column 2025-12-02 01:35:19 -08:00
jeffvli 8d53358d33 make query editor button easier to click 2025-12-02 01:35:18 -08:00
jeffvli 2c026837e8 add better handler for large fetch confirmation for songs 2025-12-02 01:35:18 -08:00
jeffvli 6d8947fe74 add double click play handler to song lists 2025-12-02 01:35:18 -08:00
jeffvli 65f24c2c03 more fixes to list filters 2025-12-02 01:35:18 -08:00
farfromrefuge 4889f2b51a fix: bring back linux deb (#1304)
* Restore deb package building for Linux with auto-update support

Co-authored-by: farfromrefug <655344+farfromrefug@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2025-12-02 01:33:45 -08:00
Jeff 2b2dd34c60 Merge pull request #1303 from Soderes/hu-fix
Update README.md
2025-12-02 01:31:57 -08:00
jeffvli 07523f82ce suspend infinite loader on fetch 2025-12-02 00:28:45 -08:00
jeffvli aff7a61bca fix list filters 2025-12-02 00:11:42 -08:00
Soderes 542dd573f2 Update README.md
Fix typos and grammar issues in README.md
2025-12-02 08:07:46 +01:00
jeffvli 4abfbd1973 fix missing sidebar active icon 2025-12-01 20:04:51 -08:00
jeffvli 93d4536ba6 improve favorite / rating display on item card 2025-12-01 20:04:40 -08:00
jeffvli 72e7006cc3 hide display type toggle if only one available 2025-12-01 19:01:31 -08:00
jeffvli 94ed91f95c update default grid item gap to sm 2025-12-01 18:36:39 -08:00
jeffvli baf40ba50e add display type toggle to list headers 2025-12-01 18:36:02 -08:00
jeffvli 51c546fa5d slight redesign to list config menu 2025-12-01 18:35:51 -08:00
jeffvli 84b464090c optimize list content pages with sidebar to prevent extra rerender on config change 2025-12-01 17:52:49 -08:00
jeffvli 7db0b59895 make modal overlay consistent 2025-12-01 17:52:23 -08:00
jeffvli 94b9a3a4dc replace genre with user rating for default album detail columns 2025-12-01 17:34:33 -08:00
jeffvli 1c5bbb8fa0 fix album list blank on first render 2025-12-01 17:27:25 -08:00
jeffvli 994d8bac71 fix list table autosize on row count change 2025-12-01 13:30:58 -08:00
Jeff bfac1524a8 Merge pull request #1288 from jeffvli/feat/new-lists
1.0.0
2025-11-30 19:36:44 -08:00
jeffvli 2ceca9c034 add cancellation to player status fade 2025-11-30 19:25:30 -08:00
jeffvli 02144db221 suppress error on invalid server in stream url 2025-11-30 19:22:14 -08:00
jeffvli 8d0eb55691 handle visualizer opacity when no lyrics 2025-11-30 18:53:33 -08:00
jeffvli 5442107405 set visualizer in sidebar initial true 2025-11-30 18:49:13 -08:00
jeffvli fe493d1dab increase initial right sidebar width 2025-11-30 18:48:49 -08:00
jeffvli 0afbfb12cd handle scroll reset on grid page change 2025-11-30 18:47:46 -08:00
jeffvli b5780094e7 update list defaults 2025-11-30 18:41:43 -08:00
jeffvli 0fd6032bfc add default server name to add server form 2025-11-30 18:31:03 -08:00
jeffvli 65c54655ff reset all stores, remove old ones 2025-11-30 18:30:57 -08:00
jeffvli 286651c1b3 remove settings from analytics 2025-11-30 18:19:00 -08:00
jeffvli c7bf0d8fb8 add visualizer to sidebar 2025-11-30 18:14:05 -08:00
jeffvli 0b8ae55150 persist lyrics offset per song 2025-11-30 17:55:12 -08:00
jeffvli b99bc62065 re-add lrclib as default lyric source 2025-11-30 17:54:53 -08:00
jeffvli 615280e01b reverse the lyrics offset behavior to standard convention 2025-11-30 17:47:19 -08:00
jeffvli 72ef6da243 allow timeout before sync lyrics scroll after manual scrolling 2025-11-30 17:39:32 -08:00
jeffvli 5cab727b2d properly persist searched lyrics to cache 2025-11-30 17:36:25 -08:00
jeffvli b9b39caf86 add play controls to expanded album list item 2025-11-30 17:33:49 -08:00
jeffvli 96acf759ff fix subsonic / jellyfin filters 2025-11-30 17:25:44 -08:00
jeffvli c5c2b24a9d fix song list filters 2025-11-30 15:58:49 -08:00
jeffvli 6d87da2474 fix album list filters 2025-11-30 15:32:18 -08:00
jeffvli d75d1687a4 fade out no lyrics message 2025-11-30 13:38:09 -08:00
jeffvli f425e6ba63 add component error boundary 2025-11-30 13:37:33 -08:00
jeffvli fd2023e9d6 properly handle list refetch on query change 2025-11-30 13:24:27 -08:00
jeffvli e8db28e112 redesign lyrics search form 2025-11-30 13:16:40 -08:00
jeffvli 78fcc5c1c7 add context menu to left controls 2025-11-30 13:16:40 -08:00
Kendall Garner 08e8c65a18 add action.downloadStarted key 2025-11-30 07:53:04 -08:00
Kendall Garner dd3d05c813 add web audio, replaygain, visualizer (#1289)
* add web audio, replaygain, visualizer

* remove volume multiplication in gain

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2025-11-30 03:25:12 -08:00
jeffvli 8777da9491 revert settings to route instead of modal 2025-11-30 01:15:11 -08:00
jeffvli cb3c0fe0d4 add favorites list 2025-11-30 01:12:29 -08:00
jeffvli 1c0cbafa3e lint 2025-11-29 22:42:26 -08:00
jeffvli c5112e5031 use consistent width on settings modal 2025-11-29 22:25:09 -08:00
jeffvli 196289edb3 handle rating in context menu 2025-11-29 22:22:57 -08:00
jeffvli aab19b289b reimplement playback hotkeys 2025-11-29 22:04:10 -08:00
jeffvli 801e2cdcf4 use % height for settings modal 2025-11-29 21:45:38 -08:00
jeffvli 0b70ed158b fix mpris 2025-11-29 21:35:09 -08:00
jeffvli de3c7de7e5 update get info modal design 2025-11-29 20:31:21 -08:00
jeffvli cba7cbfdfa add edit playlist to context menu 2025-11-29 20:18:55 -08:00
jeffvli f5ab1d8e8a hide grid from certain list configs 2025-11-29 20:16:41 -08:00
jeffvli 7744f58c8c more types fixes on playlist detail 2025-11-29 20:14:34 -08:00
jeffvli 981e250d8c make layout borders more pronunced 2025-11-29 20:14:13 -08:00
jeffvli 297db71850 fix types on playlist songs table 2025-11-29 20:09:22 -08:00
jeffvli 24846fbae4 refactor playlist route component organization 2025-11-29 20:05:08 -08:00
jeffvli ad198ea047 remove animations and various smart playlist adjustments 2025-11-29 19:55:22 -08:00
jeffvli 526ba338a8 remove shadow from drag preview 2025-11-29 19:53:19 -08:00
jeffvli cfb289f906 adjust item card for light theme 2025-11-29 19:48:37 -08:00
jeffvli 8d829b2886 reimplement top songs list 2025-11-29 19:33:42 -08:00
jeffvli bdc52ece9d more jellyfin api fixes 2025-11-29 19:33:42 -08:00
jeffvli 224fcf94b8 handle limit -1 for jellyfin genres 2025-11-29 19:33:42 -08:00
jeffvli 3f704f1f35 add 12 hour cache for list count queries 2025-11-29 19:33:42 -08:00
jeffvli 8611bb9755 fix subsonic / jellyfin issues 2025-11-29 19:33:42 -08:00
jeffvli 108ba53be2 lint all files 2025-11-29 19:33:42 -08:00
jeffvli 96e9d54f4e add sidebar panel lyrics 2025-11-29 19:33:41 -08:00
jeffvli 7f95c520b2 fix mobile playerbar layout to prevent overflow 2025-11-29 19:33:41 -08:00
jeffvli b097d67d71 properly handle switch between genre display states without filter clobber 2025-11-29 19:33:41 -08:00
jeffvli 3a5eb96410 adjust default table columns 2025-11-29 19:33:41 -08:00
jeffvli 576d14dca0 remove motion wrapper 2025-11-29 19:33:41 -08:00
jeffvli a6945bc1f3 add date picker operators to smart playlist 2025-11-29 19:33:41 -08:00
jeffvli 6094a520e2 support custom smart playlist tags 2025-11-29 19:33:41 -08:00
jeffvli d22fee887c add wrapper for mantine useForm 2025-11-29 19:33:41 -08:00
jeffvli 83bd83b629 revert track number to use 'track' value 2025-11-29 19:33:41 -08:00
jeffvli abd2f9485c update JsonPreview to use Code component 2025-11-29 19:33:41 -08:00
jeffvli f448572e0a adjust settings modal sizing 2025-11-29 19:33:41 -08:00
jeffvli 2fa6c9de94 support playlist sidebar drag to queue 2025-11-29 19:33:41 -08:00
jeffvli 5e12a666e3 optimize query builder 2025-11-29 19:33:41 -08:00
jeffvli bb1705a774 redesign smart playlist, add multisort 2025-11-29 19:33:41 -08:00
jeffvli 974e96c7b4 fix playlist count badge loader 2025-11-29 19:33:41 -08:00
jeffvli 4e3b4c0118 revert theme bg 2025-11-29 19:33:41 -08:00
jeffvli e69d0c8922 add popver playqueue 2025-11-29 19:33:41 -08:00
jeffvli 5e8d17f144 increase popover default padding 2025-11-29 19:33:41 -08:00
jeffvli 774495262e add infinite loader for feature carousel 2025-11-29 19:33:41 -08:00
jeffvli a708162b15 adjust feature carousel design 2025-11-29 19:33:41 -08:00
jeffvli 61bfca90d1 increase tooltip readability 2025-11-29 19:33:41 -08:00
jeffvli c4bf3da5d4 slightly increase default dark bg color 2025-11-29 19:33:41 -08:00
jeffvli 93ba99e36f redesign PlayButtonGroup to match card styles 2025-11-29 19:33:41 -08:00
jeffvli a99a02c94c adjust default modal styles 2025-11-29 19:33:41 -08:00
jeffvli 998eb02621 add album artist, year to album header 2025-11-29 19:33:40 -08:00
jeffvli a18d2ee305 update album artist page 2025-11-29 19:33:40 -08:00
jeffvli 663fdd426f fix missing label style on multiselect 2025-11-29 19:33:40 -08:00
jeffvli 72e2e6daca update fields and add multiselect to smart playlist sort 2025-11-29 19:33:40 -08:00
jeffvli 9b17d3513a handle context menu on playlist songs 2025-11-29 19:33:40 -08:00
jeffvli 06d0c715af reimplement smart playlists 2025-11-29 19:33:40 -08:00
jeffvli 9d3c44ef15 increase stack gap on home page 2025-11-29 19:33:40 -08:00
jeffvli 8f06b177b5 redesign featured genres 2025-11-29 19:33:40 -08:00
jeffvli 9e1cdcc93e remove max width from list pages 2025-11-29 19:33:40 -08:00
jeffvli 2101b2e1c7 fix sidebar image animate out 2025-11-29 19:33:40 -08:00
jeffvli c376f3add3 add localization to drag/ctx preview 2025-11-29 19:33:40 -08:00
jeffvli 503dfd6a55 use consistent sizing for drag preview 2025-11-29 19:33:40 -08:00
jeffvli 4fc036f4ea add context menu selection preview 2025-11-29 19:33:40 -08:00
jeffvli dbad1088ea make list drop position indicator more consistent 2025-11-29 19:33:40 -08:00
jeffvli b7c413c96a increase library headerbar title size 2025-11-29 19:33:40 -08:00
jeffvli 1c65ca4a5a add drag preview 2025-11-29 19:33:40 -08:00
jeffvli 5d0124369e fix internalState on expanded album item 2025-11-29 19:33:40 -08:00
jeffvli 3f8a3a5e03 fix override query behavior on list pages 2025-11-29 19:33:40 -08:00
jeffvli 60d8d18a0f add mediasession 2025-11-29 19:33:40 -08:00
jeffvli 212d9e9f55 add mpris 2025-11-29 19:33:40 -08:00
jeffvli f0c35be21f add logs to discord rpc events 2025-11-29 19:33:40 -08:00
jeffvli 2f32534cf9 add logs to scrobble events 2025-11-29 19:33:40 -08:00
jeffvli 7016446be7 add scrollbar to right-pinned table container if exists 2025-11-29 19:33:40 -08:00
jeffvli 0927ff0e5e temp 2025-11-29 19:33:40 -08:00
jeffvli 4ef2956eb1 add delete hotkey to playqueue 2025-11-29 19:33:40 -08:00
jeffvli a893b063de fix genre route link on album badges 2025-11-29 19:33:40 -08:00
jeffvli 7cc7086dbb add select all hotkey to lists 2025-11-29 19:33:40 -08:00
jeffvli 092a9c3f19 add initial playlist reimplementation 2025-11-29 19:33:40 -08:00
jeffvli ac5de29c71 reimplement artist discog / tracks routes 2025-11-29 19:33:39 -08:00
jeffvli 6b307b3bd4 properly handle adding list queries from song list to queue 2025-11-29 19:33:39 -08:00
jeffvli 9e0c4d4b2a add additional checks on wavesurfer to prevent playback 2025-11-29 19:33:39 -08:00
jeffvli d66b1c1bbb add error handler to web player 2025-11-29 19:33:39 -08:00
jeffvli 3a2c5f7b11 handle cleaner switch between mpv/web 2025-11-29 19:33:39 -08:00
jeffvli 411f661174 bump react-player to 2.16.0 2025-11-29 19:33:39 -08:00
jeffvli a238927749 refactor list internal state to target rerenders on change 2025-11-29 19:33:39 -08:00
jeffvli 10c9bec2cf disable fullscreen from settings modal 2025-11-29 19:33:39 -08:00
jeffvli ffa9d165f2 refactor shuffle all modal for styles and loading state 2025-11-29 19:33:39 -08:00
jeffvli 6a8e55ce15 refactor button to use default loader 2025-11-29 19:33:39 -08:00
jeffvli 2c9ea6d19c refactor play button for reusability 2025-11-29 19:33:39 -08:00
jeffvli 902ac91b95 add new spinner icon 2025-11-29 19:33:39 -08:00
jeffvli 60cdea6787 large performance refactor 2025-11-29 19:33:39 -08:00
jeffvli 948f428546 attempt to prevent thread blocking from fac 2025-11-29 19:33:39 -08:00
jeffvli 94a7829882 add debug logs for player actions 2025-11-29 19:33:39 -08:00
jeffvli 4b3fda18d4 update logger colors for readability 2025-11-29 19:33:39 -08:00
jeffvli 778d878349 add umami analytics integration 2025-11-29 19:33:39 -08:00
jeffvli c77d38fca0 fix player shuffle 2025-11-29 19:33:39 -08:00
jeffvli 042047d7c1 clean up player repeat behavior 2025-11-29 19:33:39 -08:00
jeffvli 6f132f745b fix useCurrentServerId hook to always return a string 2025-11-29 19:33:39 -08:00
jeffvli 2264fa0d29 extract play button from item card and add long press animation 2025-11-29 19:33:39 -08:00
jeffvli 8ad5e26c2f move remote settings to window tab 2025-11-29 19:33:39 -08:00
jeffvli 22fae938c4 refactor item grid sizer handling to prevent blanks on resize 2025-11-29 19:33:39 -08:00
jeffvli 359e442947 optimize excessive layout re-rendering due to react-router 2025-11-29 19:33:39 -08:00
jeffvli 0a6b9a1040 rename import/export string 2025-11-29 19:33:39 -08:00
jeffvli 8d72596a33 attempt to fix playqueue initial height issue 2025-11-29 19:33:39 -08:00
jeffvli e78a46ab24 optimize list refresh functions 2025-11-29 19:33:38 -08:00
jeffvli d3132ad570 reimplement genre detail route 2025-11-29 19:33:38 -08:00
jeffvli eba485034a fix align on certain table columns 2025-11-29 19:33:38 -08:00
jeffvli 1b8afe3134 add image unloader to sidebar image when no image available 2025-11-29 19:33:38 -08:00
jeffvli 04c2bec58f fix paginated loader query return value to be consistent with domain types 2025-11-29 19:33:38 -08:00
jeffvli 6dc110e776 remove unused font declaration 2025-11-29 19:33:38 -08:00
jeffvli a4f53e5273 add better type safety for favorite/rating update 2025-11-29 19:33:38 -08:00
jeffvli 5e5b4f1536 remove queue drawer hover button 2025-11-29 19:33:38 -08:00
jeffvli a2926ef47e reorganize and redesign settings 2025-11-29 19:33:38 -08:00
jeffvli 7cc5ccd2c5 fix item card control navigation again 2025-11-29 19:33:38 -08:00
Kendall Garner 80419a1edf Remove stream url, cleanup old audio player (#1269)
* Remove stream url, cleanup old audio player

* remove unused api in playerbar waveform

* make jellyfin transcoding work?
2025-11-29 19:33:38 -08:00
jeffvli db110733a4 add long press to card controls for shuffle 2025-11-29 19:33:38 -08:00
jeffvli 1763f666b5 add more shuffle play modes 2025-11-29 19:33:38 -08:00
jeffvli 16c703fe31 remove scrobble log 2025-11-29 19:33:38 -08:00
jeffvli bbcee3f461 fix album column styling to fit link to width of text 2025-11-29 19:33:38 -08:00
jeffvli 56162b650c handle title combined column on compact sizing 2025-11-29 19:33:38 -08:00
jeffvli af7e52295a reimplement player scrobble 2025-11-29 19:33:38 -08:00
jeffvli c23e459b89 move queue favorite event listener to an app global scope 2025-11-29 19:33:38 -08:00
jeffvli 70cffda3f9 update build again for sourcemap and minify 2025-11-29 19:33:38 -08:00
jeffvli 7c71f1058d null songCount and albumCount in genre type 2025-11-29 19:33:38 -08:00
jeffvli a32f76720a refactor app error boundaries 2025-11-29 19:33:38 -08:00
jeffvli 84419820b8 add optimistic update for favorite/ratings mutations 2025-11-29 19:33:38 -08:00
jeffvli 0bc3ea51ec update grid carousel breakpoints 2025-11-29 19:33:38 -08:00
jeffvli f3b7d776e8 add compact image column styling 2025-11-29 19:33:37 -08:00
jeffvli cfb1f63567 force aspect ratio on default Image 2025-11-29 19:33:37 -08:00
jeffvli 54a8c8c3a4 move settings page to modal instead of route 2025-11-29 19:33:37 -08:00
jeffvli 6d0f80f06a remove link from artist on feature carousel 2025-11-29 19:33:37 -08:00
jeffvli 4b2708e1e4 fix activeRowId styles for title columns 2025-11-29 19:33:37 -08:00
jeffvli 80b4730749 set favorite color to primary on header menu 2025-11-29 19:33:37 -08:00
jeffvli 00371ef09e set enableNavigation to true on ItemCard 2025-11-29 19:33:37 -08:00
jeffvli 646eb4a3b0 add double click play to album detail
- add mediaPlayByIndex
- add index property to item list controls args
- add overrides to item list controls
2025-11-29 19:33:37 -08:00
jeffvli 0aee428aaf remove right sidebar animation 2025-11-29 19:33:37 -08:00
jeffvli 6a003c9035 remove select from grid carousel titles 2025-11-29 19:33:37 -08:00
jeffvli 7fd084bb0c remove top/bottom padding from feature carousel 2025-11-29 19:33:37 -08:00
jeffvli 1747395b3e add feature genres component to home route 2025-11-29 19:33:37 -08:00
jeffvli b24faa1e08 update feature carousel animation 2025-11-29 19:33:37 -08:00
jeffvli 0a25df39ca re-add menu button to sidebar 2025-11-29 19:33:37 -08:00
jeffvli c0f18d7a10 add new transitions to popover/dropdown 2025-11-29 19:33:37 -08:00
jeffvli 8225803ec0 add minification to renderer build 2025-11-29 19:33:37 -08:00
jeffvli 42e90734b2 random cleanup 2025-11-29 19:33:37 -08:00
jeffvli 06481118ad add background back to home route pageheader 2025-11-29 19:33:37 -08:00
jeffvli 875e178c0b move player back above router 2025-11-29 19:33:37 -08:00
jeffvli c5c3c596a0 wrap all page routes in LibraryContainer 2025-11-29 19:33:37 -08:00
jeffvli a5fa5727d3 increase default content max-width to 1800px 2025-11-29 19:33:37 -08:00
jeffvli 59cdc66355 remove default bg from PageHeader 2025-11-29 19:33:37 -08:00
jeffvli 73551847fb prevent item card from using default rows if none specified 2025-11-29 19:33:37 -08:00
jeffvli 2269eee8cc adjust default title styling on grid carousel 2025-11-29 19:33:37 -08:00
jeffvli 958ded6988 add more breakpoints to carousel 2025-11-29 19:33:37 -08:00
jeffvli 2b70adc1f6 move container max-width configuration to theme 2025-11-29 19:33:37 -08:00
jeffvli 6a0b36cfa6 redesign feature carousel 2025-11-29 19:33:37 -08:00
jeffvli e80fc1a513 remove transition on page header visibility 2025-11-29 19:33:37 -08:00
jeffvli 19a51d82be fix unneccesary navigation on grid card control click 2025-11-29 19:33:37 -08:00
jeffvli 9801337c61 add primary color highlight to sidebar nav 2025-11-29 19:33:36 -08:00
jeffvli 6978516f79 remove stroke from item card svg 2025-11-29 19:33:36 -08:00
jeffvli ee4a1f762e Revert "use new favorite color for icons"
This reverts commit 23c81d3bdc.
2025-11-29 19:33:36 -08:00
jeffvli ab49735268 adjust sidebar styles 2025-11-29 19:33:36 -08:00
jeffvli 1c5212d756 update page header render to use css instead of state 2025-11-29 19:33:36 -08:00
jeffvli b159dd4452 remove indeterminate state from album disc groups 2025-11-29 19:33:36 -08:00
jeffvli e137e727f6 remove calculated width from group row
- prevents overflow when pinned right columns
2025-11-29 19:33:36 -08:00
jeffvli 606aaa0d56 handle more rating/favorite mutation cases 2025-11-29 19:33:36 -08:00
jeffvli ca78149ba3 move player context and audioplayers inside of router 2025-11-29 19:33:36 -08:00
jeffvli 70a6ca5d77 use new favorite color for icons 2025-11-29 19:33:36 -08:00
jeffvli d83d1f3e5a add album column to table 2025-11-29 19:33:36 -08:00
jeffvli ae954b00cb add custom library header title sizer 2025-11-29 19:33:36 -08:00
jeffvli d3634d2c8a remove auto-text-size package 2025-11-29 19:33:36 -08:00
jeffvli 41a394367b add ignored colors to both hook and function 2025-11-29 19:33:36 -08:00
jeffvli 676f963e19 fix favorite/rating handlers on detail page 2025-11-29 19:33:36 -08:00
jeffvli b6e4302087 fix detail query keys with no query provided 2025-11-29 19:33:36 -08:00
jeffvli 75bf33fbba add favorite icon color 2025-11-29 19:33:36 -08:00
jeffvli c76ac7b249 adjust library header title sizing 2025-11-29 19:33:36 -08:00
jeffvli 57779e960b fix grid position of album content 2025-11-29 19:33:36 -08:00
jeffvli da863956b3 adjust various font sizes, weights around the app 2025-11-29 19:33:36 -08:00
jeffvli d6a40a7bc9 increase md, sm, xs font sizes 2025-11-29 19:33:36 -08:00
jeffvli 233c35647d remove most built-in fonts, adjust NotoSans weight 2025-11-29 19:33:36 -08:00
jeffvli 43eb6607ba fix padding on rating component 2025-11-29 19:33:36 -08:00
jeffvli 3212a35efb add LibraryContainer for max-width and background overlay 2025-11-29 19:33:36 -08:00
jeffvli c4f94495a8 support scroll sync on sticky table header and groups 2025-11-29 19:33:36 -08:00
jeffvli 948fc40b3e add motion animation on list to handle scrollbar sizing shift 2025-11-29 19:33:36 -08:00
jeffvli 427cfe0796 move suspense wrapper on carousels in album detail 2025-11-29 19:33:36 -08:00
jeffvli 4b135d7586 decrease react-query gcTime to match staleTime 2025-11-29 19:33:36 -08:00
jeffvli f86b00eced optimize player state for large queues 2025-11-29 19:33:36 -08:00
jeffvli 7fb0dffc40 redesign album detail page 2025-11-29 19:33:35 -08:00
jeffvli da82581eb0 allow autoheight of library header 2025-11-29 19:33:35 -08:00
jeffvli ece82d813c pass state from list navigation 2025-11-29 19:33:35 -08:00
jeffvli eb8dcfa053 fix expanded album title color again 2025-11-29 19:33:35 -08:00
jeffvli 82e1ce4d7a handle conditional item card expansion 2025-11-29 19:33:35 -08:00
jeffvli c25c339feb make item card navigation conditional on list state 2025-11-29 19:33:35 -08:00
jeffvli 1a4c909cc3 add favorite badge to card 2025-11-29 19:33:35 -08:00
jeffvli ff776293a6 add item card navigation 2025-11-29 19:33:35 -08:00
jeffvli 8ac0a27f33 fix drag to collapse sidebar 2025-11-29 19:33:35 -08:00
jeffvli f2680bb1de fix title alignment on mobile player 2025-11-29 19:33:35 -08:00
jeffvli bbaf305129 fix title color on expanded album list 2025-11-29 19:33:35 -08:00
jeffvli c21e2f4a1e optimize library header bar render 2025-11-29 19:33:35 -08:00
jeffvli c763824803 add basic mobile responsive layout 2025-11-29 19:33:35 -08:00
jeffvli 485fe8085c handle manual grid rows on paginated lists 2025-11-29 19:33:35 -08:00
jeffvli c691c349dd handle table row index values on paginated lists 2025-11-29 19:33:35 -08:00
jeffvli 0dff13c43f crossfade player enhancements, reorganize settings 2025-11-29 19:33:35 -08:00
jeffvli 725e44f048 adjust genre display and gap in header 2025-11-29 19:33:35 -08:00
jeffvli 12e916fd0d add PillLink component 2025-11-29 19:33:35 -08:00
jeffvli 05da8c0456 adjust rating component to match theme sizes 2025-11-29 19:33:35 -08:00
jeffvli 1735b64d76 move genre buttons to album detail header 2025-11-29 19:33:35 -08:00
jeffvli 1785e5c3a6 adjust library header metadata alignment 2025-11-29 19:33:35 -08:00
jeffvli ab5eb5c34c updating rating button styles to more closely resemble icons 2025-11-29 19:33:35 -08:00
jeffvli 94f15d0f4f add search input to album detail table 2025-11-29 19:33:35 -08:00
jeffvli 4fc346ac90 add fuse search utils 2025-11-29 19:33:35 -08:00
jeffvli ec135e30ed readd base mantine css import 2025-11-29 19:33:35 -08:00
jeffvli dff3d0b04c add play handlers to all remaining library headers 2025-11-29 19:33:34 -08:00
jeffvli aba8896ecf reimplement fullscreen player 2025-11-29 19:33:34 -08:00
jeffvli a386a1baad fix missing container on image without src 2025-11-29 19:33:34 -08:00
jeffvli cf50132870 improve responsive styling on library header 2025-11-29 19:33:34 -08:00
jeffvli 62ace421e6 fix image component height 2025-11-29 19:33:34 -08:00
jeffvli dde2e4e780 match drag behavior on waveform playerbar to original 2025-11-29 19:33:34 -08:00
jeffvli 6c785c7ea2 optimize playerbar slider component 2025-11-29 19:33:34 -08:00
jeffvli d977407766 cleanup small issues 2025-11-29 19:33:34 -08:00
jeffvli 71bea66ab7 add play buttons for each list page header 2025-11-29 19:33:34 -08:00
jeffvli bc13c7b176 add new play behavior to libraryheader play button 2025-11-29 19:33:34 -08:00
jeffvli 9f5ec9113c set confirm modal to focus confirm button 2025-11-29 19:33:34 -08:00
jeffvli 00565cccb9 add option to hide fetch confirmation 2025-11-29 19:33:34 -08:00
jeffvli 8e1cdac3a2 optimize playqueue performance for active song styles 2025-11-29 19:33:34 -08:00
jeffvli 46c0a309da add list query fetcher 2025-11-29 19:33:34 -08:00
jeffvli 70242c4044 add login page for locked server 2025-11-29 19:33:34 -08:00
jeffvli 92d4681a23 fix unauthenticated flow 2025-11-29 19:33:34 -08:00
jeffvli 781582c043 fix queue add above current index in priority queue again 2025-11-29 19:33:34 -08:00
jeffvli e986557d87 replace remaining legacy playqueue add functions 2025-11-29 19:33:34 -08:00
jeffvli ef78196d1e update import order of overlayscrollbars styles 2025-11-29 19:33:34 -08:00
jeffvli d8e6aec93d add missing combox style import 2025-11-29 19:33:34 -08:00
jeffvli 1acde80d61 clean up unused files 2025-11-29 19:33:34 -08:00
jeffvli 808c0167f1 use new icon for player config button 2025-11-29 19:33:34 -08:00
jeffvli 69f7f5c236 handle favorite/rating events for all tables 2025-11-29 19:33:34 -08:00
jeffvli 63e6df0481 add gcTime to rq mutation 2025-11-29 19:33:34 -08:00
jeffvli ea95a7bbd1 remove expansion from song table 2025-11-29 19:33:34 -08:00
jeffvli c77ba121a6 optimize various components 2025-11-29 19:33:34 -08:00
jeffvli fe60d2e26f add more aggressive react-query garbage collection 2025-11-29 19:33:34 -08:00
jeffvli dfb01ce165 show disabled slider when no waveform available 2025-11-29 19:33:33 -08:00
jeffvli e3402a1e44 bundle size optimizations 2025-11-29 19:33:33 -08:00
jeffvli e45c126a3f fix lyrics components 2025-11-29 19:33:33 -08:00
jeffvli 7b9007c699 add waveform playerbar slider 2025-11-29 19:33:33 -08:00
jeffvli 142a6d6512 add default playaction to play context menu click 2025-11-29 19:33:33 -08:00
jeffvli 18a7875504 fix priority queue reorder above current song 2025-11-29 19:33:33 -08:00
jeffvli f3bb4187d7 wrap all instances of mantine hooks used in renderer 2025-11-29 19:33:33 -08:00
jeffvli d349cc3e8d remove automatic import for @mantine/hooks 2025-11-29 19:33:33 -08:00
jeffvli f6ad67693e remove user select from server selector 2025-11-29 19:33:33 -08:00
jeffvli 43d409b0d7 remove wrong styles from group rows 2025-11-29 19:33:33 -08:00
jeffvli 09a9498d0d refactor playqueue with css modules 2025-11-29 19:33:33 -08:00
jeffvli 05deafdffb disable bugged react-hooks rules 2025-11-29 19:33:33 -08:00
jeffvli bd5f2b8f68 fix priority queue reordering index recalculation 2025-11-29 19:33:33 -08:00
jeffvli fd85f1f51a handle table row indexing with group rows 2025-11-29 19:33:33 -08:00
jeffvli 8433ce7f3e handle priority queue on playqueue table 2025-11-29 19:33:33 -08:00
jeffvli 94c128ea3d handle row groups with pinned table columns 2025-11-29 19:33:33 -08:00
jeffvli a4a0a1d227 force row height on group rows 2025-11-29 19:33:33 -08:00
jeffvli 47e47e3cc3 fix appmenu keys again 2025-11-29 19:33:33 -08:00
jeffvli eb1443a45b handle non-list items contextmenu in controls 2025-11-29 19:33:33 -08:00
jeffvli 5892d62391 add server selector to layout animation 2025-11-29 19:33:33 -08:00
jeffvli 9113756923 add new player config popover 2025-11-29 19:33:33 -08:00
jeffvli 60c7a4a9a1 use alternate bg for right sidebar 2025-11-29 19:33:33 -08:00
jeffvli 79af774569 adjust default theme colors 2025-11-29 19:33:33 -08:00
jeffvli 001ad7490c fix missing AnimatePresence on ItemCard 2025-11-29 19:33:33 -08:00
jeffvli c6ab0e7b8a fix appmenu keys 2025-11-29 19:33:33 -08:00
jeffvli 1b0ea06c6b rework root error boundary 2025-11-29 19:33:32 -08:00
jeffvli a92a829ca7 add global music folder selector 2025-11-29 19:33:32 -08:00
jeffvli 199a67fdf3 add error boundary to the app root 2025-11-29 19:33:32 -08:00
jeffvli 4451389b6a move player timestamp to separate store
- for performance related issue
2025-11-29 19:33:32 -08:00
jeffvli 243d29f7a7 remove throttle from main layout resize 2025-11-29 19:33:32 -08:00
jeffvli 0fd55a3f7c downgrade typescript version 2025-11-29 19:33:32 -08:00
jeffvli a78d917fd2 move timestamp update to separate effect 2025-11-29 19:33:32 -08:00
jeffvli 6842da1d68 fix scrollbar z-index 2025-11-29 19:33:32 -08:00
jeffvli 21081edfa3 hide sticky table group after scrolling past 2025-11-29 19:33:32 -08:00
jeffvli 2bdb5a52c4 fix various issues on home page 2025-11-29 19:33:32 -08:00
jeffvli e0b326c565 fix type 2025-11-29 19:33:32 -08:00
jeffvli 9490bf29cc re-add react-window v1 types 2025-11-29 19:33:32 -08:00
jeffvli 30377ab84e adjust column picker again 2025-11-29 19:33:32 -08:00
jeffvli 99dea8891e allow auto height on grid carousel 2025-11-29 19:33:32 -08:00
jeffvli 820a4efc76 add modularity to the ListConfigMenu 2025-11-29 19:33:32 -08:00
jeffvli 2f6ef7906f handle song selection in context menu play action 2025-11-29 19:33:32 -08:00
jeffvli dc15ede3dc refactor table column picker util to reset pinned/align to default values 2025-11-29 19:33:32 -08:00
jeffvli f52bcd2415 add sticky disc group rows for album detail 2025-11-29 19:33:32 -08:00
jeffvli f366b50550 add new table to album detail 2025-11-29 19:33:32 -08:00
jeffvli 31d9ab048d fix container ref instances 2025-11-29 19:33:32 -08:00
jeffvli 4ba7306855 migrate contextModal props 2025-11-29 19:32:26 -08:00
jeffvli 3adfb3711f revert original react-window package back to v1 2025-11-29 19:32:26 -08:00
jeffvli 4e9a1839eb update and cleanup packages 2025-11-29 19:32:25 -08:00
jeffvli 0de8035ca9 remove ag-grid 2025-11-29 19:32:25 -08:00
jeffvli b5eadb64a1 various cleanup 2025-11-29 19:32:25 -08:00
jeffvli f2b629fe6d use default cursor on list hover 2025-11-29 19:32:25 -08:00
jeffvli 2fc14ecd0e add new grid carousels 2025-11-29 19:32:25 -08:00
jeffvli 60cc564743 refactor double click handler to add quicker single click 2025-11-29 19:32:24 -08:00
jeffvli 81d3d2e620 fix Song domain type year value 2025-11-29 19:32:24 -08:00
jeffvli 48feb9f656 reimplement search page 2025-11-29 19:32:24 -08:00
jeffvli e246e4c0b7 adjust searchInput to match button width 2025-11-29 19:32:24 -08:00
jeffvli 2c9edc47e1 decrease context menu width 2025-11-29 19:32:24 -08:00
jeffvli 00a012df78 add overrideQuery to all list views 2025-11-29 19:32:24 -08:00
jeffvli 6d50454e72 reimplement now playing route 2025-11-29 19:32:24 -08:00
jeffvli 8eb90ebf06 add new context menu implementation 2025-11-29 19:32:24 -08:00
jeffvli ec0590c79a rename player context hook 2025-11-29 19:32:23 -08:00
jeffvli 9c2ed36b5c add new playlist list 2025-11-29 19:32:23 -08:00
jeffvli f48c26915f optimize sidebar resizing for performance 2025-11-29 19:32:23 -08:00
jeffvli 1ab9012446 fix mpv queue initialization running multiple times 2025-11-29 19:32:23 -08:00
jeffvli d25b62f7d9 set queue on mpv initialization if available 2025-11-29 19:32:23 -08:00
jeffvli cccb5d7785 add drag to add to playlist 2025-11-29 19:32:23 -08:00
jeffvli 06d9245778 add new play controls to sidebar playlist list 2025-11-29 19:32:23 -08:00
jeffvli 3d4f35e881 re-implement shuffle play type 2025-11-29 19:32:23 -08:00
jeffvli b6c3200419 implement item list grid card row customization 2025-11-29 19:32:23 -08:00
jeffvli 56d0669510 add grid card row config 2025-11-29 19:32:22 -08:00
jeffvli 05c4fd37cc fix list paginated loader hook 2025-11-29 19:32:22 -08:00
jeffvli af00110973 enforce data order in list selection 2025-11-29 19:32:22 -08:00
jeffvli da691fa978 fix some table drop conditions 2025-11-29 19:32:22 -08:00
jeffvli 3f4148258f add shadow to table header 2025-11-29 19:32:22 -08:00
jeffvli a03ea3b4d8 add draggable table column reorder 2025-11-29 19:32:22 -08:00
jeffvli 4c92da9ab5 add draggable table column resize 2025-11-29 19:32:22 -08:00
jeffvli 31a2fdbcb6 update drag handle styles on table config 2025-11-29 19:32:22 -08:00
jeffvli 7921f1e548 improve visiblity of close button on expanded item 2025-11-29 19:32:21 -08:00
jeffvli 8ac3f2a6f7 use throttle for item loader, simplify implementation 2025-11-29 19:32:21 -08:00
jeffvli 2da6894ee5 add dynamic card selection style based on gap 2025-11-29 19:32:21 -08:00
jeffvli 9265bc86bc set playqueue scroll to center 2025-11-29 19:32:21 -08:00
jeffvli c5cd71c8c3 add scrollToIndex alignment to lists 2025-11-29 19:32:21 -08:00
jeffvli 3ecf59c32a auto follow current song in queue 2025-11-29 19:32:21 -08:00
jeffvli da2109b310 refactor grid list to support index offset 2025-11-29 19:32:21 -08:00
jeffvli 6d6caa0406 optimize table config 2025-11-29 19:32:21 -08:00
jeffvli e82c1d3a20 add drag/drop to column reordering 2025-11-29 19:32:20 -08:00
jeffvli 500947eb1f refactor ListConfigMenu as modal 2025-11-29 19:32:20 -08:00
jeffvli fe51b671c7 refactor Modal component styles to match provider 2025-11-29 19:32:20 -08:00
jeffvli 65b72298df add double click navigation to lists 2025-11-29 19:32:20 -08:00
jeffvli ba66b246d2 fix overflow on table header 2025-11-29 19:32:20 -08:00
jeffvli 0c6a993f29 refactor filter persistence to one key 2025-11-29 19:32:20 -08:00
jeffvli 8a8de4a1b6 add new artist list 2025-11-29 19:32:20 -08:00
jeffvli 164332d752 refactor domain types to rename itemType 2025-11-29 19:32:20 -08:00
jeffvli 173e00af3d refactor Genre domain type to include serverType and serverId 2025-11-29 19:32:20 -08:00
jeffvli 4f1d39d3c4 add new genre list 2025-11-29 19:32:20 -08:00
jeffvli 72f20ddd11 add new album artist list 2025-11-29 19:32:19 -08:00
jeffvli 0ba481a7a6 fix double click handler on ItemCard 2025-11-29 19:32:19 -08:00
jeffvli 31b64b317b add item selection to double click handler 2025-11-29 19:32:19 -08:00
jeffvli 302107ed64 slightly increase double click latency 2025-11-29 19:32:19 -08:00
jeffvli ef7d3f1c52 remove non-functional playqueue sizing workaround 2025-11-29 19:32:19 -08:00
jeffvli dffd3efd36 implement queue double click handler 2025-11-29 19:32:19 -08:00
jeffvli a75f64d204 implement double click handler on default controls 2025-11-29 19:32:19 -08:00
jeffvli c5e11cca58 debounce playqueue search 2025-11-29 19:32:19 -08:00
jeffvli 744780861f reimplement playqueue list controls 2025-11-29 19:32:19 -08:00
jeffvli 498abf3c3d update player shuffleAll to keep current song index in place 2025-11-29 19:32:18 -08:00
jeffvli 5e45897b8e update search input styling 2025-11-29 19:32:18 -08:00
jeffvli c7dc2d4969 adjust column autoFit to round to integer values 2025-11-29 19:32:18 -08:00
jeffvli 8c163be070 remove table borders from last row / column 2025-11-29 19:32:18 -08:00
jeffvli 75de4bd305 add table header icons for discNumber and trackNumber, refactor sizing 2025-11-29 19:32:18 -08:00
jeffvli b8fc0fb668 enforce fetch order for addToQueue 2025-11-29 19:32:18 -08:00
jeffvli 2c7b134931 add player store v2 migration 2025-11-29 19:32:18 -08:00
jeffvli 1eb60f93e6 update various player actions to reset timestamp to 0 2025-11-29 19:32:18 -08:00
jeffvli d2e6658c36 add current song styles to rowIndex and title columns 2025-11-29 19:32:18 -08:00
jeffvli a24b870faa add close button to expanded list item 2025-11-29 19:32:18 -08:00
jeffvli af480e8283 remove logs on idb storage 2025-11-29 19:32:17 -08:00
jeffvli a786e4f40c add selection and drag from expanded album 2025-11-29 19:32:17 -08:00
jeffvli f6b65fe0fe add uniqueId rowId for playqueue 2025-11-29 19:32:17 -08:00
jeffvli 1b80d7fd27 reduce default scrollbar size 2025-11-29 19:32:17 -08:00
jeffvli 7d5be53c4d link savePlayQueue setting to player store persist 2025-11-29 19:32:17 -08:00
jeffvli a566509f5b remove preexisting save/restore playqueue handlers 2025-11-29 19:32:17 -08:00
jeffvli 528205f113 add idb storage for player store 2025-11-29 19:32:17 -08:00
jeffvli 9fda3cd49a add indexeddb storage for zustand 2025-11-29 19:32:17 -08:00
jeffvli a484628e13 add custom rowId support to lists 2025-11-29 19:32:17 -08:00
jeffvli 595d92efd9 fix onExpand control on row index column 2025-11-29 19:32:17 -08:00
jeffvli f06dbdec56 remove deprected row click handler 2025-11-29 19:32:16 -08:00
jeffvli 9f5f77cbf9 adjust drag over styles 2025-11-29 19:32:16 -08:00
jeffvli dcc1ef311c remove defer from list scrollbars 2025-11-29 19:32:16 -08:00
jeffvli f2d655d25a cleanup log 2025-11-29 19:32:16 -08:00
jeffvli 8d1e78485c add enum for table item size 2025-11-29 19:32:16 -08:00
jeffvli 10085f9bd9 fix table column css ordering 2025-11-29 19:32:16 -08:00
jeffvli 219c650585 fix playqueue flex sizing 2025-11-29 19:32:16 -08:00
jeffvli ee1803448c add autoFitColumns config to tables 2025-11-29 19:32:16 -08:00
jeffvli dee73d5632 set sane default for sideQueue column config 2025-11-29 19:32:16 -08:00
jeffvli 6bde14be49 improve pickTableColumns util to handle more properties 2025-11-29 19:32:16 -08:00
jeffvli 27e84ce518 add autoFitColumns for item table 2025-11-29 19:32:15 -08:00
jeffvli 9dbe3d8d0f fix types 2025-11-29 19:32:15 -08:00
jeffvli e6dd302be2 add missing table configs 2025-11-29 19:32:15 -08:00
jeffvli 57dbe85ec7 fix title column to not take up full width 2025-11-29 19:32:15 -08:00
jeffvli 7a36360c4a add padding to item grid to account for scrollbar 2025-11-29 19:32:15 -08:00
jeffvli a2eb0bf8d3 add dropzone to empty play queue 2025-11-29 19:32:15 -08:00
jeffvli 4360906883 refactor item grid to resolve overlayscrollbars 2025-11-29 19:32:15 -08:00
jeffvli 6541a6d583 fix conflicting style on drag over and selection 2025-11-29 19:32:15 -08:00
jeffvli 0baae9cf5a add drop operations for all item types 2025-11-29 19:32:15 -08:00
jeffvli 1a16b74f98 add loading overlay to playqueue on fetching 2025-11-29 19:32:15 -08:00
jeffvli 17c4d3e5fb add LoadingOverlay component 2025-11-29 19:32:14 -08:00
jeffvli fda7165580 bump react-window-v2 to latest 2025-11-29 19:32:14 -08:00
jeffvli 489daa6353 add drag/drop from lists into queue 2025-11-29 19:32:14 -08:00
jeffvli d7e2ec0860 add drag state to item table 2025-11-29 19:32:14 -08:00
jeffvli ad409fecfa add drag state to item grid 2025-11-29 19:32:14 -08:00
jeffvli 7d4a17e89c add keyboard navigation and selection to lists 2025-11-29 19:32:14 -08:00
jeffvli a87d5ef8d8 implement list multiselection 2025-11-29 19:32:14 -08:00
jeffvli 7a4326f98d initial implementation of play queue for new list 2025-11-29 19:32:14 -08:00
jeffvli 3c996407d5 normalize controls onto lists 2025-11-29 19:32:14 -08:00
jeffvli fb75717ae0 update rating / favorite columns 2025-11-29 19:32:13 -08:00
jeffvli 9fafb4f397 add rating / favorite to player context and events 2025-11-29 19:32:13 -08:00
jeffvli b4558491e7 add queue fetcher cancellation and loading state 2025-11-29 19:32:13 -08:00
jeffvli 0cfa07bfbc fix merge 2025-11-29 19:32:13 -08:00
jeffvli cb232ab5af fix filters 2025-11-29 19:32:13 -08:00
jeffvli 71bd124088 fix image column container 2025-11-29 19:32:13 -08:00
jeffvli c615f63673 disable all skeleton animations 2025-11-29 19:32:13 -08:00
jeffvli c644224072 add dynamic cell skeleton sizing 2025-11-29 19:32:13 -08:00
jeffvli 0e9f9f2fe1 debounce table loader 2025-11-29 19:32:13 -08:00
jeffvli 5f0309d12b prevent render null items in grid 2025-11-29 19:32:12 -08:00
jeffvli 1368c2bd50 debounce grid loader 2025-11-29 19:32:12 -08:00
jeffvli 64e84b092f adjust infinite loader fetcher range thresholds 2025-11-29 19:32:12 -08:00
jeffvli e5cafab9c2 update lockfile 2025-11-29 19:32:12 -08:00
jeffvli 0b56524b7d migrate item grid back to react-window v1 2025-11-29 19:32:12 -08:00
jeffvli 62127df4f4 more grid list optimizations 2025-11-29 19:32:12 -08:00
jeffvli 62b0ea6616 memoize and reset scrollEnd handler on grid list 2025-11-29 19:32:12 -08:00
jeffvli 34dc917271 reset scroll position on list page change 2025-11-29 19:32:12 -08:00
jeffvli dae04e2aeb add table item selection 2025-11-29 19:32:12 -08:00
jeffvli 17f5c5cd99 revert to HashRouter, add nuqs hash adapter 2025-11-29 19:32:11 -08:00
jeffvli bf75dec0ce migrate to react-router v7 and BrowserRouter 2025-11-29 19:32:11 -08:00
jeffvli 2504c0ec10 fix list loader query keys 2025-11-29 19:32:11 -08:00
jeffvli 08ab0715bd remove unused demo component 2025-11-29 19:32:11 -08:00
jeffvli 17e4c5cbb3 list component optimizations 2025-11-29 19:32:11 -08:00
jeffvli fe0813502d another temp commit 2025-11-29 19:32:11 -08:00
jeffvli 6ff5affb58 temp commit for breaking changes 2025-11-29 19:32:11 -08:00
jeffvli 56907436a3 add remaining song filter changes 2025-11-29 19:32:11 -08:00
jeffvli 33735c1314 implement new lists for songs 2025-11-29 19:32:10 -08:00
jeffvli 872543b5aa update query persistence to hooks 2025-11-29 19:32:10 -08:00
jeffvli 1a5b771ae0 add ListSearchInput component 2025-11-29 19:32:10 -08:00
jeffvli 26d635791a update settings store for album/song lists 2025-11-29 19:32:10 -08:00
jeffvli 7701135e67 enforce default value on sortOrder filter 2025-11-29 19:32:10 -08:00
jeffvli cdf783f2a6 enforce default value on sortBy filter 2025-11-29 19:32:10 -08:00
jeffvli af89def3f9 implement new lists for albums 2025-11-29 19:32:10 -08:00
jeffvli cd578db53a update shared filter components 2025-11-29 19:32:09 -08:00
jeffvli f6a7af2b12 remove typed _custom query 2025-11-29 19:30:51 -08:00
jeffvli d8877befeb add itemType to infinite loader query to prevent duplicate key 2025-11-29 19:30:51 -08:00
jeffvli fcdd543616 add list scroll persistence 2025-11-29 19:30:51 -08:00
jeffvli 86b680cd41 update list types 2025-11-29 19:30:51 -08:00
jeffvli 51b1945957 add itemCount to list context 2025-11-29 19:30:51 -08:00
jeffvli f90a11e9cf wrap disclosure hook 2025-11-29 19:30:51 -08:00
jeffvli 4d4e88fb66 update search input styles 2025-11-29 19:30:50 -08:00
jeffvli dffa8e710a wrap localstorage hook 2025-11-29 19:30:50 -08:00
jeffvli e53b434dfe add keys, pagination types 2025-11-29 19:30:50 -08:00
jeffvli bc4edb9bde add nuqs adapter to app outlet 2025-11-29 19:30:50 -08:00
jeffvli aaff54c490 add filter keys 2025-11-29 19:30:50 -08:00
jeffvli ae0a6497cb refactor list pagination to use nuqs 2025-11-29 19:30:50 -08:00
jeffvli 3a30f536d4 refactor infinite loader to use query state 2025-11-29 19:30:50 -08:00
jeffvli 34bd9d93ad update title columns to use links 2025-11-29 19:30:50 -08:00
jeffvli f7f1d5f54d use searchparams, localstorage for list filters 2025-11-29 19:30:50 -08:00
jeffvli ac625a9032 remove deprecated virtual grid 2025-11-29 19:30:50 -08:00
jeffvli 804d8c766f update packages
- add nuqs
- add mantine contextmenu
- remove react-window
2025-11-29 19:30:50 -08:00
jeffvli f19da36005 fix favorite column 2025-11-29 19:30:50 -08:00
jeffvli dddc38af4c fix table item count offset due to header 2025-11-29 19:30:50 -08:00
jeffvli 241e265e02 handle favorite/rating column mutations 2025-11-29 19:30:50 -08:00
jeffvli b2dd3ed699 add new default columns 2025-11-29 19:30:50 -08:00
jeffvli e67a1a6a1b add global event emitter 2025-11-29 19:30:50 -08:00
jeffvli dd0586df6d add column search to tabel config 2025-11-29 19:30:50 -08:00
jeffvli 24f9753bc0 add PLAYLIST_SONG, QUEUE_SONG item types 2025-11-29 19:30:50 -08:00
jeffvli c56baf65e3 add border to table pagination container 2025-11-29 19:30:50 -08:00
jeffvli 4dba1e3d94 update card controls animation back to slide up 2025-11-29 19:30:50 -08:00
jeffvli 1172152018 update ListConfigMenu to work with new lists 2025-11-29 19:30:50 -08:00
jeffvli 943b26dfea add large table size 2025-11-29 19:30:50 -08:00
jeffvli c2715a2d7e add more grid configuration
- gap
- manual items per row
2025-11-29 19:30:50 -08:00
jeffvli 33b0cda2a0 add more table configuration
- alternate row colors
- row hover highlight
- vertical borders
- horizontal borders
2025-11-29 19:30:50 -08:00
jeffvli c5c9311d00 add remaining table columns 2025-11-29 19:30:50 -08:00
jeffvli 076710672c forward switch ref 2025-11-29 19:30:50 -08:00
jeffvli 53daa90bff update popover/dropdown bg styles 2025-11-29 19:30:50 -08:00
jeffvli 3b4a667f61 add alignment icons 2025-11-29 19:30:50 -08:00
jeffvli b6e38815e3 center align checkbox label by default 2025-11-29 19:30:50 -08:00
jeffvli 6471114c28 export ButtonGroup components 2025-11-29 19:30:50 -08:00
jeffvli 667aacc6c8 add prop configuration for X,Y scroll on ScrollArea 2025-11-29 19:30:49 -08:00
jeffvli e9300825dc add autoWidth column config 2025-11-29 19:30:49 -08:00
jeffvli c4f937b4da normalize user action columns 2025-11-29 19:30:49 -08:00
jeffvli 4600e56b94 extract list expansion container to separate component 2025-11-29 19:30:49 -08:00
jeffvli a068b9ca3d add item list controls to centralized export 2025-11-29 19:30:49 -08:00
jeffvli dafd914696 add hover only columns 2025-11-29 19:30:49 -08:00
jeffvli e4189e92d0 improve tooltip readability 2025-11-29 19:30:49 -08:00
jeffvli 361569ee3f fix image column container component 2025-11-29 19:30:49 -08:00
jeffvli c08deb980b set max genres displayed on genre column 2025-11-29 19:30:49 -08:00
jeffvli b9f600409e add tooltip for date column values 2025-11-29 19:30:49 -08:00
jeffvli f09a8e3306 improve overflow for album artist column 2025-11-29 19:30:49 -08:00
jeffvli d9e8625b15 remove item callbacks from list - move to item component 2025-11-29 19:30:49 -08:00
jeffvli 545ea25e43 implement table list callbacks 2025-11-29 19:30:49 -08:00
jeffvli 02d9e8328f disable default skeleton animation 2025-11-29 19:30:49 -08:00
jeffvli 42a0530777 remove user select from genre / album artists columns 2025-11-29 19:30:49 -08:00
jeffvli 3ce6a6fe95 add table row hover effect 2025-11-29 19:30:49 -08:00
jeffvli 9d1b2a7c72 add table row separator support 2025-11-29 19:30:49 -08:00
jeffvli 06a3686739 add links to genre / album artists columns 2025-11-29 19:30:49 -08:00
jeffvli 3c2f186891 fix Navidrome normalized types for userFavorite, userRating 2025-11-29 19:30:49 -08:00
jeffvli 15c27c164f handle table column order based on pinned column config 2025-11-29 19:30:49 -08:00
jeffvli ae8ca54a07 add initial table columns 2025-11-29 19:30:49 -08:00
jeffvli c27c05ac5d use derived column props, add table header styles 2025-11-29 19:30:49 -08:00
jeffvli 3e0e3f9984 support both left and right column pinning 2025-11-29 19:30:49 -08:00
jeffvli 00e7b4a9d5 fix styling props on Text component 2025-11-29 19:30:49 -08:00
jeffvli f610489a61 update pagination itemcount wording to be language agnostic 2025-11-29 19:30:49 -08:00
jeffvli 9d15e8d0a4 move list pagination padding to separate container 2025-11-29 19:30:49 -08:00
jeffvli 6ae103850b progress on table columns 2025-11-29 19:30:49 -08:00
jeffvli f1f3223922 more table list progress
- scroll shadow
- header shadow
- remove sticky row count - only allow sticky header
- support table expansion
2025-11-29 19:30:49 -08:00
jeffvli 8e392a9bff fix queryKey on infinite loader 2025-11-29 19:30:49 -08:00
jeffvli e89cf9dbb4 fix sticky column autoscroll 2025-11-29 19:30:49 -08:00
jeffvli f8af307159 progress 2025-11-29 19:30:49 -08:00
jeffvli 74473427df move item table list 2025-11-29 19:30:49 -08:00
jeffvli 18f448c733 first iteration of table 2025-11-29 19:30:49 -08:00
jeffvli 0a591a3f09 rename list components 2025-11-29 19:30:48 -08:00
jeffvli 8dcc28376c rename expanded container classname 2025-11-29 19:30:48 -08:00
jeffvli 3f3a02ba8c add initial item detail list design 2025-11-29 19:30:48 -08:00
jeffvli d4b8b12687 add color utilities 2025-11-29 19:30:48 -08:00
jeffvli 9cfe396d0f add GRID_PAGINATED to ListDisplayType 2025-11-29 19:30:48 -08:00
jeffvli 85d8ad09c6 clean up log 2025-11-29 19:30:48 -08:00
jeffvli 3fc2583470 properly handle weight prop on Text and TextTitle 2025-11-29 19:30:48 -08:00
jeffvli df9e039fce add paginated album grid component 2025-11-29 19:30:48 -08:00
jeffvli 3efa54b68a add additional list pagination helpers and components 2025-11-29 19:30:48 -08:00
jeffvli 90e7541bc1 rename infinite loader hook file 2025-11-29 19:30:48 -08:00
jeffvli 91deb9b7c1 add paginated list loader hook 2025-11-29 19:30:48 -08:00
jeffvli 66c5424549 fix z-index of expanded item title 2025-11-29 19:30:48 -08:00
jeffvli c43751d2dc finalize infinite album list 2025-11-29 19:30:48 -08:00
jeffvli 80baa6798b finalize infinite loader hook 2025-11-29 19:30:48 -08:00
jeffvli 85407f3e11 remove uniqueId property from all entities except QueueSong 2025-11-29 19:30:48 -08:00
jeffvli 789512b10a add initial infinite album list component 2025-11-29 19:30:48 -08:00
jeffvli 820d8da7d5 add initial infinite loader helpers 2025-11-29 19:30:48 -08:00
jeffvli 9db7830726 update ItemGrid to use react-window v2 2025-11-29 19:30:48 -08:00
jeffvli ff83ce5254 add react-window v2 deps 2025-11-29 19:30:48 -08:00
jeffvli 69d16edfc1 add loading state to fastaveragecolor hook 2025-11-29 19:30:48 -08:00
jeffvli 77bd483ce4 add 2xl, 3xl to container query hook 2025-11-29 19:30:48 -08:00
jeffvli 5ff9efb7d6 add expanded list item component 2025-11-29 19:30:48 -08:00
jeffvli e4574b0260 add item card skeleton 2025-11-29 19:30:48 -08:00
jeffvli 126ab38475 add placeholder expanded list item 2025-11-29 19:30:48 -08:00
jeffvli 18390443ff add additional props to ItemGrid 2025-11-29 19:30:48 -08:00
jeffvli 71e280061c add serverId to list state selection 2025-11-29 19:30:48 -08:00
jeffvli 7c50ee814d return isDark, isLight from color 2025-11-29 19:30:48 -08:00
jeffvli 3ed6d4b2f7 add utils to handle list multiselect / expand states 2025-11-29 19:30:47 -08:00
jeffvli 7a2af3d013 plain item grid 2025-11-29 19:30:47 -08:00
jeffvli 1108cb7e9a add new card component 2025-11-29 19:30:47 -08:00
jeffvli c0317aca58 upgrade and refactor for react-query v5 2025-11-29 19:30:47 -08:00
jeffvli 015d5a4d65 add react-virtuoso package 2025-11-29 19:30:47 -08:00
jeffvli ea646a5723 add breakpoints postcss 2025-11-29 19:30:47 -08:00
jeffvli 9e508f0a02 fix crossfade settings to update player store 2025-11-29 19:30:47 -08:00
jeffvli 070bf7c0f9 move mpv initialization into player implementation 2025-11-29 19:30:47 -08:00
jeffvli 7224255775 re-add conditional render to ReactPlayer components which causes crossfade error 2025-11-29 19:30:47 -08:00
jeffvli 6ff535c406 move remote init into hook 2025-11-29 19:30:47 -08:00
jeffvli 02e721ce17 lint 2025-11-29 19:30:47 -08:00
jeffvli e0256dd535 fix ipc in remote hook 2025-11-29 19:30:47 -08:00
jeffvli 328015bce7 add useRemote to playerbar 2025-11-29 19:30:47 -08:00
jeffvli b03a33f534 add new player remote hook 2025-11-29 19:30:47 -08:00
jeffvli 7cd012de70 add subscribers for player repeat and shuffle 2025-11-29 19:30:47 -08:00
jeffvli 6ced14d0e8 support offset for player skip 2025-11-29 19:30:47 -08:00
jeffvli 9fd4abec25 re-implement mpv with new player 2025-11-29 19:30:47 -08:00
jeffvli a452495c22 add volume wheel 2025-11-29 19:30:47 -08:00
jeffvli 3c93167abb refactor windowbar to prevent unnecessary renders 2025-11-29 19:30:47 -08:00
jeffvli 7717bff367 re-implement playerbar controls 2025-11-29 19:30:47 -08:00
jeffvli be6db801ee add usePlayer hook 2025-11-29 19:30:47 -08:00
jeffvli 427f808180 rename internal types in domain models 2025-11-29 19:30:47 -08:00
jeffvli 76bf4ae825 begin implementing player context 2025-11-29 19:30:47 -08:00
jeffvli e02a518583 reorganize 2025-11-29 19:30:47 -08:00
jeffvli 79ddd122a4 fix table row styles listener 2025-11-29 19:30:46 -08:00
jeffvli b1fa7e4e09 rework player events to use properties object instead of flat value 2025-11-29 19:30:46 -08:00
jeffvli 015c3004f5 add new web player implementation 2025-11-29 19:30:46 -08:00
jeffvli 550ba4f768 temporarily remove old player implementations to prevent broken app 2025-11-29 19:30:46 -08:00
jeffvli 1d4069d4fa rework player store and add global player context 2025-11-29 19:30:46 -08:00
jeffvli b35b805a8e update to v0.22.0 2025-11-29 19:28:01 -08:00
jeffvli 683705aa9b update translations 11/28
- manually upload new translations due to failing weblate push
2025-11-28 02:31:33 -08:00
Kendall Garner cad0265e3c fix(rpc): truncate certain fields (#1263)
* fix(rpc): truncate certain fields

* off by one...

* use elipses character
2025-11-17 02:24:52 +00:00
Damien Erambert 6a236c803a Small light theme fixes (#1248)
* Use grey border instead of black shadow in light mode below filter-bar

* Fix some theme colors not updating when theme is changed in real-time
2025-11-09 00:25:58 -08:00
Kendall Garner d74e7b52cc position original release date after release types 2025-11-08 15:38:19 -08:00
1031 changed files with 110835 additions and 34610 deletions
+1
View File
@@ -5,6 +5,7 @@
*.jpeg binary
*.ico binary
*.icns binary
*.webp binary
*.eot binary
*.otf binary
*.ttf binary
+189
View File
@@ -0,0 +1,189 @@
# Alpha builds published to Cloudflare R2 with date versioning (e.g. 1.0.0-alpha-20260205).
# Required repo secrets: R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY (from R2 API token in Cloudflare dashboard).
name: Publish Alpha
on:
workflow_dispatch:
inputs:
version:
description: 'Semantic version number (e.g., 1.0.0) - alpha suffix will be added automatically'
required: false
type: string
schedule:
# Run at 3:00 AM PST daily (11:00 UTC; PST = UTC-8)
- cron: '0 11 * * *'
jobs:
check-new-commits:
runs-on: ubuntu-latest
outputs:
has_new_commits: ${{ steps.manual.outputs.has_new_commits || steps.check.outputs['has-new-commits'] }}
steps:
- name: Set has new commits (manual trigger)
id: manual
if: github.event_name == 'workflow_dispatch'
run: echo "has_new_commits=true" >> "$GITHUB_OUTPUT"
- name: Check for new commits (24 hr interval)
id: check
if: github.event_name != 'workflow_dispatch'
uses: adriangl/check-new-commits-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
seconds: 86400
prepare:
needs: check-new-commits
if: needs.check-new-commits.outputs.has_new_commits == 'true'
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
- name: Install dependencies
run: pnpm install
- name: Set date-based alpha version
id: version
shell: pwsh
run: |
$inputVersion = "${{ github.event.inputs.version }}"
Write-Host "Input version: $inputVersion"
if ($inputVersion -eq "" -or $inputVersion -eq "null") {
# No input version provided (scheduled run or manual without input), auto-increment patch version
Write-Host "No version provided, auto-incrementing patch version..."
$currentVersion = (Get-Content package.json | ConvertFrom-Json).version
Write-Host "Current version: $currentVersion"
$cleanVersion = $currentVersion -replace '-.*$', ''
$versionParts = $cleanVersion.Split('.')
if ($versionParts.Length -ne 3) {
Write-Error "Current version format is invalid: $cleanVersion"
exit 1
}
$major = [int]$versionParts[0]
$minor = [int]$versionParts[1]
$patch = [int]$versionParts[2]
$newPatch = $patch + 1
$inputVersion = "$major.$minor.$newPatch"
Write-Host "Auto-generated version: $inputVersion"
} else {
# Validate semantic version format (major.minor.patch)
$versionPattern = '^\d+\.\d+\.\d+$'
if ($inputVersion -notmatch $versionPattern) {
Write-Error "Invalid version format. Expected semantic version (e.g., 1.0.0), got: $inputVersion"
exit 1
}
}
# Date in YYYYMMDD (PST / America/Los_Angeles)
$pst = [TimeZoneInfo]::FindSystemTimeZoneById('America/Los_Angeles')
$dateInPst = [TimeZoneInfo]::ConvertTimeFromUtc([DateTime]::UtcNow, $pst)
$dateStr = $dateInPst.ToString("yyyyMMdd")
$alphaVersion = "$inputVersion-alpha-$dateStr"
Write-Host "Alpha version: $alphaVersion"
# Update package.json
$packageJson = Get-Content package.json | ConvertFrom-Json
$packageJson.version = $alphaVersion
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
echo "version=$alphaVersion" >> $env:GITHUB_OUTPUT
cleanup:
needs: prepare
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
R2_ENDPOINT_URL: ${{ secrets.R2_ENDPOINT_URL }}
steps:
- name: Delete all objects in R2 bucket
run: |
aws s3 rm s3://feishin-nightly --recursive --endpoint-url $R2_ENDPOINT_URL
publish:
needs: [prepare, cleanup]
runs-on: ${{ matrix.os }}
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
- name: Install dependencies
run: pnpm install
- name: Set version from prepare job
shell: pwsh
run: |
$version = "${{ needs.prepare.outputs.version }}"
Write-Host "Setting version: $version"
$packageJson = Get-Content package.json | ConvertFrom-Json
$packageJson.version = $version
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
- name: Build and Publish to R2 (Windows)
if: matrix.os == 'windows-latest'
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:win:alpha
on_retry_command: pnpm cache delete
- name: Build and Publish to R2 (macOS)
if: matrix.os == 'macos-latest'
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:mac:alpha
on_retry_command: pnpm cache delete
- name: Build and Publish to R2 (Linux)
if: matrix.os == 'ubuntu-latest'
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:linux:alpha
on_retry_command: pnpm cache delete
- name: Build and Publish to R2 (Linux ARM64)
if: matrix.os == 'ubuntu-latest'
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run publish:linux-arm64:alpha
on_retry_command: pnpm cache delete
+17
View File
@@ -1,12 +1,29 @@
name: Publish (PR)
on:
workflow_dispatch:
pull_request:
branches:
- development
paths:
- 'src/**'
- 'electron-builder*.yml'
jobs:
wait-for-lint:
runs-on: ubuntu-latest
steps:
- name: Wait for Test workflow to complete
uses: lewagon/wait-on-check-action@v1.4.1
with:
ref: ${{ github.event.pull_request.head.sha }}
check-name: 'lint'
repo-token: ${{ secrets.GITHUB_TOKEN }}
wait-interval: 10
allowed-conclusions: success
publish:
needs: wait-for-lint
runs-on: ${{ matrix.os }}
strategy:
+1 -2
View File
@@ -16,6 +16,5 @@ jobs:
- uses: vedantmgoyal9/winget-releaser@main
with:
identifier: jeffvli.Feishin
installers-regex: 'Feishin-*-win-x64\.exe'
installers-regex: 'Feishin-*-win-(x64|arm64)\.exe'
token: ${{ secrets.WINGET_ACC_TOKEN }}
+5 -4
View File
@@ -14,9 +14,7 @@
".eslintignore": "ignore"
},
"eslint.validate": ["typescript", "typescriptreact"],
"eslint.workingDirectories": [
{ "directory": "./", "changeProcessCWD": true },
],
"eslint.workingDirectories": [{ "directory": "./", "changeProcessCWD": true }],
"typescript.tsserver.experimental.enableProjectDiagnostics": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
@@ -50,7 +48,10 @@
"typescript.preferences.autoImportFileExcludePatterns": [
"@mantine/core",
"@mantine/modals",
"@mantine/dates"
"@mantine/dates",
"@mantine/hooks",
"@mantine/form",
"@radix-ui/react-context-menu"
],
"[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": true,
+3 -1
View File
@@ -20,6 +20,8 @@ COPY --chown=nginx:nginx --from=builder /app/out/web /usr/share/nginx/html
COPY ./settings.js.template /etc/nginx/templates/settings.js.template
COPY ng.conf.template /etc/nginx/templates/default.conf.template
ENV PUBLIC_PATH="/"
ENV SERVER_LOCK=false SERVER_NAME="" SERVER_TYPE="" SERVER_URL="" REMOTE_URL=""
ENV LEGACY_AUTHENTICATION="" ANALYTICS_DISABLED="" PUBLIC_PATH="/"
EXPOSE 9180
CMD ["nginx", "-g", "daemon off;"]
+21 -12
View File
@@ -43,7 +43,7 @@ Rewrite of [Sonixd](https://github.com/jeffvli/sonixd).
## Screenshots
<a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_full_screen_player.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_full_screen_player.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_artist_detail.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_artist_detail.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_detail.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_detail.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_smart_playlist.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_smart_playlist.png" width="49.5%"/></a>
<a href="./media/preview_full_screen_player.png"><img src="./media/preview_full_screen_player.png" width="49.5%"/></a> <a href="./media/preview_album_artist_detail.png"><img src="./media/preview_album_artist_detail.png" width="49.5%"/></a> <a href="./media/preview_album_detail.png"><img src="./media/preview_album_detail.png" width="49.5%"/></a> <a href="./media/preview_smart_playlist.png"><img src="./media/preview_smart_playlist.png" width="49.5%"/></a>
## Getting Started
@@ -62,18 +62,21 @@ For media keys to work, you will be prompted to allow Feishin to be a Trusted Ac
We provide a small install script to download the latest `.AppImage`, make it executable, and also download the icons required by Desktop Environments. Finally, it generates a `.desktop` file to add Feishin to your Application Launcher.
Simply run the installer like this:
```sh
dir=/your/application/directory
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir"
```
The script also has an option to add launch arguments to run Feishin in native Wayland mode. Note that this is experimental in Electron and therefore not officially supported. If you want to use it, run this instead:
```sh
dir=/your/application/directory
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir" wayland-native
```
It also provides a simple uninstall routine, removing the downloaded files:
```sh
dir=/your/application/directory
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir" remove
@@ -98,25 +101,25 @@ docker run --name feishin -p 9180:9180 feishin
#### Docker Compose
To install via Docker Compose use the following snippit. This also works on Portainer.
To install via Docker Compose, use the following snippet. This also works on Portainer.
```yaml
services:
feishin:
container_name: feishin
image: 'ghcr.io/jeffvli/feishin:latest'
restart: unless-stopped
environment:
- SERVER_NAME=jellyfin # pre defined server name
- SERVER_NAME=jellyfin # pre-defined server name
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
- SERVER_TYPE=jellyfin # navidrome also works
- SERVER_URL= # http://address:port
- PUID=1000
- PGID=1000
- UMASK=002
- TZ=America/Los_Angeles
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
- SERVER_URL= # http://address:port or https://address:port
= REMOTE_URL= # http://address or https://address
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacy (plaintext) authentication flag for Subsonic/OpenSubsonic servers
- ANALYTICS_DISABLED=true # Set to true to disable Umami analytics tracking
ports:
- 9180:9180
restart: unless-stopped
# Alternatively, to restrict to only localhost, - 127.0.0.1:9180:8190
```
### Configuration
@@ -126,11 +129,17 @@ services:
2. After restarting the app, you will be prompted to select a server. Click the `Open menu` button and select `Manage servers`. Click the `Add server` button in the popup and fill out all applicable details. You will need to enter the full URL to your server, including the protocol and port if applicable (e.g. `https://navidrome.my-server.com` or `http://192.168.0.1:4533`).
- **Navidrome** - For the best experience, select "Save password" when creating the server and configure the `SessionTimeout` setting in your Navidrome config to a larger value (e.g. 72h).
- **Linux users** - The default password store uses `libsecret`. `kwallet4/5/6` are also supported, but must be explicitly set in Settings > Window > Passwords/secret score.
- **Linux users** - The default password store uses `libsecret`. `kwallet4/5/6` are also supported, but must be explicitly set in Settings > Window > Passwords/secret store.
3. _Optional_ - If you want to host Feishin on a subpath (not `/`), then pass in the following environment variable: `PUBLIC_PATH=PATH`. For example, to host on `/feishin`, pass in `PUBLIC_PATH=/feishin`.
4. _Optional_ - To hard code the server url, pass the following environment variables: `SERVER_NAME`, `SERVER_TYPE` (one of `jellyfin` or `navidrome`), `SERVER_URL`. To prevent users from changing these settings, pass `SERVER_LOCK=true`. This can only be set if all three of the previous values are set.
4. _Optional_ - To hard code the server url, pass the following environment variables: `SERVER_NAME`, `SERVER_TYPE` (one of `jellyfin` or `navidrome` or `subsonic`), `SERVER_URL`. To prevent users from changing these settings, pass `SERVER_LOCK=true`. This can only be set if all three of the previous values are set. When `SERVER_LOCK=true`, you can also set `LEGACY_AUTHENTICATION=true` or `LEGACY_AUTHENTICATION=false` to configure the legacy authentication flag for the server (only applicable for Subsonic/OpenSubsonic servers).
5. _Optional_ - If your server uses a separate public-facing URL than what integrating applications use internally to communicate with your server, such as a separate Navidrome `ShareURL`, set `REMOTE_URL` to said public-facing URL.
6. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled.
7. _Optional_ - App settings (theme, language, sidebar options, etc.) can be overridden with environment variables on first run. The variables use the `FS_` prefix (e.g. `FS_GENERAL_THEME=defaultDark`, `FS_GENERAL_LANGUAGE=de`). See [the settings environment variable documentation](docs/ENV_SETTINGS.md) for the full list.
## FAQ
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 32 KiB

+10 -7
View File
@@ -1,13 +1,16 @@
version: '3.5'
services:
feishin:
container_name: feishin
image: ghcr.io/jeffvli/feishin:latest
image: "ghcr.io/jeffvli/feishin:latest"
restart: unless-stopped
environment:
- SERVER_NAME=jellyfin # pre-defined server name
- SERVER_LOCK=false # When true AND name/type/url are set, only username/password can be toggled
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
- SERVER_URL=http://localhost:8096 # http://address:port or https://address:port
# - REMOTE_URL=http://share.localhost # Used for compatibility with external functionality, such as custom sharing URLs on Navidrome
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacyauth flag for server authentication (true or false)
- ANALYTICS_DISABLED=false # Set to true to disable Umami analytics tracking
ports:
- 9180:9180
environment:
- SERVER_NAME=jellyfin # pre defined server name
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
- SERVER_TYPE=jellyfin # navidrome also works
- SERVER_URL= # http://address:port
# Alternatively, to restrict to only localhost, - 127.0.0.1:9180:8190
+126
View File
@@ -0,0 +1,126 @@
# Environment variables for settings (web / Docker)
These variables override app settings **on first run** when no persisted settings exist. They are injected via `settings.js` (from `settings.js.template`) and only apply to the **web** build.
**Format:** All values are strings; booleans use `true`/`false`, numbers are numeric strings. Leave unset or empty to use the default.
---
## General
| Setting | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `general.accent` | `rgb(53, 116, 252)` | `FS_GENERAL_ACCENT` | CSS `rgb(r, g, b)` string (e.g. `rgb(53, 116, 252)`). Invalid values are ignored. |
| `general.albumBackground` | `false` | `FS_GENERAL_ALBUM_BACKGROUND` | `true` / `false` — Show album background image. |
| `general.albumBackgroundBlur` | `3` | `FS_GENERAL_ALBUM_BACKGROUND_BLUR` | Blur amount for album background (number). |
| `general.artistBackground` | `true` | `FS_GENERAL_ARTIST_BACKGROUND` | `true` / `false` — Show artist background image. |
| `general.artistBackgroundBlur` | `3` | `FS_GENERAL_ARTIST_BACKGROUND_BLUR` | Blur amount for artist background (number). |
| `general.blurExplicitImages` | `false` | `FS_GENERAL_BLUR_EXPLICIT_IMAGES` | `true` / `false` — Blur explicit images. |
| `general.combinedLyricsAndVisualizer` | `false` | `FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER` | `true` / `false` — Combine lyrics and visualizer panel. |
| `general.enableGridMultiSelect` | `false` | `FS_GENERAL_ENABLE_GRID_MULTI_SELECT` | `true` / `false` — Enable multi-select in grid views. |
| `general.externalLinks` | `true` | `FS_GENERAL_EXTERNAL_LINKS` | `true` / `false` — Show external links in UI. |
| `general.followCurrentSong` | `true` | `FS_GENERAL_FOLLOW_CURRENT_SONG` | `true` / `false` — Follow current song in list. |
| `general.followSystemTheme` | `false` | `FS_GENERAL_FOLLOW_SYSTEM_THEME` | `true` / `false` — Use OS light/dark preference. |
| `general.homeFeature` | `true` | `FS_GENERAL_HOME_FEATURE` | `true` / `false` — Show home featured carousel. |
| `general.homeFeatureStyle` | `single` | `FS_GENERAL_HOME_FEATURE_STYLE` | `multiple` / `single` — Home featured carousel style. |
| `general.language` | `en` | `FS_GENERAL_LANGUAGE` | UI language code (e.g. `en`, `de`, `fr`). |
| `general.theme` | `defaultDark` | `FS_GENERAL_THEME` | One of: `ayuDark`, `ayuLight`, `catppuccinLatte`, `catppuccinMocha`, `defaultDark`, `defaultLight`, `dracula`, `githubDark`, `githubLight`, `glassyDark`, `gruvboxDark`, `gruvboxLight`, `highContrastDark`, `highContrastLight`, `materialDark`, `materialLight`, `monokai`, `nightOwl`, `nord`, `oneDark`, `rosePine`, `rosePineDawn`, `rosePineMoon`, `shadesOfPurple`, `solarizedDark`, `solarizedLight`, `tokyoNight`, `vscodeDarkPlus`, `vscodeLightPlus`. |
| `general.themeDark` | `defaultDark` | `FS_GENERAL_THEME_DARK` | Same as theme (used when system is dark). |
| `general.themeLight` | `defaultLight` | `FS_GENERAL_THEME_LIGHT` | Same as theme (used when system is light). |
| `general.lastfmApiKey` | *(empty)* | `FS_GENERAL_LASTFM_API_KEY` | Last.fm API key. |
| `general.lastFM` | `true` | `FS_GENERAL_LAST_FM` | `true` / `false` — Enable Last.fm. |
| `general.musicBrainz` | `true` | `FS_GENERAL_MUSIC_BRAINZ` | `true` / `false` — MusicBrainz links. |
| `general.nativeAspectRatio` | `false` | `FS_GENERAL_NATIVE_ASPECT_RATIO` | `true` / `false` — Use native cover art aspect ratio. |
| `general.pathReplace` | *(empty)* | `FS_GENERAL_PATH_REPLACE` | Path pattern to replace (e.g. server path in Docker). |
| `general.pathReplaceWith` | *(empty)* | `FS_GENERAL_PATH_REPLACE_WITH` | Replacement path. |
| `general.playerbarOpenDrawer` | `false` | `FS_GENERAL_PLAYERBAR_OPEN_DRAWER` | `true` / `false` — Open queue/lyrics as drawer from player bar. |
| `general.primaryShade` | `6` | `FS_GENERAL_PRIMARY_SHADE` | Mantine primary shade 09 (number). |
| `general.resume` | `true` | `FS_GENERAL_RESUME` | `true` / `false` — Resume playback on load. |
| `general.showLyricsInSidebar` | `true` | `FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR` | `true` / `false` — Show lyrics in sidebar. |
| `general.showRatings` | `true` | `FS_GENERAL_SHOW_RATINGS` | `true` / `false` — Show star ratings. |
| `general.showVisualizerInSidebar` | `true` | `FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR` | `true` / `false` — Show visualizer in sidebar. |
| `general.sidebarCollapsedNavigation` | `true` | `FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION` | `true` / `false` — Start with collapsed sidebar nav. |
| `general.sidebarCollapseShared` | `false` | `FS_GENERAL_SIDEBAR_COLLAPSE_SHARED` | `true` / `false` — Share sidebar collapse state. |
| `general.sidebarPlaylistList` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_LIST` | `true` / `false` — Show playlist list in sidebar. |
| `general.sidebarPlaylistSorting` | `false` | `FS_GENERAL_SIDEBAR_PLAYLIST_SORTING` | `true` / `false` — Enable playlist sorting in sidebar. |
| `general.sideQueueType` | `sideQueue` | `FS_GENERAL_SIDE_QUEUE_TYPE` | `sideDrawerQueue` / `sideQueue` — Side play queue style. |
| `general.useThemeAccentColor` | `false` | `FS_GENERAL_USE_THEME_ACCENT_COLOR` | `true` / `false` — Use themes accent color instead of custom. |
| `general.useThemePrimaryShade` | `true` | `FS_GENERAL_USE_THEME_PRIMARY_SHADE` | `true` / `false` — Use themes primary shade. |
| `general.zoomFactor` | `100` | `FS_GENERAL_ZOOM_FACTOR` | UI zoom percentage (number). |
---
## Playback
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `playback.mediaSession` | `false` | `FS_PLAYBACK_MEDIA_SESSION` | `true` / `false` — Media Session API (e.g. browser/media keys). |
| `playback.webAudio` | `true` | `FS_PLAYBACK_WEB_AUDIO` | `true` / `false` — Use Web Audio for playback. |
| `playback.audioFadeOnStatusChange` | `true` | `FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE` | `true` / `false` — Fade on play/pause. |
| `playback.preservePitch` | `true` | `FS_PLAYBACK_PRESERVE_PITCH` | `true` / `false` — Preserve pitch when changing speed. |
| `playback.scrobble.enabled` | `true` | `FS_PLAYBACK_SCROBBLE_ENABLED` | `true` / `false` — Enable scrobbling. |
| `playback.scrobble.notify` | `false` | `FS_PLAYBACK_SCROBBLE_NOTIFY` | `true` / `false` — Scrobble notifications. |
| `playback.scrobble.scrobbleAtDuration` | `240` | `FS_PLAYBACK_SCROBBLE_AT_DURATION` | Seconds of playback before scrobble. |
| `playback.scrobble.scrobbleAtPercentage` | `75` | `FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE` | Percentage of track before scrobble. |
| `playback.transcode.enabled` | `false` | `FS_PLAYBACK_TRANSCODE_ENABLED` | `true` / `false` — Enable transcoding. |
---
## Discord
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `discord.enabled` | `false` | `FS_DISCORD_ENABLED` | `true` / `false` — Discord rich presence. |
| `discord.clientId` | *(built-in)* | `FS_DISCORD_CLIENT_ID` | Custom Discord application ID. |
| `discord.displayType` | `feishin` | `FS_DISCORD_DISPLAY_TYPE` | `artist` / `feishin` / `song`. |
| `discord.linkType` | `none` | `FS_DISCORD_LINK_TYPE` | `last_fm` / `musicbrainz` / `musicbrainz_last_fm` / `none`. |
| `discord.showAsListening` | `false` | `FS_DISCORD_SHOW_AS_LISTENING` | `true` / `false`. |
| `discord.showPaused` | `true` | `FS_DISCORD_SHOW_PAUSED` | `true` / `false` — Show paused state. |
| `discord.showServerImage` | `false` | `FS_DISCORD_SHOW_SERVER_IMAGE` | `true` / `false`. |
| `discord.showStateIcon` | `true` | `FS_DISCORD_SHOW_STATE_ICON` | `true` / `false`. |
---
## Lyrics
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `lyrics.fetch` | `true` | `FS_LYRICS_FETCH` | `true` / `false` — Fetch lyrics. |
| `lyrics.follow` | `true` | `FS_LYRICS_FOLLOW` | `true` / `false` — Follow current line. |
| `lyrics.delayMs` | `0` | `FS_LYRICS_DELAY_MS` | Sync delay in milliseconds. |
| `lyrics.preferLocalLyrics` | `true` | `FS_LYRICS_PREFER_LOCAL` | `true` / `false` — Prefer local lyric files. |
| `lyrics.showMatch` | `true` | `FS_LYRICS_SHOW_MATCH` | `true` / `false`. |
| `lyrics.showProvider` | `true` | `FS_LYRICS_SHOW_PROVIDER` | `true` / `false`. |
| `lyrics.enableAutoTranslation` | `false` | `FS_LYRICS_ENABLE_AUTO_TRANSLATION` | `true` / `false`. |
| `lyrics.translationApiKey` | *(empty)* | `FS_LYRICS_TRANSLATION_API_KEY` | API key for lyric translation. |
| `lyrics.translationTargetLanguage` | `en` | `FS_LYRICS_TRANSLATION_TARGET_LANGUAGE` | Target language code. |
| `lyrics.alignment` | `center` | `FS_LYRICS_ALIGNMENT` | `center` / `left` / `right`. |
---
## Auto DJ
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `autoDJ.enabled` | `false` | `FS_AUTO_DJ_ENABLED` | `true` / `false`. |
| `autoDJ.itemCount` | `5` | `FS_AUTO_DJ_ITEM_COUNT` | Number of items to add. |
| `autoDJ.timing` | `1` | `FS_AUTO_DJ_TIMING` | Timing value (number). |
---
## CSS
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `css.content` | *(empty)* | `FS_CSS_CONTENT` | Custom CSS string (sanitized like in-app custom CSS). Set `FS_CSS_ENABLED=true` to apply. |
| `css.enabled` | `false` | `FS_CSS_ENABLED` | `true` / `false` — Enable custom CSS. |
---
## Font
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `font.type` | `builtIn` | `FS_FONT_TYPE` | `builtIn` / `system` / `custom`. |
| `font.builtIn` | `Inter` | `FS_FONT_BUILT_IN` | Built-in font name. |
| `font.system` | *(empty)* | `FS_FONT_SYSTEM` | System font name (when type is `system`). |
+72
View File
@@ -0,0 +1,72 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 39.4.0
directories:
buildResources: assets
files:
- 'out/**/*'
- 'package.json'
extraResources:
- assets/**
asarUnpack:
- resources/**
win:
target:
- target: zip
arch:
- x64
- arm64
- target: nsis
arch:
- x64
- arm64
icon: assets/icons/icon.ico
nsis:
allowToChangeInstallationDirectory: true
oneClick: false
shortcutName: ${productName}
uninstallDisplayName: ${productName}
createDesktopShortcut: always
mac:
target:
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: assets/icons/icon.icns
type: distribution
hardenedRuntime: false
identity: "-"
gatekeeperAssess: false
notarize: false
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
linux:
target:
- AppImage
- deb
- tar.xz
category: AudioVideo;Audio;Player
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: "1.0.2"
npmRebuild: false
publish:
provider: s3
bucket: feishin-nightly
channel: alpha
endpoint: https://065f090c64de2dc707dd70ac72db9669.r2.cloudflarestorage.com
+24 -11
View File
@@ -1,7 +1,7 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 38.5.0
electronVersion: 39.4.0
directories:
buildResources: assets
files:
@@ -13,9 +13,15 @@ asarUnpack:
- resources/**
win:
target:
- zip
- nsis
icon: assets/icons/icon.png
- target: zip
arch:
- x64
- arm64
- target: nsis
arch:
- x64
- arm64
icon: assets/icons/icon.ico
nsis:
allowToChangeInstallationDirectory: true
@@ -26,15 +32,18 @@ nsis:
mac:
target:
target: default
arch:
- arm64
- x64
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: assets/icons/icon.icns
type: distribution
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
hardenedRuntime: false
identity: "-"
gatekeeperAssess: false
notarize: false
@@ -44,11 +53,15 @@ dmg:
linux:
target:
- AppImage
- deb
- tar.xz
category: AudioVideo;Audio;Player
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: "1.0.2"
npmRebuild: false
publish:
provider: github
+25 -11
View File
@@ -1,7 +1,7 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 38.5.0
electronVersion: 39.4.0
directories:
buildResources: assets
files:
@@ -13,9 +13,15 @@ asarUnpack:
- resources/**
win:
target:
- zip
- nsis
icon: assets/icons/icon.png
- target: zip
arch:
- x64
- arm64
- target: nsis
arch:
- x64
- arm64
icon: assets/icons/icon.ico
nsis:
allowToChangeInstallationDirectory: true
@@ -26,15 +32,18 @@ nsis:
mac:
target:
target: default
arch:
- arm64
- x64
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: assets/icons/icon.icns
type: distribution
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
hardenedRuntime: false
identity: "-"
gatekeeperAssess: false
notarize: false
@@ -44,12 +53,17 @@ dmg:
linux:
target:
- AppImage
- deb
- tar.xz
category: AudioVideo;Audio;Player
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: "1.0.2"
npmRebuild: false
afterAllArtifactBuild: scripts/after-all-artifact-build.mjs
publish:
provider: github
owner: jeffvli
+13
View File
@@ -6,6 +6,7 @@ import dynamicImportPlugin from 'vite-plugin-dynamic-import';
import { ViteEjsPlugin } from 'vite-plugin-ejs';
const currentOSEnv = process.platform;
const electronRendererTarget = 'chrome87';
const config: UserConfig = {
main: {
@@ -36,6 +37,9 @@ const config: UserConfig = {
},
},
preload: {
build: {
sourcemap: true,
},
plugins: [externalizeDepsPlugin()],
resolve: {
alias: {
@@ -45,6 +49,15 @@ const config: UserConfig = {
},
},
renderer: {
build: {
cssMinify: 'esbuild',
minify: 'esbuild',
modulePreload: {
polyfill: false,
},
sourcemap: true,
target: electronRendererTarget,
},
css: {
modules: {
generateScopedName: 'fs-[name]-[local]',
+2
View File
@@ -43,6 +43,8 @@ export default tseslint.config(
'no-unused-vars': 'off',
'no-use-before-define': 'off',
quotes: ['error', 'single'],
'react-hooks/refs': 'off',
'react-hooks/set-state-in-effect': 'off',
'react-refresh/only-export-components': 'off',
'react/display-name': 'off',
semi: ['error', 'always'],
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 214 KiB

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

+104
View File
@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512"
height="512"
viewBox="0 0 512 512"
version="1.1"
id="svg1"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1"><linearGradient
id="linearGradient1"><stop
style="stop-color:#dfdfdf;stop-opacity:1;"
offset="0"
id="stop1" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop2" /></linearGradient><filter
style="color-interpolation-filters:sRGB"
id="filter249"
x="-0.61395349"
y="-0.61395349"
width="2.227907"
height="2.5069767"><feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
id="feFlood247" /><feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="1.000000"
id="feGaussianBlur247" /><feOffset
result="offset"
in="blur"
dx="0.000000"
dy="2"
id="feOffset247" /><feComposite
result="comp1"
operator="in"
in="flood"
in2="offset"
id="feComposite248" /><feComposite
result="fbSourceGraphic"
operator="over"
in="SourceGraphic"
id="feComposite249"
in2="comp1" /><feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix122" /><feFlood
id="feFlood122"
result="flood"
in="fbSourceGraphic"
flood-opacity="0.196078"
flood-color="rgb(0,0,0)" /><feGaussianBlur
id="feGaussianBlur122"
result="blur"
in="fbSourceGraphic"
stdDeviation="10.000000" /><feOffset
id="feOffset122"
result="offset"
in="blur"
dx="0.000000"
dy="10.000000" /><feComposite
id="feComposite122"
result="comp1"
operator="in"
in="flood"
in2="offset" /><feComposite
id="feComposite123"
result="comp2"
operator="over"
in="fbSourceGraphic"
in2="comp1" /></filter><linearGradient
xlink:href="#linearGradient1"
id="linearGradient2"
x1="256"
y1="0"
x2="256"
y2="512"
gradientUnits="userSpaceOnUse" /></defs><g
id="layer1"
style="display:inline"><circle
style="display:inline;fill:url(#linearGradient2);stroke-width:25;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke"
id="background"
cx="256"
cy="256"
r="256" /><circle
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.19597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter249)"
id="dot"
cx="256"
cy="240.31155"
r="21.5" /><path
id="bottom"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter249)"
d="M 220.84961,277.95117 183.5,315.59961 219.5,351.69922 239.5,332 c 0,0 5.85615,-6.19922 16.5,-6.19922 10.64385,0 16.5,6.19922 16.5,6.19922 l 20,19.69922 36,-36.09961 -37.34961,-37.64844 A 51.5,51.5 0 0 1 256,291.8125 51.5,51.5 0 0 1 220.84961,277.95117 Z" /><path
id="main"
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;filter:url(#filter249)"
d="m 256,145.40039 c -7.11895,0 -13.56326,2.88552 -18.22852,7.55078 L 66.96875,323.46875 C 62.354158,328.08334 59.5,334.45837 59.5,341.5 c 0,14.08326 11.416739,25.5 25.5,25.5 7.04163,0 13.41666,-2.85416 18.03125,-7.46875 L 206.92578,255.93359 A 51.5,51.5 0 0 1 204.5,240.3125 a 51.5,51.5 0 0 1 51.5,-51.5 51.5,51.5 0 0 1 51.5,51.5 51.5,51.5 0 0 1 -2.42578,15.62109 L 408.96875,359.53125 C 413.58334,364.14585 419.95837,367 427,367 c 14.08326,0 25.5,-11.41674 25.5,-25.5 0,-7.04163 -2.85415,-13.41666 -7.46875,-18.03125 L 274.22852,152.95117 C 269.56326,148.2859 263.11895,145.40039 256,145.40039 Z" /></g></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 644 KiB

After

Width:  |  Height:  |  Size: 733 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 KiB

After

Width:  |  Height:  |  Size: 869 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 887 KiB

After

Width:  |  Height:  |  Size: 990 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 KiB

After

Width:  |  Height:  |  Size: 356 KiB

+3
View File
@@ -1,5 +1,6 @@
server {
listen 9180;
listen [::]:9180;
sendfile on;
default_type application/octet-stream;
@@ -19,9 +20,11 @@ server {
location ${PUBLIC_PATH}settings.js {
alias /etc/nginx/conf.d/settings.js;
add_header Cache-Control "no-store";
}
location ${PUBLIC_PATH}/settings.js {
alias /etc/nginx/conf.d/settings.js;
add_header Cache-Control "no-store";
}
}
+89 -83
View File
@@ -1,6 +1,6 @@
{
"name": "feishin",
"version": "0.21.2",
"version": "1.8.0",
"description": "A modern self-hosted music player.",
"keywords": [
"subsonic",
@@ -16,11 +16,12 @@
"license": "GPL-3.0",
"author": {
"name": "jeffvli",
"email": "feishin@users.noreply.github.com",
"url": "https://github.com/jeffvli/"
},
"main": "./out/main/index.js",
"scripts": {
"build": "pnpm run typecheck && pnpm run build:electron && pnpm run build:remote",
"build": "pnpm run build:electron && pnpm run build:remote",
"build:electron": "electron-vite build",
"build:remote": "vite build --config remote.vite.config.ts",
"build:web": "vite build --config web.vite.config.ts",
@@ -29,7 +30,7 @@
"dev:watch": "electron-vite dev --watch",
"i18next": "i18next -c src/i18n/i18next-parser.config.js",
"postinstall": "electron-builder install-app-deps",
"lint": "pnpm run lint-code && pnpm run lint-styles",
"lint": "pnpm run typecheck && pnpm run lint-code && pnpm run lint-styles",
"lint-code": "eslint --max-warnings=0 --cache .",
"lint-code:fix": "eslint --cache --fix .",
"lint-styles": "stylelint --max-warnings=0 'src/**/*.{css,scss}'",
@@ -43,14 +44,22 @@
"package:mac": "pnpm run build && electron-builder --mac",
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
"package:win": "pnpm run build && electron-builder --win",
"package:win-arm64:pr": "pnpm run build && electron-builder --win --arm64 --publish never",
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
"publish:linux": "pnpm run build && electron-builder --publish always --linux",
"publish:linux-arm64": "pnpm run build && electron-builder --publish always --linux --arm64",
"publish:linux-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux --arm64",
"publish:linux-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux --arm64",
"publish:linux:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux",
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux",
"publish:mac": "pnpm run build && electron-builder --publish always --mac",
"publish:mac:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --mac",
"publish:mac:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --mac",
"publish:win": "pnpm run build && electron-builder --publish always --win",
"publish:win-arm64": "pnpm run build && electron-builder --publish always --win --arm64",
"publish:win-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win --arm64",
"publish:win-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win --arm64",
"publish:win:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win",
"publish:win:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win",
"start": "electron-vite preview",
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
@@ -60,75 +69,73 @@
"postversion": "node ./scripts/update-app-stream.mjs"
},
"dependencies": {
"@ag-grid-community/client-side-row-model": "^28.2.1",
"@ag-grid-community/core": "^28.2.1",
"@ag-grid-community/infinite-row-model": "^28.2.1",
"@ag-grid-community/react": "^28.2.1",
"@ag-grid-community/styles": "^28.2.1",
"@atlaskit/pragmatic-drag-and-drop": "1.4.0",
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.0",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3",
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.2",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^4.0.0",
"@mantine/colors-generator": "^8.2.8",
"@mantine/core": "^8.2.8",
"@mantine/dates": "^8.2.8",
"@mantine/form": "^8.2.8",
"@mantine/hooks": "^8.2.8",
"@mantine/modals": "^8.2.8",
"@mantine/notifications": "^8.2.8",
"@tanstack/react-query": "^5.89.0",
"@tanstack/react-query-devtools": "^5.89.0",
"@tanstack/react-query-persist-client": "^5.89.0",
"@ts-rest/core": "^3.23.0",
"@mantine/colors-generator": "^8.3.8",
"@mantine/core": "^8.3.8",
"@mantine/dates": "^8.3.8",
"@mantine/form": "^8.3.8",
"@mantine/hooks": "^8.3.8",
"@mantine/modals": "^8.3.8",
"@mantine/notifications": "^8.3.8",
"@radix-ui/react-context-menu": "^2.2.16",
"@tanstack/react-query": "^5.90.9",
"@tanstack/react-query-devtools": "^5.90.2",
"@tanstack/react-query-persist-client": "^5.90.11",
"@ts-rest/core": "^3.52.1",
"@wavesurfer/react": "^1.0.11",
"@xhayper/discord-rpc": "^1.3.0",
"audiomotion-analyzer": "^4.5.0",
"auto-text-size": "^0.2.3",
"axios": "^1.12.0",
"cheerio": "^1.0.0",
"clsx": "^2.0.0",
"cmdk": "^0.2.0",
"dayjs": "^1.11.6",
"dompurify": "^3.1.6",
"audiomotion-analyzer": "^4.5.1",
"axios": "^1.13.5",
"butterchurn": "^3.0.0-beta.5",
"butterchurn-presets": "^3.0.0-beta.4",
"cheerio": "^1.1.2",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"dayjs": "^1.11.19",
"dompurify": "^3.3.0",
"electron-debug": "^3.2.0",
"electron-localshortcut": "^3.2.1",
"electron-log": "^5.1.1",
"electron-store": "^8.1.0",
"electron-updater": "^6.3.9",
"fast-average-color": "^9.3.0",
"fast-xml-parser": "^5.3.0",
"format-duration": "^2.0.0",
"fuse.js": "^6.6.2",
"i18next": "^21.10.0",
"idb-keyval": "^6.2.1",
"immer": "^9.0.21",
"electron-log": "^5.4.3",
"electron-store": "^8.2.0",
"electron-updater": "^6.6.2",
"fast-average-color": "^9.5.0",
"fast-xml-parser": "^5.3.6",
"format-duration": "^3.0.2",
"fuse.js": "^7.1.0",
"i18next": "^25.6.2",
"icecast-metadata-stats": "^0.1.12",
"idb-keyval": "^6.2.2",
"immer": "^10.2.0",
"is-electron": "^2.2.2",
"lodash": "^4.17.21",
"lodash": "^4.17.23",
"md5": "^2.3.0",
"memoize-one": "^6.0.0",
"motion": "^12.18.1",
"motion": "^12.23.24",
"mpris-service": "^2.1.2",
"nanoid": "^3.3.3",
"nanoid": "^3.3.11",
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
"nuqs": "^2.7.1",
"overlayscrollbars": "^2.11.1",
"overlayscrollbars-react": "^0.5.6",
"qs": "^6.14.0",
"qs": "^6.14.2",
"react": "^19.1.0",
"react-call": "^1.8.1",
"react-dom": "^19.1.0",
"react-error-boundary": "^3.1.4",
"react-i18next": "^11.18.6",
"react-error-boundary": "^5.0.0",
"react-i18next": "^16.3.3",
"react-icons": "^5.5.0",
"react-image": "^4.1.0",
"react-loading-skeleton": "^3.5.0",
"react-player": "^2.11.0",
"react-router": "^6.16.0",
"react-router-dom": "^6.16.0",
"react-virtualized-auto-sizer": "^1.0.17",
"react-window": "^1.8.9",
"react-window-infinite-loader": "^1.0.9",
"react-player": "^2.16.0",
"react-router": "^7.13.1",
"react-split-pane": "^3.0.4",
"react-virtualized-auto-sizer": "^1.0.26",
"react-window": "1.8.11",
"react-window-v2": "npm:react-window@^2.2.3",
"semver": "^7.5.4",
"swiper": "^9.3.1",
"use-sync-external-store": "^1.5.0",
"string-to-color": "^2.2.2",
"wavesurfer.js": "^7.11.1",
"ws": "^8.18.2",
"zod": "^3.22.3",
"zustand": "^5.0.5"
@@ -136,45 +143,44 @@
"devDependencies": {
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
"@electron-toolkit/eslint-config-ts": "^3.0.0",
"@electron-toolkit/tsconfig": "^1.0.1",
"@electron-toolkit/tsconfig": "^2.0.0",
"@types/electron-localshortcut": "^3.1.0",
"@types/lodash": "^4.17.18",
"@types/md5": "^2.3.5",
"@types/node": "^22.15.32",
"@types/react": "^18.3.23",
"@types/react-dom": "^18.3.7",
"@types/react-window": "^1.8.5",
"@types/react-window-infinite-loader": "^1.0.6",
"@types/node": "^24.10.1",
"@types/react": "^19.2.5",
"@types/react-dom": "^19.2.3",
"@types/react-window": "^1.8.8",
"@types/source-map-support": "^0.5.10",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react": "^4.3.4",
"concurrently": "^7.1.0",
"cross-env": "^7.0.3",
"electron": "^38.5.0",
"electron-builder": "^26.0.12",
"electron-devtools-installer": "^3.2.0",
"electron-vite": "^3.1.0",
"@vitejs/plugin-react": "^5.1.1",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"electron": "^39.4.0",
"electron-builder": "^26.8.2",
"electron-devtools-installer": "^4.0.0",
"electron-vite": "^4.0.1",
"eslint": "^9.24.0",
"eslint-plugin-perfectionist": "^4.13.0",
"eslint-plugin-prettier": "^5.4.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19",
"i18next-parser": "^9.0.2",
"postcss-preset-mantine": "^1.17.0",
"prettier": "^3.5.3",
"prettier-plugin-packagejson": "^2.5.14",
"sass-embedded": "^1.89.0",
"stylelint": "^16.14.1",
"stylelint-config-css-modules": "^4.4.0",
"stylelint-config-recess-order": "^7.1.0",
"stylelint-config-standard": "^38.0.0",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"i18next-parser": "^9.3.0",
"postcss-preset-mantine": "^1.18.0",
"postcss-simple-vars": "^7.0.1",
"prettier": "^3.6.2",
"prettier-plugin-packagejson": "^2.5.19",
"stylelint": "^16.25.0",
"stylelint-config-css-modules": "^4.5.1",
"stylelint-config-recess-order": "^7.4.0",
"stylelint-config-standard": "^39.0.1",
"typescript": "^5.8.3",
"vite": "^6.4.1",
"vite": "^7.2.2",
"vite-plugin-conditional-import": "^0.1.7",
"vite-plugin-dynamic-import": "^1.6.0",
"vite-plugin-ejs": "^1.7.0",
"vite-plugin-pwa": "^1.0.3"
"vite-plugin-pwa": "^1.1.0"
},
"pnpm": {
"onlyBuiltDependencies": [
+2683 -2377
View File
File diff suppressed because it is too large Load Diff
+11
View File
@@ -1,5 +1,16 @@
module.exports = {
plugins: {
'postcss-preset-mantine': {},
'postcss-simple-vars': {
variables: {
'mantine-breakpoint-2xl': '120em',
'mantine-breakpoint-3xl': '160em',
'mantine-breakpoint-lg': '75em',
'mantine-breakpoint-md': '62em',
'mantine-breakpoint-sm': '48em',
'mantine-breakpoint-xl': '88em',
'mantine-breakpoint-xs': '36em',
},
},
},
};
+3
View File
@@ -7,7 +7,9 @@ import { version } from './package.json';
export default defineConfig({
build: {
cssMinify: 'esbuild',
emptyOutDir: true,
minify: 'esbuild',
outDir: path.resolve(__dirname, './out/remote'),
rollupOptions: {
input: {
@@ -21,6 +23,7 @@ export default defineConfig({
assetFileNames: '[name].[ext]',
chunkFileNames: '[name].js',
entryFileNames: '[name].js',
sourcemapExcludeSources: false,
},
},
sourcemap: true,
Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 32 KiB

+45
View File
@@ -0,0 +1,45 @@
import { execSync } from 'child_process';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
/**
* Electron-builder afterAllArtifactBuild hook
* Runs the app stream update script only for Linux builds
* Returns the metainfo file path to be included in published artifacts
*/
// This is not a typescript file, and is called by electron-builder, so we cannot use typescript features here.
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export default async function afterAllArtifactBuild(buildResult) {
// Check if this build includes Linux as a target
const isLinux = Array.from(buildResult.platformToTargets.keys()).some(
(platform) => platform.name === 'linux',
);
if (isLinux) {
const updateScriptPath = path.join(__dirname, 'update-app-stream.mjs');
const projectRoot = path.resolve(__dirname, '..');
const metainfoFile = path.resolve(projectRoot, 'org.jeffvli.feishin.metainfo.xml');
console.log('Running app stream update for Linux build...');
try {
execSync(`node ${updateScriptPath} --replace-if-version-missing`, {
cwd: projectRoot,
stdio: 'inherit',
});
// Return the metainfo file to be included in published artifacts
return [metainfoFile];
} catch (error) {
console.error('Failed to update app stream:', error.message);
throw error;
}
}
// Return empty array if not a Linux build
return [];
}
+32 -11
View File
@@ -3,30 +3,51 @@ import fs from 'fs';
import path from 'path';
const args = process.argv.slice(2);
if (args.length > 3) {
console.error('Usage: node update-app-stream.js [package-file] [date] [metainfo-file]');
// Parse flags and positional arguments
const flags = args.filter((arg) => arg.startsWith('--'));
const positionalArgs = args.filter((arg) => !arg.startsWith('--'));
const replaceIfVersionMissing = flags.includes('--replace-if-version-missing');
if (positionalArgs.length > 3) {
console.error(
'Usage: node update-app-stream.js [package-file] [date] [metainfo-file] [--replace-if-version-missing]',
);
process.exit(1);
}
const packageFile = args[0] || path.resolve(process.cwd(), 'package.json');
const packageFile = positionalArgs[0] || path.resolve(process.cwd(), 'package.json');
const packageContent = fs.readFileSync(packageFile, 'utf8');
const packageJson = JSON.parse(packageContent);
const version = packageJson.version;
const time = Math.floor((Date.parse(args[1]) || Date.now()) / 1000);
const metainfoFile = args[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
const time = Math.floor((Date.parse(positionalArgs[1]) || Date.now()) / 1000);
const metainfoFile =
positionalArgs[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
const parser = new XMLParser({ ignoreAttributes: false });
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
const metainfo = parser.parse(metainfoContent);
if (!metainfo.component.releases.release.find((release) => release['@_version'] === version)) {
metainfo.component.releases.release.unshift({
'@_date': new Date(time * 1000).toISOString().split('T')[0],
'@_type': version.includes('-') ? 'development' : 'stable',
'@_version': version,
});
const newRelease = {
'@_date': new Date(time * 1000).toISOString().split('T')[0],
'@_type': version.includes('-') ? 'development' : 'stable',
'@_version': version,
};
if (replaceIfVersionMissing) {
// Replace all releases with only the current version
metainfo.component.releases.release = [newRelease];
} else {
// Default behavior: add new release if it doesn't exist
const releaseExists =
metainfo.component.releases.release.findIndex(
(release) => release['@_version'] === version,
) !== -1;
if (!releaseExists) {
metainfo.component.releases.release.unshift(newRelease);
}
}
const builder = new XMLBuilder({ format: true, ignoreAttributes: false, indentBy: ' ' });
+87 -1
View File
@@ -1 +1,87 @@
"use strict";window.SERVER_URL="${SERVER_URL}";window.SERVER_NAME="${SERVER_NAME}";window.SERVER_TYPE="${SERVER_TYPE}";window.SERVER_LOCK=${SERVER_LOCK};
"use strict";
window.SERVER_URL = "${SERVER_URL}";
window.REMOTE_URL = "${REMOTE_URL}";
window.SERVER_NAME = "${SERVER_NAME}";
window.SERVER_TYPE = "${SERVER_TYPE}";
window.SERVER_LOCK = "${SERVER_LOCK}";
window.LEGACY_AUTHENTICATION = "${LEGACY_AUTHENTICATION}";
window.ANALYTICS_DISABLED = "${ANALYTICS_DISABLED}";
window.FS_GENERAL_ACCENT = "${FS_GENERAL_ACCENT}";
window.FS_GENERAL_ALBUM_BACKGROUND = "${FS_GENERAL_ALBUM_BACKGROUND}";
window.FS_GENERAL_ALBUM_BACKGROUND_BLUR = "${FS_GENERAL_ALBUM_BACKGROUND_BLUR}";
window.FS_GENERAL_ARTIST_BACKGROUND = "${FS_GENERAL_ARTIST_BACKGROUND}";
window.FS_GENERAL_ARTIST_BACKGROUND_BLUR = "${FS_GENERAL_ARTIST_BACKGROUND_BLUR}";
window.FS_GENERAL_BLUR_EXPLICIT_IMAGES = "${FS_GENERAL_BLUR_EXPLICIT_IMAGES}";
window.FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER = "${FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER}";
window.FS_GENERAL_ENABLE_GRID_MULTI_SELECT = "${FS_GENERAL_ENABLE_GRID_MULTI_SELECT}";
window.FS_GENERAL_EXTERNAL_LINKS = "${FS_GENERAL_EXTERNAL_LINKS}";
window.FS_GENERAL_FOLLOW_CURRENT_SONG = "${FS_GENERAL_FOLLOW_CURRENT_SONG}";
window.FS_GENERAL_FOLLOW_SYSTEM_THEME = "${FS_GENERAL_FOLLOW_SYSTEM_THEME}";
window.FS_GENERAL_HOME_FEATURE = "${FS_GENERAL_HOME_FEATURE}";
window.FS_GENERAL_HOME_FEATURE_STYLE = "${FS_GENERAL_HOME_FEATURE_STYLE}";
window.FS_GENERAL_LANGUAGE = "${FS_GENERAL_LANGUAGE}";
window.FS_GENERAL_LAST_FM = "${FS_GENERAL_LAST_FM}";
window.FS_GENERAL_LASTFM_API_KEY = "${FS_GENERAL_LASTFM_API_KEY}";
window.FS_GENERAL_MUSIC_BRAINZ = "${FS_GENERAL_MUSIC_BRAINZ}";
window.FS_GENERAL_NATIVE_ASPECT_RATIO = "${FS_GENERAL_NATIVE_ASPECT_RATIO}";
window.FS_GENERAL_PATH_REPLACE = "${FS_GENERAL_PATH_REPLACE}";
window.FS_GENERAL_PATH_REPLACE_WITH = "${FS_GENERAL_PATH_REPLACE_WITH}";
window.FS_GENERAL_PLAYERBAR_OPEN_DRAWER = "${FS_GENERAL_PLAYERBAR_OPEN_DRAWER}";
window.FS_GENERAL_PRIMARY_SHADE = "${FS_GENERAL_PRIMARY_SHADE}";
window.FS_GENERAL_RESUME = "${FS_GENERAL_RESUME}";
window.FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR = "${FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR}";
window.FS_GENERAL_SHOW_RATINGS = "${FS_GENERAL_SHOW_RATINGS}";
window.FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR = "${FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR}";
window.FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION = "${FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION}";
window.FS_GENERAL_SIDEBAR_COLLAPSE_SHARED = "${FS_GENERAL_SIDEBAR_COLLAPSE_SHARED}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_LIST = "${FS_GENERAL_SIDEBAR_PLAYLIST_LIST}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_SORTING = "${FS_GENERAL_SIDEBAR_PLAYLIST_SORTING}";
window.FS_GENERAL_SIDE_QUEUE_TYPE = "${FS_GENERAL_SIDE_QUEUE_TYPE}";
window.FS_GENERAL_THEME = "${FS_GENERAL_THEME}";
window.FS_GENERAL_THEME_DARK = "${FS_GENERAL_THEME_DARK}";
window.FS_GENERAL_THEME_LIGHT = "${FS_GENERAL_THEME_LIGHT}";
window.FS_GENERAL_USE_THEME_ACCENT_COLOR = "${FS_GENERAL_USE_THEME_ACCENT_COLOR}";
window.FS_GENERAL_USE_THEME_PRIMARY_SHADE = "${FS_GENERAL_USE_THEME_PRIMARY_SHADE}";
window.FS_GENERAL_ZOOM_FACTOR = "${FS_GENERAL_ZOOM_FACTOR}";
window.FS_PLAYBACK_MEDIA_SESSION = "${FS_PLAYBACK_MEDIA_SESSION}";
window.FS_PLAYBACK_WEB_AUDIO = "${FS_PLAYBACK_WEB_AUDIO}";
window.FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE = "${FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE}";
window.FS_PLAYBACK_PRESERVE_PITCH = "${FS_PLAYBACK_PRESERVE_PITCH}";
window.FS_PLAYBACK_SCROBBLE_ENABLED = "${FS_PLAYBACK_SCROBBLE_ENABLED}";
window.FS_PLAYBACK_SCROBBLE_NOTIFY = "${FS_PLAYBACK_SCROBBLE_NOTIFY}";
window.FS_PLAYBACK_SCROBBLE_AT_DURATION = "${FS_PLAYBACK_SCROBBLE_AT_DURATION}";
window.FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE = "${FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE}";
window.FS_PLAYBACK_TRANSCODE_ENABLED = "${FS_PLAYBACK_TRANSCODE_ENABLED}";
window.FS_DISCORD_ENABLED = "${FS_DISCORD_ENABLED}";
window.FS_DISCORD_CLIENT_ID = "${FS_DISCORD_CLIENT_ID}";
window.FS_DISCORD_DISPLAY_TYPE = "${FS_DISCORD_DISPLAY_TYPE}";
window.FS_DISCORD_LINK_TYPE = "${FS_DISCORD_LINK_TYPE}";
window.FS_DISCORD_SHOW_AS_LISTENING = "${FS_DISCORD_SHOW_AS_LISTENING}";
window.FS_DISCORD_SHOW_PAUSED = "${FS_DISCORD_SHOW_PAUSED}";
window.FS_DISCORD_SHOW_SERVER_IMAGE = "${FS_DISCORD_SHOW_SERVER_IMAGE}";
window.FS_DISCORD_SHOW_STATE_ICON = "${FS_DISCORD_SHOW_STATE_ICON}";
window.FS_LYRICS_FETCH = "${FS_LYRICS_FETCH}";
window.FS_LYRICS_FOLLOW = "${FS_LYRICS_FOLLOW}";
window.FS_LYRICS_DELAY_MS = "${FS_LYRICS_DELAY_MS}";
window.FS_LYRICS_PREFER_LOCAL = "${FS_LYRICS_PREFER_LOCAL}";
window.FS_LYRICS_SHOW_MATCH = "${FS_LYRICS_SHOW_MATCH}";
window.FS_LYRICS_SHOW_PROVIDER = "${FS_LYRICS_SHOW_PROVIDER}";
window.FS_LYRICS_ENABLE_AUTO_TRANSLATION = "${FS_LYRICS_ENABLE_AUTO_TRANSLATION}";
window.FS_LYRICS_TRANSLATION_API_KEY = "${FS_LYRICS_TRANSLATION_API_KEY}";
window.FS_LYRICS_TRANSLATION_TARGET_LANGUAGE = "${FS_LYRICS_TRANSLATION_TARGET_LANGUAGE}";
window.FS_LYRICS_ALIGNMENT = "${FS_LYRICS_ALIGNMENT}";
window.FS_AUTO_DJ_ENABLED = "${FS_AUTO_DJ_ENABLED}";
window.FS_AUTO_DJ_ITEM_COUNT = "${FS_AUTO_DJ_ITEM_COUNT}";
window.FS_AUTO_DJ_TIMING = "${FS_AUTO_DJ_TIMING}";
window.FS_CSS_CONTENT = "${FS_CSS_CONTENT}";
window.FS_CSS_ENABLED = "${FS_CSS_ENABLED}";
window.FS_FONT_TYPE = "${FS_FONT_TYPE}";
window.FS_FONT_BUILT_IN = "${FS_FONT_BUILT_IN}";
window.FS_FONT_SYSTEM = "${FS_FONT_SYSTEM}";
+7 -2
View File
@@ -1,4 +1,4 @@
import { PostProcessorModule, StringMap, TOptions } from 'i18next';
import { PostProcessorModule, TOptions } from 'i18next';
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
@@ -207,7 +207,12 @@ const ignoreSentenceCaseLanguages = ['de'];
const sentenceCasePostProcessor: PostProcessorModule = {
name: 'sentenceCase',
process: (value: string, _key: string, _options: TOptions<StringMap>, translator: any) => {
process: (
value: string,
_key: string,
_options: TOptions<Record<string, string>>,
translator: any,
) => {
const sentences = value.split('. ');
return sentences
+16 -11
View File
@@ -1,23 +1,23 @@
{
"action": {
"addToFavorites": "إضافة الى $t(entity.favorite_other)",
"addToPlaylist": "إضافة الى $t(entity.playlist_one)",
"addToFavorites": "إضافة الى $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "إضافة الى $t(entity.playlist, {\"count\": 1})",
"clearQueue": "مسح قائمة الإنتظار",
"createPlaylist": "إنشاء $t(entity.playlist_one)",
"deletePlaylist": "حذف $t(entity.playlist_one)",
"createPlaylist": "إنشاء $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
"deselectAll": "إلغاء تحديد الكل",
"editPlaylist": "تعديل $t(entity.playlist_one)",
"editPlaylist": "تعديل $t(entity.playlist, {\"count\": 1})",
"goToPage": "اذهب الى صفحة",
"moveToNext": "الذهاب الى التالي",
"moveToBottom": "الذهاب الى الأسفل",
"moveToTop": "الذهاب الى الأعلى",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "حذف من $t(entity.favorite_other)",
"removeFromPlaylist": "حذف من $t(entity.playlist_one)",
"removeFromFavorites": "حذف من $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "حذف من $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "حذف من قائمة الإنتظار",
"setRating": "تحديد التقييم",
"toggleSmartPlaylistEditor": "تشغيل / إطفاء وضع التعديل لـ $t(entity.smartPlaylist)",
"viewPlaylists": "إظهار $t(entity.playlist_other)",
"viewPlaylists": "إظهار $t(entity.playlist, {\"count\": 2})",
"openIn": {
"lastfm": "فتح في Last.fm",
"musicbrainz": "فتح في MusicBrainz"
@@ -59,7 +59,7 @@
"configure": "تعديل",
"confirm": "تأكيد",
"create": "إنشاء",
"currentSong": "$t(entity.track_one) الحالي",
"currentSong": "$t(entity.track, {\"count\": 1}) الحالي",
"decrease": "تنقيص",
"delete": "حذف",
"descending": "تنازلي",
@@ -102,7 +102,7 @@
"path": "المسار",
"playerMustBePaused": "يجب إيقاف المشغل",
"preview": "معاينة",
"previousSong": "$t(entity.track_one) السابق",
"previousSong": "$t(entity.track, {\"count\": 1}) السابق",
"quit": "خروج",
"random": "عشوائي",
"rating": "التقييم",
@@ -117,7 +117,12 @@
"saveAndReplace": "حفظ واستبدال",
"saveAs": "حفظ بإسم",
"search": "بحث",
"setting": "إعداد",
"setting_zero": "إعداد",
"setting_one": "",
"setting_two": "",
"setting_few": "",
"setting_many": "",
"setting_other": "",
"share": "نشر",
"size": "حجم",
"sortOrder": "الترتيب",
+566 -109
View File
@@ -2,46 +2,55 @@
"page": {
"sidebar": {
"myLibrary": "La meva llibreria",
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"artists": "$t(entity.artist, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"home": "$t(common.home)",
"playlists": "$t(entity.playlist_other)",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"tracks": "$t(entity.track_other)",
"nowPlaying": "ara sona",
"shared": "$t(entity.playlist_other) compartida"
"settings": "$t(common.setting, {\"count\": 2})",
"tracks": "$t(entity.track, {\"count\": 2})",
"nowPlaying": "s'està reproduint",
"shared": "$t(entity.playlist, {\"count\": 2}) compartides",
"favorites": "$t(entity.favorite, {\"count\": 2})",
"radio": "$t(entity.radioStation, {\"count\": 2})",
"collections": "col·leccions"
},
"albumArtistDetail": {
"relatedArtists": "$t(entity.artist_other) similars",
"viewAllTracks": "veure totes les $t(entity.track_other)",
"relatedArtists": "$t(entity.artist, {\"count\": 2}) similars",
"viewAllTracks": "mostra totes les $t(entity.track, {\"count\": 2})",
"about": "Sobre {{artist}}",
"appearsOn": "apareix a",
"recentReleases": "Llançaments recents",
"viewDiscography": "Mosta la discografia",
"topSongs": "millors cançons",
"topSongsFrom": "les millors cançons de {{title}}",
"viewAll": "mostra-ho tot"
"viewAll": "mostra-ho tot",
"groupingTypeAll": "tots els tipus de llançaments",
"groupingTypePrimary": "tipus principals de llançament",
"favoriteSongs": "Cançons preferides",
"topSongsCommunity": "comunitat",
"topSongsPersonal": "personal",
"favoriteSongsFrom": "cançons preferides de {{title}}"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"albumDetail": {
"moreFromArtist": "més d'aquest $t(entity.artist_one)",
"moreFromArtist": "més d'aquest $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "més de {{item}}",
"released": "publicat"
},
"albumList": {
"title": "$t(entity.album_other)",
"title": "$t(entity.album, {\"count\": 2})",
"artistAlbums": "àlbums de {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})"
},
"appMenu": {
"quit": "$t(common.quit)",
"settings": "$t(common.setting_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"goBack": "torna enrere",
"goForward": "avança",
"collapseSidebar": "replega la barra lateral",
@@ -51,7 +60,11 @@
"version": "versió {{version}}",
"openBrowserDevtools": "obre les eines de desenvolupament del navegador",
"privateModeOff": "desactiva el mode privat",
"privateModeOn": "activa el mode privat"
"privateModeOn": "activa el mode privat",
"commandPalette": "obre la paleta d'ordres",
"selectMusicFolder": "selecciona una carpeta de música",
"noMusicFolder": "no s'ha seleccionat cap carpeta de música",
"multipleMusicFolders": "{{count}} carpetes de música seleccionades"
},
"contextMenu": {
"addFavorite": "$t(action.addToFavorites)",
@@ -76,13 +89,15 @@
"showDetails": "informació",
"numberSelected": "{{count}} seleccionat",
"shareItem": "comparteix l'element",
"goToAlbumArtist": "Ves a $t(entity.albumArtist_one)",
"goToAlbum": "ves a $t(entity.album_one)"
"goToAlbumArtist": "Ves a $t(entity.albumArtist, {\"count\": 1})",
"goToAlbum": "ves a $t(entity.album, {\"count\": 1})",
"moveItems": "$t(action.moveItems)",
"goTo": "ves a"
},
"genreList": {
"title": "$t(entity.genre_other)",
"showAlbums": "mostra $t(entity.album_other) $t(entity.genre_one)",
"showTracks": "mostra $t(entity.track_other) $t(entity.genre_one)"
"title": "$t(entity.genre, {\"count\": 2})",
"showAlbums": "mostra $t(entity.album, {\"count\": 2}) de $t(entity.genre, {\"count\": 1})",
"showTracks": "mostra $t(entity.track, {\"count\": 2}) de $t(entity.genre, {\"count\": 1})"
},
"home": {
"title": "$t(common.home)",
@@ -90,15 +105,16 @@
"newlyAdded": "afegits recentment",
"mostPlayed": "els més reproduïts",
"recentlyPlayed": "reproduït recentment",
"recentlyReleased": "estrenat fa poc"
"recentlyReleased": "estrenat fa poc",
"genres": "$t(entity.genre, {\"count\": 2})"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
"title": "$t(entity.playlist, {\"count\": 2})"
},
"trackList": {
"title": "$t(entity.track_other)",
"title": "$t(entity.track, {\"count\": 2})",
"artistTracks": "pistes de {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)"
"genreTracks": "$t(entity.track, {\"count\": 2}) \"{{genre}}\""
},
"manageServers": {
"username": "nom d'usuari",
@@ -136,7 +152,25 @@
"generalTab": "general",
"hotkeysTab": "tecles d'accés ràpid",
"playbackTab": "reproducció",
"windowTab": "finestra"
"windowTab": "finestra",
"analytics": "analítiques",
"updates": "actualitza",
"cache": "memòria cau",
"application": "aplicació",
"queryBuilder": "constructor de consultes",
"theme": "tema",
"controls": "controls",
"sidebar": "barra lateral",
"remote": "remot",
"exportImport": "importa/exporta",
"scrobble": "scrobble",
"audio": "àudio",
"lyrics": "lletra",
"transcoding": "transcodificació",
"discord": "discord",
"logger": "registres",
"playerFilters": "filtres de reproducció",
"lyricsDisplay": "mostra la lletra"
},
"globalSearch": {
"commands": {
@@ -153,6 +187,28 @@
},
"playlist": {
"reorder": "el reordenament només s'activa quan s'ordena per id"
},
"favorites": {
"title": "$t(entity.favorite, {\"count\": 2})"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"radioList": {
"title": "emissores de ràdio"
},
"windowBar": {
"paused": "(en pausa) ",
"privateMode": "(mode privat)"
},
"collections": {
"overrideExisting": "sobreescriu existents",
"saveAsCollection": "desa com a col·lecció"
},
"releasenotes": {
"commitsSinceStable": "commits des de {{stable}}",
"noNewCommits": "no hi ha hagut commits en aquest període",
"noStableReleaseToCompare": "no hi ha actualitzacions disponibles amb les quals comparar"
}
},
"common": {
@@ -224,9 +280,9 @@
"action_other": "accions",
"newVersion": "s'ha instal·lat una nova versió ({{version}})",
"viewReleaseNotes": "veure les notes de la versió",
"currentSong": "$t(entity.track_one) actual",
"currentSong": "$t(entity.track, {\"count\": 1}) actual",
"limit": "límit",
"previousSong": "$t(entity.track_one) anterior",
"previousSong": "$t(entity.track, {\"count\": 1}) anterior",
"trackNumber": "pista",
"albumGain": "guany de l'àlbum",
"albumPeak": "pic de l'àlbum",
@@ -250,7 +306,9 @@
"playerMustBePaused": "cal pausar el reproductor",
"restartRequired": "cal reiniciar",
"sampleRate": "freqüència de mostreig",
"setting": "configuració",
"setting_one": "configuració",
"setting_many": "configuracions",
"setting_other": "configuracions",
"trackGain": "guany de pista",
"trackPeak": "pic de pista",
"gap": "espera",
@@ -260,7 +318,24 @@
"private": "privat",
"public": "públic",
"recordLabel": "segell discogràfic",
"releaseType": "tipus de llançament"
"releaseType": "tipus de llançament",
"doNotShowAgain": "no tornis a mostrar això",
"view": "mostra",
"externalLinks": "enllaços externs",
"faster": "més ràpid",
"noFilters": "cap filtre configurat",
"slower": "més lent",
"sort": "ordre",
"gridRows": "files de la quadrícula",
"tableColumns": "columnes de la taula",
"itemsMore": "{{count}} més",
"countSelected": "{{count}} seleccionats",
"retry": "reintenta",
"example": "exemple",
"mood": "estat d'ànim",
"filter_single": "senzill",
"filter_multiple": "multi",
"rename": "reanomena"
},
"entity": {
"album_one": "àlbum",
@@ -287,7 +362,7 @@
"playlistWithCount_one": "{{count}} llista de reproducció",
"playlistWithCount_many": "{{count}} llistes de reproducció",
"playlistWithCount_other": "{{count}} llistes de reproducció",
"smartPlaylist": "$t(entity.playlist_one) intel·ligent",
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) intel·ligent",
"play_one": "{{count}} reproducció",
"play_many": "{{count}} reproduccions",
"play_other": "{{count}} reproduccions",
@@ -314,37 +389,44 @@
"song_other": "cançons",
"favorite_one": "preferit",
"favorite_many": "preferits",
"favorite_other": "preferits"
"favorite_other": "preferits",
"radioStation_one": "emissora de ràdio",
"radioStation_many": "emissores de ràdio",
"radioStation_other": "emissores de ràdio",
"radioStationWithCount_one": "{{count}} emissora de ràdio",
"radioStationWithCount_many": "{{count}} emissores de ràdio",
"radioStationWithCount_other": "{{count}} emissores de ràdio"
},
"form": {
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"title": "afegir a una $t(entity.playlist_one)",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"title": "afegir a una $t(entity.playlist, {\"count\": 1})",
"input_skipDuplicates": "salta't els duplicats",
"success": "s'ha afegit $t(entity.trackWithCount, {\"count\": {{message}} }) a $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"create": "crea $t(entity.playlist_one) {{playlist}}",
"searchOrCreate": "cerca $t(entity.playlist_other) o tipus per crear-ne un de nou"
"create": "crea $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "cerca $t(entity.playlist, {\"count\": 2}) o escriu per crear-ne una de nova"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"success": "$t(entity.playlist_one) s'ha creat amb èxit",
"title": "crear una $t(entity.playlist_one)",
"success": "$t(entity.playlist, {\"count\": 1}) s'ha creat amb èxit",
"title": "crea una $t(entity.playlist, {\"count\": 1})",
"input_public": "públic"
},
"deletePlaylist": {
"success": "$t(entity.playlist_one) s'ha eliminat amb èxit",
"title": "elimina la $t(entity.playlist_one)",
"input_confirm": "escriviu el nom de la $t(entity.playlist_one) per confirmar"
"success": "$t(entity.playlist, {\"count\": 1}) s'ha eliminat amb èxit",
"title": "elimina la $t(entity.playlist, {\"count\": 1})",
"input_confirm": "escriviu el nom de la $t(entity.playlist, {\"count\": 1}) per confirmar"
},
"editPlaylist": {
"success": "$t(entity.playlist_one) s'ha actualitzat amb èxit",
"title": "editar la $t(entity.playlist_one)",
"publicJellyfinNote": "Per algun motiu, Jellyfin no exposa si una llista de reproducció és pública o no. Si voleu que es mantingui pública, seleccioneu la següent entrada"
"success": "$t(entity.playlist, {\"count\": 1}) s'ha actualitzat amb èxit",
"title": "editar la $t(entity.playlist, {\"count\": 1})",
"publicJellyfinNote": "Per algun motiu, Jellyfin no exposa si una llista de reproducció és pública o no. Si voleu que es mantingui pública, seleccioneu la següent entrada",
"editNote": "es recomana no editar manualment les llistes de reproducció grans. segur que accepteu el risc de perdre dades si sobreescriviu la llista de reproducció existent?"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"input_name": "$t(common.name)",
"title": "cerca de lletres"
},
@@ -361,7 +443,10 @@
"success": "servidor afegit correctament",
"title": "afegeix un servidor",
"input_preferInstantMix": "prefereix el mix instantani",
"input_preferInstantMixDescription": "utilitza només el mix instantani per obtenir cançons similars. útil si teniu complements que modifiquin aquest comportament"
"input_preferInstantMixDescription": "utilitza només el mix instantani per obtenir cançons similars. útil si teniu complements que modifiquin aquest comportament",
"input_preferRemoteUrl": "prefereix l'url públic",
"input_remoteUrl": "url públic",
"input_remoteUrlPlaceholder": "opcional: url públic per característiques externes"
},
"shareItem": {
"description": "descripció",
@@ -369,7 +454,9 @@
"setExpiration": "estableix expiració",
"success": "s'ha copiat l'enllaç de compartició al porta-retalls (o feu clic aquí per obrir-lo)",
"expireInvalid": "la data d'expiració ha de ser al futur",
"createFailed": "no s'ha pogut crear el recurs compartit (està habilitat, l'ús compartit?)"
"createFailed": "no s'ha pogut crear el recurs compartit (està habilitat, l'ús compartit?)",
"copyToClipboard": "Copiar al porta-retalls: Ctrl+C, Enter",
"successMustClick": "Compartició creada correctament. Feu clic aquí per obrir-la."
},
"updateServer": {
"success": "s'ha actualitzat el servidor amb èxit",
@@ -378,24 +465,58 @@
"queryEditor": {
"title": "editor de consultes",
"input_optionMatchAll": "coincidències totals",
"input_optionMatchAny": "coincidències parcials"
"input_optionMatchAny": "coincidències parcials",
"addRuleGroup": "afegeix el grup de regles",
"removeRuleGroup": "elimina el grup de regles",
"resetToDefault": "reestableix als valors predeterminats",
"clearFilters": "neteja els filtres"
},
"privateMode": {
"enabled": "mode privat actiu; l'estat de reproducció ara està ocult d'integracions externes",
"disabled": "mode privat inactiu; l'estat de reproducció ara és visible per les integracions externes",
"title": "mode privat"
},
"largeFetchConfirmation": {
"title": "afegeix elements a la cua",
"description": "Aquesta acció afegirà tots els elements a la vista filtrada actual"
},
"shuffleAll": {
"title": "reprodueix a l'atzar",
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "quantes cançons?",
"input_minYear": "de l'any",
"input_maxYear": "fins a l'any",
"input_played": "reprodueix el filtre",
"input_played_optionAll": "totes les pistes",
"input_played_optionUnplayed": "només les pistes sense reproduir",
"input_played_optionPlayed": "només les pistes reproduïdes"
},
"createRadioStation": {
"success": "emissora de ràdio creada amb èxit",
"title": "crea una emissora de ràdio",
"input_homepageUrl": "URL de la pàgina d'inici",
"input_name": "nom",
"input_streamUrl": "URL de transmissió"
},
"saveQueue": {
"success": "cua de reproducció desada al servidor"
},
"lyricsExport": {
"export": "exporta la lletra",
"input_synced": "exporta la lletra sincronitzada",
"input_offset": "$t(setting.lyricOffset)"
}
},
"action": {
"addToFavorites": "afegir als $t(entity.favorite_other)",
"addToPlaylist": "afegir a $t(entity.playlist_one)",
"createPlaylist": "crear $t(entity.playlist_one)",
"deletePlaylist": "elimina la $t(entity.playlist_one)",
"editPlaylist": "edita la $t(entity.playlist_one)",
"addToFavorites": "afegeix a $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "afegeix a $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "crea $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "elimina la $t(entity.playlist, {\"count\": 1})",
"editPlaylist": "edita $t(entity.playlist, {\"count\": 1})",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "elimina dels $t(entity.favorite_other)",
"removeFromPlaylist": "elimina de $t(entity.playlist_one)",
"clearQueue": "buidar la cua",
"removeFromFavorites": "elimina dels $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "elimina de $t(entity.playlist, {\"count\": 1})",
"clearQueue": "buida la cua",
"removeFromQueue": "treure de la cua",
"goToPage": "anar a la pàgina",
"openIn": {
@@ -403,12 +524,28 @@
"musicbrainz": "Obrir a MusicBrainz"
},
"deselectAll": "deselecciona-ho tot",
"viewPlaylists": "veure$t(entity.playlist_other)",
"viewPlaylists": "veure $t(entity.playlist, {\"count\": 2})",
"moveToNext": "passar al següent",
"moveToBottom": "anar al final",
"moveToTop": "anar al principi",
"setRating": "Qualifica",
"toggleSmartPlaylistEditor": "canvia l'editor $t(entity.smartPlaylist)"
"toggleSmartPlaylistEditor": "canvia l'editor $t(entity.smartPlaylist)",
"downloadStarted": "s'ha iniciat la descàrrega de {{count}} elements",
"moveUp": "mou amunt",
"moveDown": "mou avall",
"holdToMoveToTop": "mantingueu premut per moure al capdamunt",
"holdToMoveToBottom": "mantingueu premut per moure al capdavall",
"moveItems": "mou elements",
"shuffle": "mescla",
"shuffleAll": "mescla-ho tot",
"shuffleSelected": "mescla els seleccionats",
"viewMore": "mostra'n més",
"createRadioStation": "crea $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "elimina $t(entity.radioStation, {\"count\": 1})",
"addOrRemoveFromSelection": "afegeix o elimina de la selecció",
"selectRangeOfItems": "selecciona un interval d'elements",
"selectAll": "selecciona-ho tot",
"openApplicationDirectory": "obre el directori de l'aplicació"
},
"setting": {
"language_description": "estableix l'idioma de l'aplicació ($t(common.restartRequired))",
@@ -416,15 +553,14 @@
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"playButtonBehavior_optionPlay": "$t(player.play)",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"font": "tipus de lletra",
"fontType": "selecció de tipus de lletra",
"fontType_optionBuiltIn": "tipus de lletra integrats",
"fontType_optionCustom": "tipus de lletra personalitzats",
"fontType_optionSystem": "tipus de lletra del sistema",
"disableAutomaticUpdates": "desactivar les actualitzacions automàtiques",
"disableLibraryUpdateOnStartup": "desactiva la comprovació de noves versions a l'inici",
"homeConfiguration": "configuració de la pàgina d'inici",
"sidebarConfiguration": "configuració de la barra lateral",
@@ -434,7 +570,7 @@
"sidePlayQueueStyle_optionAttached": "unida",
"sidePlayQueueStyle_optionDetached": "separada",
"audioDevice": "dispositiu d'àudio",
"audioDevice_description": "seleccioneu el dispositiu d'àudio que voleu utilitzar per a la reproducció (només pel reproductor web)",
"audioDevice_description": "seleccioneu el dispositiu d'àudio que voleu utilitzar per a la reproducció",
"audioPlayer": "reproductor d'àudio",
"audioPlayer_description": "seleccioneu el reproductor d'àudio que voleu utilitzar per a la reproducció",
"sidebarConfiguration_description": "selecciona els elements i l'ordre en què apareixen a la barra lateral",
@@ -480,9 +616,9 @@
"customFontPath_description": "estableix la ruta a una font personalitzada per utilitzar-la a l'aplicació",
"discordApplicationId": "id d'aplicació de {{discord}}",
"discordApplicationId_description": "l'id d'aplicació per l'estat d'activitat de {{discord}} (per defecte, {{defaultId}})",
"discordPausedStatus": "mosta l'estat d'activitat quan està en pausa",
"discordPausedStatus": "mostra l'estat d'activitat quan està en pausa",
"discordPausedStatus_description": "si està activat, l'estat es mostrarà quan el reproductor estigui pausat",
"discordIdleStatus": "mosta l'estat d'activitat en inactivitat",
"discordIdleStatus": "mosta l'estat d'activitat quan està inactiu",
"discordIdleStatus_description": "si està activat, s'actualitzarà l'estat mentre el reproductor estigui inactiu",
"discordListening": "mosta l'estat com escoltant",
"discordListening_description": "mosta l'estat com escoltant en comptes de jugant",
@@ -490,14 +626,10 @@
"discordServeImage": "serveix imatges de {{discord}} des del servidor",
"discordServeImage_description": "comparteix la caràtula per l'estat d'activitat de {{discord}} des del servidor; només disponible per Jellyfin i Navidrome. {{discord}} fa ser un bot per trobar les imatges, de manera que el vostre servidor ha de ser visible per l'internet públic",
"discordUpdateInterval": "interval d'actualització de l'estat d'activitat de {{discord}}",
"doubleClickBehavior": "posa en cua totes les pistes cercades en fer doble clic",
"doubleClickBehavior_description": "si està actiu, totes les pistes coincidents en una cerca de pistes es posaran a la cua. altrament, només la que seleccioneu s'afegirà a la cua",
"externalLinks": "mostra enllaços externs",
"externalLinks_description": "permet mostrar enllaços externs (Last.fm, MusicBrainz) a les pàgines d'artista/àlbum",
"exitToTray": "surt a la safata",
"exitToTray_description": "en sortir de l'aplicació, minimitza-la a la safa del sistema",
"floatingQueueArea": "mostra la zona flotant de la cua",
"floatingQueueArea_description": "mostra una icona flotant al costat dret de la pantalla per veure la cua de reproducció",
"followLyric": "segueix la lletra actual",
"followLyric_description": "desplaça la lletra a la posició de reproducció actual",
"preferLocalLyrics": "prefereix les lletres locals",
@@ -507,8 +639,6 @@
"gaplessAudio": "àudio sense pauses",
"gaplessAudio_description": "estableix la configuració d'àudio sense pauses per mpv",
"gaplessAudio_optionWeak": "feble (recomanat)",
"genreBehavior": "comportament predeterminat per les pàgines de gènere",
"genreBehavior_description": "determina si clicar sobre un gènere obre per defecte la llista de pistes o d'àlbums",
"globalMediaHotkeys": "tecles de drecera globals",
"globalMediaHotkeys_description": "activa o desactiva l'ús de les tecles multimèdia del sistema per controlar la reproducció",
"homeConfiguration_description": "configura quins objectes es mostren, i en quin ordre, a la pàgina d'inici",
@@ -554,7 +684,7 @@
"lyricFetch": "extreu la lletra d'internet",
"lyricFetch_description": "extreu la lletra de diverses fonts d'internet",
"lyricFetchProvider": "proveïdors de lletres",
"lyricFetchProvider_description": "selecciona els proveïdors de lletres. l'ordre en què apareixen és l'ordre en què es consultaran",
"lyricFetchProvider_description": "selecciona els proveïdors de lletres",
"lyricOffset": "desfasament de la lletra (ms)",
"lyricOffset_description": "desplaça la lletra els mil·lisegons especificats",
"minimizeToTray": "minimitza a la safata",
@@ -578,8 +708,6 @@
"playbackStyle_optionNormal": "normal",
"playButtonBehavior": "comportament del botó de reproducció",
"playButtonBehavior_description": "estableix el comportament predeterminat del botó de reproducció quan s'afegeixen cançons a la cua",
"playerAlbumArtResolution": "resolució de la caràtula de l'àlbum al reproductor",
"playerAlbumArtResolution_description": "la resolució de la previsualització gran de la caràtula al reproductor. si és més alta, serà més nítida, però es carregarà més lent. el valor predeterminat 0 vol dir automàtic",
"playerbarOpenDrawer": "activa el reproductor en pantalla completa",
"playerbarOpenDrawer_description": "permet fer clic a la barra de reproducció per obrir el reproductor de pantalla completa",
"remotePassword": "contrasenya del servidor de control remot",
@@ -662,9 +790,9 @@
"releaseChannel_optionLatest": "última versió",
"releaseChannel_optionBeta": "beta",
"releaseChannel": "canal de versions",
"releaseChannel_description": "tria entre versions estables i versions beta per les actualitzacions automàtiques",
"releaseChannel_description": "trieu entre versions estables i beta o alfa (diàries) per les actualitzacions automàtiques",
"mediaSession": "activa Media Session",
"mediaSession_description": "activa la integració amb Windows Media Session per mostrar els controls multimèdia i les metadades a l'indicador de volum del sistema i la pantalla de bloqueig (només per Windows)",
"mediaSession_description": "activa la integració amb Media Session per mostrar els controls multimèdia i les metadades a l'indicador de volum del sistema i la pantalla de bloqueig",
"crossfadeStyle": "estil de fosa encadenada",
"discordRichPresence": "estat d'activitat de {{discord}}",
"enableAutoTranslation_description": "activa la traducció automàtica en carregar la lletra",
@@ -679,17 +807,108 @@
"exportImportSettings_importSuccess": "la configuració s'ha importat correctament!",
"exportImportSettings_notValidJSON": "el fitxer que heu seleccionat no és un JSON vàlid",
"exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" és incorrecte: {{reason}}",
"language": "llengua"
"language": "llengua",
"notify": "activa les notificacions de cançons",
"notify_description": "mostra notificacions quan la cançó actual canviï",
"transcode": "activa la transcodificació",
"autoDJ": "DJ automàtic",
"autoDJ_description": "afegeix cançons similars a la cua automàticament",
"autoDJ_itemCount": "número d'elements",
"autoDJ_itemCount_description": "el nombre d'elements que s'intenten afegir a la cua quan el DJ automàtic està activat",
"autoDJ_timing": "temps",
"autoDJ_timing_description": "el nombre de cançons que han de quedar a la cua per activar el DJ automàtic",
"analyticsDisable": "Desactiva les analítiques basades en l'ús",
"analyticsDisable_description": "S'envien dades d'ús anonimitzades al desenvolupador per ajudar a millorar l'aplicació",
"followCurrentSong_description": "desplaça automàticament la cua de reproducció a la cançó en reproducció",
"followCurrentSong": "segueix la cançó actual",
"logLevel": "nivell de registre",
"logLevel_description": "estableix el nivell mínim de registre que s'ha de mostrar. debug mostra tots els missatges, error mostra només els errors",
"logLevel_optionDebug": "debug",
"logLevel_optionError": "error",
"logLevel_optionInfo": "info",
"logLevel_optionWarn": "avís",
"playerFilters": "filtra les cançons de la cua",
"playerFilters_description": "evita afegir cançons a la cua segons els següents criteris",
"playerbarSlider": "barra lliscadora de reproducció",
"playerbarSlider_description": "la forma d'ona no es recomana si utilitzeu una connexió d'internet lenta o mesurada",
"playerbarSliderType_optionSlider": "lliscador",
"playerbarSliderType_optionWaveform": "forma d'ona",
"playerbarWaveformAlign": "alineament de la forma d'ona",
"playerbarWaveformAlign_optionTop": "superior",
"playerbarWaveformAlign_optionCenter": "centrat",
"playerbarWaveformAlign_optionBottom": "inferior",
"playerbarWaveformBarWidth": "amplada de la forma d'ona",
"playerbarWaveformGap": "buits de la forma d'ona",
"playerbarWaveformRadius": "radi de la forma d'ona",
"showLyricsInSidebar_description": "s'afegirà un tauler a la cua de reproducció que mostra la lletra",
"showLyricsInSidebar": "mostra la lletra a la barra lateral del reproductor",
"showVisualizerInSidebar_description": "s'afegirà un tauler a la barra lateral de reproducció que mostra el visualitzador",
"showVisualizerInSidebar": "mostra el visualitzador a la barra laterla de reproducció",
"audioFadeOnStatusChange": "fosa d'àudio en canviar d'estat",
"audioFadeOnStatusChange_description": "activa la fosa de sortida i entrada en reproduir o pausar",
"queryBuilder": "constructor de consultes",
"queryBuilderCustomFields_inputLabel": "discogràfica",
"queryBuilderCustomFields_inputTag": "etiqueta",
"queryBuilderCustomFields": "camps personalitzats",
"queryBuilderCustomFields_description": "afegeix camps personalitzats pel constructor de consultes",
"useThemeAccentColor": "fes servir el color d'accent del tema",
"useThemeAccentColor_description": "fes servir el color primari definit pel tema seleccionat en comptes del color d'accent personalitzat",
"artistRadioCount_description": "estableix el número de cançons per cercar per la ràdio d'artista i pista",
"artistRadioCount": "recompte de ràdios d'artista o pista",
"imageResolution": "resolució d'imatge",
"imageResolution_description": "la resolució per les imatges que s'utilitzen a l'aplicació. un valor de 0 equival a la resolució nativa de la imatge",
"imageResolution_optionTable": "taula",
"imageResolution_optionItemCard": "targeta d'element",
"imageResolution_optionSidebar": "tauler lateral",
"imageResolution_optionHeader": "encapçalament",
"imageResolution_optionFullScreenPlayer": "reproductor de pantalla completa",
"showRatings_description": "controla si es mostren les estrelles de valoració a la interfície",
"showRatings": "mostra la valoració d'estrelles",
"combinedLyricsAndVisualizer_description": "combina la lletra i el visualitzador en un sol tauler",
"combinedLyricsAndVisualizer": "combina la lletra i el visualitzador al tauler lateral del reproductor",
"artistReleaseTypeConfiguration": "configuració de tipus de llançament d'artista",
"artistReleaseTypeConfiguration_description": "configura quins llançaments es mostren, i en quin ordre, a la pàgina d'artista de l'àlbum",
"hotkey_listNavigateToPage": "navega per la llista fins a la pàgina de l'element",
"hotkey_listPlayDefault": "reprodueix llista",
"hotkey_listPlayLast": "reprodueix la llista al final",
"hotkey_listPlayNext": "reprodueix la llista a continuació",
"hotkey_listPlayNow": "reprodueix la llista ara",
"mpvExtraParameters": "paràmetres addicionals d'mpv",
"mpvExtraParameters_description": "arguments addicionals per l'mpv",
"pathReplace": "substitució de la ruta de l'arxiu",
"pathReplace_description": "substitueix la ruta d'arxiu predeterminada del servidor",
"pathReplace_optionRemovePrefix": "elimina el prefix",
"pathReplace_optionAddPrefix": "afegeix prefix",
"homeFeatureStyle_description": "controla l'estil del carrusel de destacats de l'inici",
"homeFeatureStyle": "estil del carrusel de destacats de l'inici",
"homeFeatureStyle_optionMultiple": "múltiple",
"homeFeatureStyle_optionSingle": "simple",
"enableGridMultiSelect": "activa la selecció múltiple de quadrícula",
"enableGridMultiSelect_description": "quan està activada, podeu seleccionar més d'un element en la vista de quadrícula; si feu clic en la imatge d'un element de la quadrícula, accedireu a la pàgina de l'element",
"sidebarPlaylistSorting_description": "permet ordenar manualment les llistes de reproducció a la barra lateral arrossegant amb el ratolí en comptes de seguir l'ordre predeterminat del servidor",
"sidebarPlaylistSorting": "ordenació de llistes de reproducció de la barra lateral",
"sidebarPlaylistListFilterRegex_description": "amaga les llistes de reproducció de la barra lateral que coincideixin amb aquesta expressió regular",
"sidebarPlaylistListFilterRegex_placeholder": "ex. ^Mescla diària.*",
"sidebarPlaylistListFilterRegex": "regex pel filtre de llistes",
"analyticsEnable": "envia analítiques basades en l'ús",
"analyticsEnable_description": "s'envien dades d'ús anonimitzades al desenvolupar per ajudar a millorar l'aplicació",
"automaticUpdates": "actualitzacions automàtiques",
"automaticUpdates_description": "cerca i instal·la actualitzacions automàticament",
"releaseChannel_optionAlpha": "alfa (diària)",
"blurExplicitImages": "desenfoca imatges explícites",
"blurExplicitImages_description": "les caràtules d'àlbums i cançons marcades com a explícites quedaran desenfocades",
"discordStateIcon": "mostra la icona de reproducció",
"discordStateIcon_description": "mostra una petita icona de reproducció a l'estat d'activitat. l'icona de pausa es mostra quan \"mostra l'estat d'activitat quan està en pausa\" està activat"
},
"table": {
"column": {
"albumCount": "$t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"channels": "$t(common.channel_other)",
"albumCount": "$t(entity.album, {\"count\": 2})",
"artist": "$t(entity.artist, {\"count\": 1})",
"channels": "$t(common.channel, {\"count\": 2})",
"codec": "$t(common.codec)",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"songCount": "$t(entity.track, {\"count\": 2})",
"releaseYear": "any",
"playCount": "reproduccions",
"releaseDate": "data de llançament",
@@ -706,7 +925,10 @@
"lastPlayed": "última reproducció",
"path": "ruta",
"rating": "qualificació",
"title": "títol"
"title": "títol",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)",
"owner": "propietari"
},
"config": {
"general": {
@@ -717,27 +939,49 @@
"displayType": "tipus de visualització",
"itemGap": "espai entre elements (px)",
"itemSize": "mida dels elements (px)",
"tableColumns": "columnes de la taula"
"tableColumns": "columnes de la taula",
"advancedSettings": "opcions avançades",
"autosize": "dimensions automàtiques",
"moveUp": "mou amunt",
"moveDown": "mou avall",
"pinToLeft": "ancora a l'esquerra",
"pinToRight": "ancora a la dreta",
"alignLeft": "alinea a l'esquerra",
"alignCenter": "alinea al centre",
"alignRight": "alinea a la dreta",
"itemsPerRow": "elements per fila",
"size_default": "predeterminat",
"size_compact": "compacte",
"size_large": "gran",
"pagination": "paginació",
"pagination_itemsPerPage": "elements per pàgina",
"pagination_infinite": "infinita",
"pagination_paginate": "paginada",
"alternateRowColors": "colors de fila alternants",
"horizontalBorders": "vores de fila",
"rowHoverHighlight": "ressalta en passar el cursor per la fila",
"verticalBorders": "vores de columna",
"showHeader": "mostra l'encapçalament"
},
"label": {
"actions": "$t(common.action_other)",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"actions": "$t(common.action, {\"count\": 2})",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"codec": "$t(common.codec)",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"rating": "$t(common.rating)",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "$t(common.title)",
"year": "$t(common.year)",
"playCount": "compte de reproduccions",
@@ -747,14 +991,20 @@
"discNumber": "número de disc",
"lastPlayed": "última reproducció",
"rowIndex": "índex de files",
"titleCombined": "$t(common.title) (combinat)"
"titleCombined": "$t(common.title) (combinat)",
"albumCount": "$t(entity.album, {\"count\": 2})",
"bitDepth": "$t(common.bitDepth)",
"genreBadge": "$t(entity.genre, {\"count\": 1}) (insígnies)",
"image": "imatge",
"sampleRate": "$t(common.sampleRate)",
"composer": "compositor",
"titleArtist": "$t(common.title) (artista)"
},
"view": {
"table": "taula",
"card": "targeta",
"grid": "quadrícula",
"list": "llista",
"poster": "pòster"
"detail": "detall"
}
}
},
@@ -762,17 +1012,17 @@
"fromYear": "des de l'any",
"releaseYear": "any de llançament",
"toYear": "fins a l'any",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "biografia",
"bitrate": "taxa de bits",
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"comment": "comentari",
"disc": "disc",
"duration": "durada",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"id": "identificador",
"name": "nom",
"note": "nota",
@@ -791,7 +1041,7 @@
"recentlyAdded": "afegit recentment",
"recentlyPlayed": "reproduït recentment",
"recentlyUpdated": "actualitzat recentment",
"albumCount": "nombre de $t(entity.album_other)",
"albumCount": "nombre de $t(entity.album, {\"count\": 2})",
"favorited": "preferits",
"isCompilation": "és una compilació",
"isFavorited": "és un preferit",
@@ -801,7 +1051,10 @@
"lastPlayed": "última reproducció",
"path": "ruta",
"songCount": "nombre de cançons",
"explicitStatus": "$t(common.explicitStatus)"
"explicitStatus": "$t(common.explicitStatus)",
"sortName": "ordena per nom",
"matchAnd": "i",
"matchOr": "o"
},
"player": {
"muted": "silenciat",
@@ -816,10 +1069,10 @@
"playSimilarSongs": "reproduir cançons similars",
"repeat_off": "repetició desactivada",
"repeat_all": "repetició",
"shuffle": "reproducció aleatòria",
"shuffle": "reprodueix (mesclat)",
"shuffle_off": "reproducció aleatòria desactivada",
"addLast": "afegeix al final",
"addNext": "afegeix a continuació",
"addLast": "al final",
"addNext": "a continuació",
"favorite": "marcar com a preferida",
"mute": "silencia",
"next": "següent",
@@ -834,7 +1087,24 @@
"skip_forward": "salta endavant",
"toggleFullscreenPlayer": "activa el reproductor de pantalla completa",
"unfavorite": "elimina de preferits",
"pause": "pausa"
"pause": "pausa",
"addLastShuffled": "al final (mesclat)",
"addNextShuffled": "a continuació (mesclat)",
"holdToShuffle": "mantén premut per mesclar",
"lyrics": "lletra",
"restoreQueueFromServer": "restaura la cua del servidor",
"saveQueueToServer": "desa la cua al servidor",
"artistRadio": "ràdio de l'artista",
"trackRadio": "ràdio de la pista",
"sleepTimer": "temporitzador d'adormir",
"sleepTimer_endOfSong": "final de la cançó actual",
"sleepTimer_minutes": "{{count}} min",
"sleepTimer_hours": "{{count}} h",
"sleepTimer_custom": "personalitzat",
"sleepTimer_off": "apagat",
"sleepTimer_timeRemaining": "queden {{time}}",
"sleepTimer_setCustom": "configura el temporitzador",
"sleepTimer_cancel": "cancel·la el temporitzador"
},
"error": {
"credentialsRequired": "credencials requerides",
@@ -860,11 +1130,18 @@
"notificationDenied": "s'han negat els permisos per enviar notificacions. aquesta opció no té cap efecte",
"playbackError": "hi ha hagut un error en intentar reproduir el mitjà",
"remoteDisableError": "hi ha hagut un error en intentar $t(common.disable) el servidor remot",
"endpointNotImplementedError": "el punt final {{endpoint}} no està implementat per {{serverType}}"
"endpointNotImplementedError": "el punt final {{endpoint}} no està implementat per {{serverType}}",
"multipleServerSaveQueueError": "la cua de reproducció té una o més cançons que no són del servidor actual, cosa que no és compatible",
"saveQueueFailed": "error en desar la cua",
"settingsSyncError": "hi ha discrepàncies entre la configuració del renderitzador i el procés principal. reinicieu l'aplicació per aplicar els canvis",
"noNetwork": "servidor no disponible",
"noNetworkDescription": "no s'ha pogut connectar amb el servidor",
"invalidJson": "JSON invàlid",
"serverLockSingleServer": "només es permet un servidor quan el servidor està bloquejat"
},
"releaseType": {
"primary": {
"album": "$t(entity.album_one)",
"album": "$t(entity.album, {\"count\": 1})",
"broadcast": "emissió",
"ep": "EP",
"other": "altres",
@@ -889,5 +1166,185 @@
"error_oneFileOnly": "Seleccioneu un sol fitxer",
"error_readingFile": "hi ha hagut un error en llegir el fitxer: {{errorMessage}}",
"mainText": "deixeu anar un fitxer aquí"
},
"filterOperator": {
"after": "és posterior",
"afterDate": "és posterior a (data)",
"before": "és anterior",
"beforeDate": "és anterior a (data)",
"contains": "conté",
"endsWith": "acaba en",
"inPlaylist": "és a",
"inTheLast": "és a l'últim",
"inTheRange": "és entre",
"inTheRangeDate": "és entre (data)",
"is": "és",
"isNot": "no és",
"isGreaterThan": "és més gran que",
"isLessThan": "és més petit que",
"matchesRegex": "coincideix amb l'expressió regular",
"notContains": "no conté",
"notInPlaylist": "no és a",
"notInTheLast": "no és a l'últim",
"startsWith": "comença amb"
},
"queryBuilder": {
"standardTags": "etiquetes estàndard",
"customTags": "etiquetes personalitzades"
},
"datetime": {
"minuteShort": "min",
"secondShort": "s",
"hourShort": "h",
"dayShort": "d"
},
"visualizer": {
"visualizerType": "tipus de visualitzador",
"cyclePresets": "opcions preconfigurades",
"cycleTime": "duració d'un cicle (segons)",
"includeAllPresets": "inclou totes les opcions predeterminades",
"ignoredPresets": "ignora les opcions predeterminades",
"selectedPresets": "opcions predeterminades seleccionades",
"randomizeNextPreset": "tria la següent opcions predeterminada a l'atzar",
"blendTime": "duració de la mescla",
"presets": "opcions predeterminades",
"selectPreset": "selecciona una opció predeterminada",
"applyPreset": "aplica l'opció predeterminada",
"saveAsPreset": "desa com a opció predeterminada",
"updatePreset": "actualitza l'opció predeterminada",
"copyConfiguration": "copia la configuració",
"pasteConfiguration": "enganxa la configuració",
"pasteConfigurationPlaceholder": "enganxa la configuració JSON aquí...",
"pasteFromClipboard": "enganxa des del portaretalls",
"applyConfiguration": "aplica la configuració",
"configCopied": "configuració copiada al portaretalls",
"configCopyFailed": "error en copiar la configuració",
"configPasted": "configuració aplicada correctament",
"configPasteFailed": "Error en aplicar la configuració. Reviseu-ne el format.",
"configPasteReadFailed": "Error en llegir del portaretalls",
"presetName": "Nom de l'opció predeterminada",
"presetNamePlaceholder": "Escriviu el nom de l'opció predeterminada",
"general": "General",
"mode": "Mode",
"mode1To8": "Mode 1 - 8",
"mode10": "Mode 10",
"barSpace": "Espai entre barres",
"lineWidth": "Amplitud de línia",
"fillAlpha": "Omplir alfa",
"channelLayout": "Disseny del canal",
"maxFPS": "FPS màxims",
"opacity": "Opacitat",
"customGradients": "Degradats personalitzats",
"addCustomGradient": "Afegeix un degradat personalitzat",
"gradientName": "Nom del degradat",
"gradientNamePlaceholder": "Nom del degradat",
"vertical": "Vertical",
"horizontal": "Horitzontal",
"colorStops": "Parades de color",
"addColor": "Afegeix el color",
"position": "Posició",
"level": "Nivell",
"remove": "Elimina",
"custom": "Personalitzat",
"builtIn": "Integrat",
"colors": "Colors",
"colorMode": "Mode de color",
"gradient": "Degradat",
"gradientLeft": "Esquerra del degradat",
"gradientRight": "Dreta del degradat",
"fft": "FFT",
"fftSize": "Mida del FFT",
"smoothing": "Suavitzador",
"frequencyRangeAndScaling": "Escala i rang de freqüència",
"minimumFrequency": "Freqüència mínima",
"maximumFrequency": "Freqüència màxima",
"frequencyScale": "Escala de freqüència",
"sensitivity": "Sensibilitat",
"weightingFilter": "Filtre de pes",
"minimumDecibels": "Decibels mínims",
"maximumDecibels": "Decibels màxims",
"linearAmplitude": "Amplitud lineal",
"linearBoost": "Augment lineal",
"peakBehavior": "Comportament del pic",
"showPeaks": "Mostra els pics",
"fadePeaks": "Pics de fosa",
"peakLine": "Línea del pic",
"gravity": "Gravetat",
"peakFadeTime": "Temps de fosa del pic (ms)",
"peakHoldTime": "Temps d'espera del pic (ms)",
"radialSpectrum": "Espectre radial",
"radial": "Radial",
"radialInvert": "Invertir el radial",
"spinSpeed": "Velocitat de gir",
"radius": "Radi",
"reflexMirror": "Mirall del reflex",
"reflexFit": "Ajustament del reflex",
"reflexRatio": "Proporció del reflex",
"reflexAlpha": "Alfa del reflex",
"reflexBrightness": "Brillantor del reflex",
"mirror": "Mirall",
"miscellaneousSettings": "Configuració miscel·lànea",
"alphaBars": "Barres alfa",
"ansiBands": "Bandes ANSI",
"ledBars": "Barres LED",
"trueLeds": "LEDs reals",
"lumiBars": "Barres Lumi",
"outlineBars": "Barres de vora",
"roundBars": "Barres arrodonides",
"lowResolution": "Baixa resolució",
"splitGradient": "Degradat dividit",
"showFPS": "Mostra els FPS",
"showScaleX": "Mostra l'escala X",
"noteLabels": "Etiquetes de nota",
"showScaleY": "Mostra l'escala Y",
"options": {
"colorMode": {
"gradient": "Degradat",
"barIndex": "Índex de barra",
"barLevel": "Nivell de barra"
},
"gradient": {
"classic": "Classic",
"prism": "Prisme",
"rainbow": "Arc de Sant Martí",
"steelblue": "Blau d'acer",
"orangered": "Vermell ataronjat"
},
"channelLayout": {
"single": "Únic",
"dualCombined": "Dual-Combinat",
"dualHorizontal": "Dual-Horitzontal",
"dualVertical": "Dual-Vertical"
},
"frequencyScale": {
"bark": "Escala Bark",
"linear": "Escala Lineal",
"log": "Escala logarítmica",
"mel": "Escala Mel",
"none": "Cap"
},
"weightingFilter": {
"none": "Cap",
"a": "A",
"b": "B",
"c": "C",
"d": "D",
"z": "Z"
},
"mode": {
"0": "[0] Freqüències discretes",
"1": "[1] 1/24a octava / 240 bandes",
"2": "[2] 1/12a octava / 120 bandes",
"3": "[3] 1/8a octava / 80 bandes",
"4": "[4] 1/6a octava / 60 bandes",
"5": "[5] 1/4a octava / 40 bandes",
"6": "[6] 1/3a octava / 30 bandes",
"7": "[7] Mitja octava / 20 bandes",
"8": "[8] Octava completa / 10 bandes",
"10": "[10] Línia / Gràfic d'àrea"
}
},
"pasteGradient": "enganxa degradat",
"pasteGradientPlaceholder": "enganxa el degradat JSON aquí..."
}
}
+588 -116
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+688 -166
View File
File diff suppressed because it is too large Load Diff
+559 -95
View File
File diff suppressed because it is too large Load Diff
+593 -121
View File
File diff suppressed because it is too large Load Diff
+416 -91
View File
@@ -1,27 +1,39 @@
{
"action": {
"deselectAll": "deshautatu dena",
"editPlaylist": "editatu $t(entity.playlist_one)",
"editPlaylist": "editatu $t(entity.playlist, {\"count\": 1})",
"goToPage": "joan orrira",
"moveToNext": "mugitu hurrengora",
"moveToBottom": "mugitu behera",
"moveToTop": "mugitu gora",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "kendu $t(entity.favorite_other)-(e)tik",
"removeFromPlaylist": "kendu $t(entity.playlist_one)-(e)tik",
"removeFromFavorites": "kendu gogokoetatik",
"removeFromPlaylist": "kendu $t(entity.playlist, {\"count\": 1})-(e)tik",
"removeFromQueue": "kendu ilaratik",
"setRating": "ezarri balorazioa",
"toggleSmartPlaylistEditor": "txandakatu $t(entity.smartPlaylist) editorea",
"viewPlaylists": "ikusi $t(entity.playlist_other)",
"viewPlaylists": "ikusi $t(entity.playlist, {\"count\": 2})",
"openIn": {
"lastfm": "Ireki Last.fm-n",
"musicbrainz": "Ireki MusicBrainz-en"
},
"clearQueue": "garbitu ilara",
"createPlaylist": "sortu $t(entity.playlist_one)",
"deletePlaylist": "ezabatu $t(entity.playlist_one)",
"addToFavorites": "gehitu $t(entity.favorite_other)-(e)ra",
"addToPlaylist": "gehitu $t(entity.playlist_one)-(e)ra"
"createPlaylist": "sortu $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "ezabatu $t(entity.playlist, {\"count\": 1})",
"addToFavorites": "gehitu gogokoetara",
"addToPlaylist": "gehitu $t(entity.playlist, {\"count\": 1})ra",
"createRadioStation": "sortu $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "ezabatu $t(entity.radioStation, {\"count\": 1})",
"viewMore": "ikusi gehiago",
"shuffle": "nahastu",
"selectAll": "aukeratu guztiak",
"downloadStarted": "{{count}} elementuren deskarga hasi da",
"addOrRemoveFromSelection": "gehitu edo kendu hautapenetik",
"selectRangeOfItems": "aukeratu elementu sorta bat",
"shuffleAll": "nahastu dena",
"shuffleSelected": "nahastu aukeratutak",
"moveItems": "elementuak mugitu",
"openApplicationDirectory": "ireki aplikazioaren direktorioa"
},
"common": {
"add": "gehitu",
@@ -38,7 +50,7 @@
"configure": "konfiguratu",
"confirm": "berretsi",
"create": "sortu",
"currentSong": "uneko $t(entity.track_one)",
"currentSong": "uneko $t(entity.track, {\"count\": 1})",
"decrease": "gutxitu",
"delete": "ezabatu",
"descending": "beheranzkoa",
@@ -55,7 +67,8 @@
"filter_other": "iragazkiak",
"filters": "iragazkiak",
"forceRestartRequired": "berreabiarazi aldaketak aplikatzeko... itxi notifikazioa berreabiarazteko",
"setting": "ezarpena",
"setting_one": "ezarpenak",
"setting_other": "",
"share": "partekatu",
"action_one": "ekintza",
"action_other": "ekintzak",
@@ -91,7 +104,7 @@
"path": "bidea",
"playerMustBePaused": "erreproduzitzailea pausatuta egon behar da",
"preview": "aurrebista",
"previousSong": "aurreko $t(entity.track_one)",
"previousSong": "aurreko $t(entity.track, {\"count\": 1})",
"quit": "irten",
"random": "ausazkoa",
"rating": "balorazioa",
@@ -124,7 +137,20 @@
"clean": "garbia",
"private": "pribatua",
"public": "publikoa",
"releaseType": "argitalpen mota"
"releaseType": "argitalpen mota",
"countSelected": "{{count}} hautatuta",
"view": "ikuspegia",
"externalLinks": "kanpoko estekak",
"faster": "azkarrago",
"noFilters": "ez dago iragazkirik konfiguratuta",
"retry": "saiatu berriro",
"slower": "motelago",
"itemsMore": "{{count}} gehiago",
"sort": "ordenatu",
"recordLabel": "diskoetxea",
"example": "adibidea",
"tableColumns": "taulako zutabeak",
"doNotShowAgain": "ez erakutsi hau berriro"
},
"player": {
"repeat": "errepikatu",
@@ -151,35 +177,53 @@
"queue_remove": "kendu hautatutakoak",
"repeat_all": "errepikatu dena",
"repeat_off": "errepikapena desgaituta",
"shuffle": "erreproduzitu ausaz",
"shuffle": "erreproduzitu (ausaz)",
"shuffle_off": "auza desgaituta",
"skip_back": "saltatu atzeraka",
"skip_forward": "saltatu aurreraka",
"toggleFullscreenPlayer": "txandakatu pantaila osoko erreproduzitzailea",
"viewQueue": "ikusi ilara",
"playbackFetchCancel": "honek denbora pixka bat behar du... itxi jakinarazpena bertan behera uzteko"
"playbackFetchCancel": "honek denbora pixka bat behar du... itxi jakinarazpena bertan behera uzteko",
"lyrics": "letrak",
"restoreQueueFromServer": "berrezarri ilara zerbitzaritik",
"saveQueueToServer": "gorde ilara zerbitzarira",
"addLastShuffled": "azkena (ausaz)",
"addNextShuffled": "hurrengoa (ausaz)",
"artistRadio": "artista irratia",
"trackRadio": "pista irratia"
},
"table": {
"config": {
"view": {
"table": "taula",
"list": "zerrenda",
"card": "txartela",
"grid": "sareta",
"poster": "kartela"
"grid": "sareta"
},
"general": {
"gap": "$t(common.gap)",
"size": "$t(common.size)",
"tableColumns": "taula zutabeak",
"itemSize": "elementuaren tamaina (px)",
"followCurrentSong": "jarraitu uneko abestia"
"followCurrentSong": "jarraitu uneko abestia",
"size_default": "lehenetsia",
"advancedSettings": "ezarpen aurreratuak",
"autoFitColumns": "zutabeak automatikoki doitu",
"pinToLeft": "ezkerrera finkatu",
"pinToRight": "eskuinera finkatu",
"alignLeft": "ezkerrean lerrokatu",
"alignCenter": "lerrokatu erdian",
"alignRight": "eskuinean lerrokatu",
"itemGap": "elementuen arteko tartea (px)",
"itemsPerRow": "elementuak errenkada bakoitzeko",
"size_large": "handia",
"pagination_itemsPerPage": "elementuak orrialde bakoitzeko",
"pagination_infinite": "infinitua"
},
"label": {
"actions": "$t(common.action_other)",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
@@ -187,13 +231,13 @@
"codec": "$t(common.codec)",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"rating": "$t(common.rating)",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "$t(common.title)",
"year": "$t(common.year)",
"titleCombined": "$t(common.title) (batuta)",
@@ -201,25 +245,29 @@
"playCount": "erreprodukzio kopurua",
"lastPlayed": "azken aldiz entzunda",
"discNumber": "disko zenbakia",
"dateAdded": "gehitze data"
"dateAdded": "gehitze data",
"albumCount": "$t(entity.album, {\"count\": 2})",
"image": "irudia",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)"
}
},
"column": {
"album": "albuma",
"albumCount": "$t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"albumCount": "$t(entity.album, {\"count\": 2})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "biografia",
"bitrate": "bit-emaria",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"discNumber": "diskoa",
"favorite": "gogokoa",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"path": "bidea",
"rating": "balorazioa",
"releaseYear": "urtea",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "tituloa",
"trackNumber": "pista",
"bpm": "bpm",
@@ -228,7 +276,10 @@
"releaseDate": "argitalpen data",
"lastPlayed": "azken aldiz entzundakoa",
"dateAdded": "gehitutako data",
"albumArtist": "albumeko artista"
"albumArtist": "albumeko artista",
"owner": "jabea",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)"
}
},
"entity": {
@@ -260,13 +311,17 @@
"play_other": "{{count}} erreprodukzio",
"playlistWithCount_one": "erreprodukzio-zerrenda {{count}}",
"playlistWithCount_other": "{{count}} erreprodukzio-zerrenda",
"smartPlaylist": "$t(entity.playlist_one) adimentsua",
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) adimentsua",
"track_one": "pista",
"track_other": "pistak",
"song_one": "abestia",
"song_other": "abestiak",
"trackWithCount_one": "pista {{count}}",
"trackWithCount_other": "{{count}} pista"
"trackWithCount_other": "{{count}} pista",
"radioStation_one": "irrati-katea",
"radioStation_other": "irrati-kateak",
"radioStationWithCount_one": "irrati-kate {{count}}",
"radioStationWithCount_other": "{{count}} irrati-kate"
},
"error": {
"apiRouteError": "ezin izan da eskaera bideratu",
@@ -292,7 +347,11 @@
"badAlbum": "Orrialde hau ikusten ari zara abesti hau album batekoa ez delako. Ziurrenik arazo hau ikusten ari zara zure musika karpetaren goiko mailan abesti bat baduzu. Jellyfinek abestiak karpeta batean badaude taldekatzen ditu bakarrik",
"loginRateError": "Saioa hasteko saiakera gehiegi egin dira, saiatu berriro segundo batzuk barru",
"notificationDenied": "jakinarazpenetarako baimenak ukatu dira. Ezarpen honek ez du eraginik",
"systemFontError": "errore bat gertatu da sistemaren letra-tipoak lortzen saiatzean"
"systemFontError": "errore bat gertatu da sistemaren letra-tipoak lortzen saiatzean",
"noNetwork": "zerbitzaria ez dago erabilgarri",
"noNetworkDescription": "ezin izan da zerbitzari honetara konektatu",
"saveQueueFailed": "huts egin du ilara gordetzean",
"multipleServerSaveQueueError": "erreprodukzio-ilarak zerbitzarikoak ez diren abesti bat edo gehiago ditu. hau ez da onartzen"
},
"filter": {
"disc": "diskoa",
@@ -306,19 +365,19 @@
"random": "ausazkoa",
"rating": "balorazioa",
"trackNumber": "pista",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "biografia",
"bitrate": "bit-emaria",
"bpm": "bpm-ak",
"channels": "$t(common.channel_other)",
"comment": "iruzkina",
"favorited": "gogoko gisa markatua",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"search": "bilatu",
"title": "tituloa",
"albumCount": "$t(entity.album_other) kopurua",
"albumCount": "$t(entity.album, {\"count\": 2}) kopurua",
"communityRating": "komunitatearen balorazioa",
"criticRating": "kritikarien balorazioa",
"dateAdded": "gehitutako data",
@@ -345,9 +404,9 @@
"playbackStyle_optionNormal": "normala",
"playButtonBehavior_optionPlay": "$t(player.play)",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"font": "letra-tipoa",
"hotkey_playbackStop": "gelditu",
"buttonSize_description": "erreproduzitzailearen barrako botoien tamaina",
@@ -360,7 +419,6 @@
"customCss": "css pertsonalizatua",
"customFontPath": "letra-tipo pertsonalizatuaren bidea",
"customFontPath_description": "aplikazioan erabiliko den letra-tipo pertsonalizatuaren bidea ezartzen du",
"disableAutomaticUpdates": "desgaitu eguneratze automatikoak",
"discordApplicationId": "{{discord}} aplikazioaren IDa",
"followLyric": "jarraitu uneko letra",
"font_description": "aplikazioan erabiliko den letra-tipoa ezartzen du",
@@ -448,7 +506,6 @@
"discordDisplayType_description": "zure egoeran entzuten ari zarena aldatzen du",
"discordLinkType": "{{discord}} egoera estekak",
"fontType_description": "barneko letra-tipoa feishinek eskaintzen dituen letra-tipoetako bat aukeratzen du. sistemaren letra-tipoa zure sistema eragileak eskaintzen duen edozein letra-tipo hautatzeko aukera ematen dizu. pertsonalizatua zure letra-tipoa eskaintzeko aukera ematen dizu",
"genreBehavior": "genero orriaren portaera lehenetsia",
"homeConfiguration_description": "konfiguratu zein elementu erakusten diren hasierako orrian eta zein ordenatan",
"homeFeature": "etxeko karrusela nabarmendua",
"homeFeature_description": "hasierako orrian karrusel nabarmen handia erakutsi behar den ala ez kontrolatzen du",
@@ -496,7 +553,6 @@
"accentColor": "azentu-kolorea",
"clearCache_description": "feishinen 'garbiketa gogorra'. feishinen katxea garbitzeaz gain, hustu nabigatzailearen katxea (gordetako irudiak eta bestelako aktiboak). zerbitzari-kredentzialak eta ezarpenak gorde egiten dira",
"clearQueryCache_description": "feishinen 'garbiketa ahula'. honek erreprodukzio-zerrendak eta pisten metadatuak freskatuko ditu eta gordetako letrak berrezarriko ditu. ezarpenak, zerbitzari-kredentzialak eta katxetutako irudiak gorde egiten dira",
"doubleClickBehavior": "jarri ilaran bilatutako pista guztiak klik bikoitza egitean",
"exitToTray_description": "irten aplikaziotik sistemaren erretilura",
"followLyric_description": "mugitu letra uneko erreprodukzio-posiziora",
"preferLocalLyrics": "nahiago izan letra lokalak",
@@ -523,10 +579,8 @@
"playbackStyle_description": "aukeratu audio erreproduzitzailearentzat erabiliko den erreprodukzio estiloa",
"playButtonBehavior": "erreprodukzio botoiaren portaera",
"playButtonBehavior_description": "ezartzen du erreprodukzio botoiaren portaera lehenetsia abestiak ilaran gehitzean",
"playerAlbumArtResolution": "erreproduzitzailearen albumaren arte-azalaren erresoluzioa",
"gaplessAudio": "hutsune gabeko audioa",
"gaplessAudio_description": "ezartzen du hutsunik gabeko audio ezarpena mpv-rako",
"genreBehavior_description": "genero batean klik egiteak abestien edo albumen zerrendan lehenespenez irekitzen den zehazten du",
"passwordStore": "pasahitzak/biltegi sekretua",
"playerbarOpenDrawer": "txandakatu erreproduzitzailearen barra pantaila osora",
"playerbarOpenDrawer_description": "aukera ematen du erreproduzitzailearen barran klik egiteak pantaila osoko erreproduzitzailea irekitzeko",
@@ -534,11 +588,94 @@
"customCss_description": "css eduki pertsonalizatua. Oharra: edukia eta urruneko URLak debekatutako propietateak dira. Zure edukiaren aurrebista erakusten da behean. Ezarri ez dituzun eremu gehigarriak daude garbiketa dela eta",
"enableRemote": "gaitu urruneko kontrol zerbitzaria",
"enableRemote_description": "urruneko kontrol zerbitzariari beste gailu batzuei aplikazioa kontrolatzeko aukera ematen dio",
"doubleClickBehavior_description": "egia bada, bilaketa batean bat datozen pista guztiak ilaran jarriko dira. bestela, klikatutakoak bakarrik jarriko dira ilaran",
"imageAspectRatio_description": "gaituta badago, azaleko artea jatorrizko aspektu-erlazioa erabiliz erakutsiko da. 1:1 ez den arterako, gainerako espazioa hutsik egongo da",
"crossfadeStyle": "crossfade estiloa",
"discordRichPresence": "{{discord}}-en jarduera-egoera",
"enableAutoTranslation": "gaitu itzulpen automatikoa"
"enableAutoTranslation": "gaitu itzulpen automatikoa",
"exportImportSettings_control_exportText": "esportatu ezarpenak",
"exportImportSettings_control_importText": "inportatu ezarpenak",
"exportImportSettings_control_title": "inportatu / esportatu ezarpenak",
"exportImportSettings_importBtn": "inportatu ezarpenak",
"exportImportSettings_importModalTitle": "inportatu feishin ezarpenak",
"autoDJ_itemCount": "elementu kopurua",
"language": "hizkuntza",
"queryBuilderCustomFields_inputTag": "etiketa",
"logLevel_optionError": "errore bat",
"logLevel_optionInfo": "informazioa",
"imageResolution_optionTable": "taula",
"imageResolution_optionSidebar": "alboko barra",
"replayGainClipping": "{{ReplayGain}} mozketa",
"replayGainFallback": "{{ReplayGain}} ordezko aukera",
"trayEnabled": "erakutsi erretilua",
"artistReleaseTypeConfiguration": "artistaren argitalpen motaren konfigurazioa",
"artistReleaseTypeConfiguration_description": "konfiguratu zein argitalpen mota erakusten diren, eta zein ordenatan, albumaren artistaren orrian",
"useThemeAccentColor": "erabili gaiaren azentu-kolorea",
"useThemeAccentColor_description": "erabili hautatutako gaian definitutako kolore nagusia azentu-kolore pertsonalizatuaren ordez",
"showRatings": "erakutsi izarren balorazioak",
"showRatings_description": "izarren balorazioen funtzioa interfazean agertzen den ala ez kontrolatzen du",
"imageResolution": "irudiaren erresoluzioa",
"imageResolution_description": "aplikazioan erabilitako irudien erresoluzioa. 0 balioa erabiliz gero, jatorrizko irudiaren erresoluzioa erabiliko da lehenespenez",
"followCurrentSong_description": "automatikoki korritu erreprodukzio-ilara uneko abestira",
"followCurrentSong": "jarraitu uneko abestia",
"lyricOffset_description": "letra zehaztutako milisegundo kopuruarekin desplazatu",
"lyricOffset": "letraren desplazamendua (ms)",
"mpvExtraParameters": "mpv parametro gehigarriak",
"mpvExtraParameters_description": "mpv-ri pasatzeko argumentu gehigarriak",
"notify": "abestien jakinarazpenak gaitu",
"notify_description": "erakutsi jakinarazpenak uneko abestia aldatzean",
"pathReplace": "fitxategiaren bidearen ordezkapena",
"pathReplace_description": "ordezkatu zure zerbitzariaren fitxategi-bide lehenetsia",
"pathReplace_optionRemovePrefix": "kendu aurrizkia",
"pathReplace_optionAddPrefix": "gehitu aurrizkia",
"passwordStore_description": "zein pasahitz/sekretu biltegi erabili. aldatu hau pasahitzak gordetzeko arazoak badituzu",
"playerFilters": "Iragazi ilarako abestiak",
"sidePlayQueueStyle_description": "alboko erreprodukzio-ilararen estiloa ezartzen du",
"mediaSession_description": "Windows Media Session integrazioa gaitzen du, multimedia kontrolak eta metadatuak sistemaren bolumenaren gainjartzean eta blokeo pantailan bistaratuz (Windows bakarrik)",
"sidePlayQueueStyle": "alboko erreprodukzio-ilarako estiloa",
"skipPlaylistPage": "saltatu erreprodukzio-zerrenda orria",
"startMinimized_description": "abiarazi aplikazioa sistemaren erretiluan",
"startMinimized": "hasi minimizatuta",
"transcode": "gaitu transkodetzea",
"transcode_description": "formatu ezberdinetara transkodetzea ahalbidetzen du",
"transcodeBitrate_description": "transkodetzeko bit-emaria hautatzen du. 0k zerbitzariari aukeratzen uzten diola esan nahi du",
"transcodeBitrate": "transkodetzeko bit-emaria",
"transcodeFormat_description": "transkodetzeko formatua hautatzen du. utzi hutsik zerbitzariak erabaki dezan",
"transcodeFormat": "transkodetzeko formatua",
"queryBuilderCustomFields_inputLabel": "etiketa",
"autoDJ": "DJ automatikoa",
"autoDJ_description": "automatikoki gehitu antzeko abestiak ilaran",
"autoDJ_itemCount_description": "DJ automatikoa gaituta dagoenean ilaran gehitzen saiatu diren elementuen kopurua",
"autoDJ_timing_description": "DJ automatikoa aktibatu aurretik ilaran geratzen diren abestien kopurua",
"analyticsDisable": "Erabileran oinarritutako analisiei uko egin",
"analyticsDisable_description": "Erabilera-datu anonimoak garatzaileari bidaltzen zaizkio aplikazioa hobetzen laguntzeko",
"contextMenu_description": "elementu batean eskuineko botoiarekin klik egitean menuan agertzen diren elementuak ezkutatzeko aukera ematen dizu. hautatuta ez dauden elementuak ezkutatuta egongo dira",
"enableAutoTranslation_description": "Gaitu itzulpena automatikoki letra kargatzen denean",
"exportImportSettings_control_description": "JSON bidez ezarpenak esportatu eta inportatu",
"exportImportSettings_destructiveWarning": "Ezarpenak inportatzea arriskutsua da, mesedez, berrikusi goikoa beheko \"inportatu\" klikatu aurretik!",
"exportImportSettings_importSuccess": "ezarpenak behar bezala inportatu dira!",
"exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" okerra da - {{reason}}",
"hotkey_listPlayDefault": "zerrenda erreproduzitu",
"hotkey_listPlayLast": "zerrenda erreproduzitu amaieran",
"hotkey_listPlayNow": "zerrenda erreproduzitu orain",
"logLevel": "erregistro maila",
"logLevel_description": "Bistaratzeko erregistroen gutxieneko maila ezartzen du. Debug-ek erregistro guztiak erakusten ditu, «erroreak» erroreak bakarrik erakusten ditu",
"logLevel_optionDebug": "arazketa",
"playerFilters_description": "saltatu abestiak ilaran gehitzea irizpide hauen arabera",
"artistRadioCount_description": "artista eta abestien irratian bilatu beharreko abesti kopurua ezartzen du",
"artistRadioCount": "artista/abesti irratiko kopurua",
"imageResolution_optionItemCard": "elementu txartela",
"imageResolution_optionHeader": "goiburua",
"imageResolution_optionFullScreenPlayer": "pantaila osoko erreproduzitzailea",
"showVisualizerInSidebar": "erakutsi bistaratzailea erreproduzitzailearen alboko barran",
"combinedLyricsAndVisualizer_description": "konbinatu letrak eta bistaratzailea panel berean",
"combinedLyricsAndVisualizer": "konbinatu letrak eta bistaratzailea erreproduzitzailearen alboko barran",
"preventSleepOnPlayback_description": "saihestu pantaila lotan jartzea musika erreproduzitzen ari den bitartean",
"remotePassword_description": "urruneko kontrol zerbitzariaren pasahitza ezartzen du. Kredentzial hauek modu ez-seguruan transferitzen dira lehenespenez, beraz, axola ez zaizun pasahitz bakarra erabili beharko zenuke",
"remotePassword": "urruneko kontrol zerbitzariaren pasahitza",
"remotePort_description": "urruneko kontrol zerbitzariaren portua ezartzen du",
"remotePort": "urruneko kontrol zerbitzariaren ataka",
"remoteUsername_description": "urruneko kontrol zerbitzariaren erabiltzaile-izena ezartzen du. Erabiltzaile-izena eta pasahitza hutsik badaude, autentifikazioa desgaituta egongo da",
"remoteUsername": "urruneko kontrol zerbitzariaren erabiltzaile-izena"
},
"form": {
"addServer": {
@@ -554,26 +691,27 @@
"input_legacyAuthentication": "gaitu zaharkitutako autentifikazioa",
"success": "zerbitzaria behar bezala gehitu da",
"input_preferInstantMix": "nahiago izan berehalako nahasketa",
"input_preferInstantMixDescription": "erabili berehalako nahasketa soilik antzeko abestiak lortzeko. erabilgarria portaera hau aldatzen duten pluginak badituzu"
"input_preferInstantMixDescription": "erabili berehalako nahasketa soilik antzeko abestiak lortzeko. erabilgarria portaera hau aldatzen duten pluginak badituzu",
"input_remoteUrl": "URL publikoa"
},
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) gehitu da $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })-ra",
"input_skipDuplicates": "saltatu bikoiztuak",
"title": "gehitu $t(entity.playlist_one)-(a)ri",
"create": "sortu $t(entity.playlist_one) {{playlist}}",
"searchOrCreate": "bilatu $t(entity.playlist_other) edo idatzi berri bat sortzeko"
"title": "gehitu $t(entity.playlist, {\"count\": 1})-(a)ri",
"create": "sortu $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "bilatu $t(entity.playlist, {\"count\": 2}) edo idatzi berri bat sortzeko"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "publikoa",
"title": "$t(entity.playlist_one) sortu",
"success": "$t(entity.playlist_one) behar bezala sortu da"
"title": "$t(entity.playlist, {\"count\": 1}) sortu",
"success": "$t(entity.playlist, {\"count\": 1}) behar bezala sortu da"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"input_name": "$t(common.name)",
"title": "letra bilatu"
},
@@ -586,19 +724,22 @@
"createFailed": "partekatzea sortzeak huts egin du (partekatzea gaituta al dago?)"
},
"deletePlaylist": {
"success": "$t(entity.playlist_one) behar bezala ezabatu da",
"title": "$t(entity.playlist_one) ezabatu",
"input_confirm": "idatzi $t(entity.playlist_one)-(a)ren izena berresteko"
"success": "$t(entity.playlist, {\"count\": 1}) behar bezala ezabatu da",
"title": "$t(entity.playlist, {\"count\": 1}) ezabatu",
"input_confirm": "idatzi $t(entity.playlist, {\"count\": 1})-(a)ren izena berresteko"
},
"editPlaylist": {
"success": "$t(entity.playlist_one) behar bezala eguneratu da",
"title": "$t(entity.playlist_one) editatu",
"publicJellyfinNote": "Arrazoiren batengatik, Jellyfin ez du erakusten erreprodukzio-zerrendak publikoak diren edo ez. Hau publiko izaten jarraitzea nahi baduzu, hautatu sarrera hau"
"success": "$t(entity.playlist, {\"count\": 1}) behar bezala eguneratu da",
"title": "$t(entity.playlist, {\"count\": 1}) editatu",
"publicJellyfinNote": "Arrazoiren batengatik, Jellyfin ez du erakusten erreprodukzio-zerrendak publikoak diren edo ez. Hau publiko izaten jarraitzea nahi baduzu, hautatu sarrera hau",
"editNote": "ez da gomendatzen eskuzko edizioak egitea erreprodukzio-zerrenda handietarako. ziur zaude onartzen duzula lehendik dagoen erreprodukzio-zerrenda gainidazteagatik datuak galtzeko arriskua?"
},
"queryEditor": {
"title": "kontsulta editorea",
"input_optionMatchAll": "guztiak bat etorri",
"input_optionMatchAny": "edozeinekin bat etorri"
"input_optionMatchAny": "edozeinekin bat etorri",
"resetToDefault": "lehenetsitako egoerara berrezarri",
"clearFilters": "garbitu iragazkiak"
},
"updateServer": {
"success": "zerbitzaria behar bezala eguneratu da",
@@ -608,25 +749,50 @@
"title": "modu pribatua",
"enabled": "modu pribatua gaituta, erreprodukzio egoera kanpoko integrazioetatik ezkutatuta dago orain",
"disabled": "modu pribatua desgaituta, erreprodukzio egoera ikusgai dago orain gaitutako kanpoko integrazioentzat"
},
"largeFetchConfirmation": {
"title": "gehitu elementuak ilaran"
},
"createRadioStation": {
"input_homepageUrl": "hasierako orriaren URLa",
"input_name": "izena",
"title": "irrati-katea sortu",
"success": "irrati-katea behar bezala sortu da"
},
"lyricsExport": {
"export": "esportatu letrak",
"input_synced": "esportatu sinkronizatutako letrak",
"input_offset": "$t(setting.lyricOffset)"
},
"shuffleAll": {
"input_genre": "$t(entity.genre, {\"count\": 1})",
"title": "ausaz erreproduzitu",
"input_limit": "zenbat abesti?",
"input_played_optionAll": "pista guztiak",
"input_played_optionUnplayed": "erreproduzitu gabeko pistak bakarrik",
"input_played_optionPlayed": "erreproduzitutako pistak bakarrik"
},
"saveQueue": {
"success": "erreprodukzio-ilara zerbitzarian gordeta"
}
},
"page": {
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"albumDetail": {
"released": "argitaratuta",
"moreFromArtist": "$t(entity.artist_one) honetatik gehiago",
"moreFromArtist": "$t(entity.artist, {\"count\": 1}) honetatik gehiago",
"moreFromGeneric": "{{item}}-(e)tik gehiago"
},
"albumList": {
"title": "$t(entity.album_other)",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"title": "$t(entity.album, {\"count\": 2})",
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
"artistAlbums": "{{artist}}-(a)ren albumak"
},
"appMenu": {
"quit": "$t(common.quit)",
"settings": "$t(common.setting_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"collapseSidebar": "tolestu alboko barra",
"expandSidebar": "zabaldu alboko barra",
"goBack": "atzera",
@@ -636,7 +802,11 @@
"privateModeOn": "aktibatu modu pribatua",
"selectServer": "aukeratu zerbitzaria",
"version": "bertsioa {{version}}",
"openBrowserDevtools": "ireki nabigatzailearen garapen tresnak"
"openBrowserDevtools": "ireki nabigatzailearen garapen tresnak",
"commandPalette": "ireki komando-paleta",
"noMusicFolder": "ez da musika karpetarik hautatu",
"selectMusicFolder": "aukeratu musika karpeta",
"multipleMusicFolders": "{{count}} musika karpeta aukeratuta"
},
"manageServers": {
"url": "URLa",
@@ -668,9 +838,10 @@
"playShuffled": "$t(player.shuffle)",
"numberSelected": "{{count}} hautatuta",
"shareItem": "partekatu elementua",
"goToAlbum": "joan $t(entity.album_one)-(e)ra",
"goToAlbum": "joan $t(entity.album, {\"count\": 1})-(e)ra",
"goToAlbumArtist": "joan albumera",
"showDetails": "informazioa lortu"
"showDetails": "informazioa lortu",
"moveItems": "$t(action.moveItems)"
},
"fullscreenPlayer": {
"config": {
@@ -696,9 +867,9 @@
"noLyrics": "ez da letrarik aurkitu"
},
"genreList": {
"title": "$t(entity.genre_other)",
"showAlbums": "erakutsi $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "erakutsi $t(entity.genre_one) $t(entity.track_other)"
"title": "$t(entity.genre, {\"count\": 2})",
"showAlbums": "erakutsi $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"showTracks": "erakutsi $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
},
"globalSearch": {
"title": "komandoak",
@@ -714,48 +885,68 @@
"newlyAdded": "azken aldian gehitutako argitalpenak",
"recentlyPlayed": "azken aldian entzundakoak",
"recentlyReleased": "azken aldian argitaratutak",
"explore": "arakatu zure liburutegitik"
"explore": "arakatu zure liburutegitik",
"genres": "$t(entity.genre, {\"count\": 2})"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
"title": "$t(entity.playlist, {\"count\": 2})"
},
"setting": {
"advanced": "aurreratua",
"generalTab": "orokorra",
"playbackTab": "erreprodukzioa",
"windowTab": "leihoa",
"hotkeysTab": "laster-teklak"
"hotkeysTab": "laster-teklak",
"cache": "katxea",
"application": "aplikazioa",
"theme": "gaia",
"sidebar": "alboko barra",
"exportImport": "inportatu/esportatu",
"scrobble": "scrobble",
"audio": "audioa",
"lyrics": "letrak",
"discord": "discord",
"playerFilters": "erreproduzitzailearen iragazkiak",
"updates": "eguneraketa",
"queryBuilder": "kontsulta-sortzailea",
"controls": "kontrolak",
"remote": "urrunekoa",
"lyricsDisplay": "erakutsi letrak"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"artists": "$t(entity.artist, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"home": "$t(common.home)",
"playlists": "$t(entity.playlist_other)",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"tracks": "$t(entity.track_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"tracks": "$t(entity.track, {\"count\": 2})",
"myLibrary": "nire liburutegia",
"nowPlaying": "orain erreproduzitzen",
"shared": "partekatutako $t(entity.playlist_other)"
"shared": "partekatutako $t(entity.playlist, {\"count\": 2})",
"favorites": "$t(entity.favorite, {\"count\": 2})",
"radio": "$t(entity.radioStation, {\"count\": 2})"
},
"trackList": {
"title": "$t(entity.track_other)",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track, {\"count\": 2})",
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
"artistTracks": "{{artist}}-(r)en abestiak"
},
"albumArtistDetail": {
"about": "{{artist}}-(r)i buruz",
"relatedArtists": "erlazionatutako $t(entity.artist_other)",
"relatedArtists": "erlazionatutako $t(entity.artist, {\"count\": 2})",
"topSongs": "abesti nagusiak",
"topSongsFrom": "{{title}}-(a)ren abesti nagusiak",
"viewAll": "ikusi guztiak",
"viewAllTracks": "ikusi $t(entity.track_other) guztiak",
"viewAllTracks": "ikusi $t(entity.track, {\"count\": 2}) guztiak",
"appearsOn": "agertzen da hemen",
"recentReleases": "azken argitalpenak",
"viewDiscography": "ikusi diskografia"
"viewDiscography": "ikusi diskografia",
"groupingTypeAll": "argitalpen mota guztiak",
"groupingTypePrimary": "argitalpen mota nagusiak"
},
"itemDetail": {
"copyPath": "kopiatu bidea arbelean",
@@ -764,14 +955,148 @@
},
"playlist": {
"reorder": "berrantolaketa IDaren arabera ordenatzean bakarrik gaituta dago"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"favorites": {
"title": "$t(entity.favorite, {\"count\": 2})"
},
"radioList": {
"title": "irrati-kateak"
}
},
"releaseType": {
"primary": {
"album": "$t(entity.album_one)"
"album": "$t(entity.album, {\"count\": 1})",
"other": "bestelakoa",
"ep": "ep"
},
"secondary": {
"compilation": "konpilazioa"
"compilation": "konpilazioa",
"audiobook": "audioliburua",
"interview": "elkarrizketa",
"remix": "nahasketa",
"djMix": "dj nahasketa"
}
},
"datetime": {
"minuteShort": "m",
"secondShort": "s",
"hourShort": "h",
"dayShort": "d"
},
"queryBuilder": {
"customTags": "etiketa pertsonalizatutak",
"standardTags": "etiketa estandarrak"
},
"filterOperator": {
"is": "da",
"contains": "dauka",
"notContains": "ez dauka",
"startsWith": "honekin hasten da",
"endsWith": "honekin amaitzen da",
"isNot": "ez da"
},
"visualizer": {
"general": "Orokorra",
"mode": "Modua",
"vertical": "Bertikala",
"horizontal": "Horizontala",
"position": "Posizioa",
"level": "Maila",
"remove": "Kendu",
"custom": "Pertsonalizatua",
"builtIn": "Barneratua",
"colors": "Koloreak",
"gradient": "Gradientea",
"fft": "FFT",
"sensitivity": "Sentikortasuna",
"smoothing": "Leuntzea",
"gravity": "Grabitatea",
"radial": "Erradiala",
"radius": "Erradioa",
"mirror": "Ispilua",
"options": {
"colorMode": {
"gradient": "Gradientea",
"barIndex": "Barra-indizea",
"barLevel": "Barra-maila"
},
"gradient": {
"classic": "Klasikoa",
"prism": "Prisma",
"rainbow": "Ostadarra",
"orangered": "Laranja-gorria"
},
"weightingFilter": {
"none": "Bat ere ez",
"a": "A",
"b": "B",
"c": "C",
"d": "D",
"z": "Z"
},
"mode": {
"0": "[0] Maiztasun Diskretuak",
"1": "[1] 1/24 oktaba / 240 banda",
"2": "[2] 1/12 oktaba / 120 banda",
"3": "[3] 1/8 oktaba / 80 banda",
"4": "[4] 1/6ko oktaba / 60 banda",
"5": "[5] 1/4 oktaba / 40 banda",
"6": "[6] 1/3 oktaba / 30 banda",
"7": "[7] Oktaba erdi / 20 banda",
"8": "[8] Oktaba osoa / 10 banda",
"10": "[10] Lerroa / Azalera grafikoa"
},
"frequencyScale": {
"none": "Bat ere ez",
"linear": "Eskala Lineala",
"bark": "Bark Eskala",
"mel": "Mel Eskala"
}
},
"opacity": "Opakotasuna",
"minimumFrequency": "Gutxieneko Maiztasuna",
"maximumFrequency": "Gehienezko Maiztasuna",
"frequencyScale": "Maiztasun Eskala",
"weightingFilter": "Ponderazio-iragazkia",
"minimumDecibels": "Gutxieneko Dezibelioak",
"maximumDecibels": "Gehienezko Dezibelioak",
"linearAmplitude": "Anplitude Lineala",
"linearBoost": "Bultzada Lineala",
"showPeaks": "Erakutsi Gailurrak",
"configCopied": "Konfigurazioa arbelean kopiatu da",
"configCopyFailed": "Konfigurazioa kopiatzeak huts egin du",
"configPasted": "Konfigurazioa behar bezala aplikatu da",
"configPasteFailed": "Konfigurazioa aplikatzeak huts egin du. Mesedez, egiaztatu formatua.",
"configPasteReadFailed": "Arbelatik irakurtzeak huts egin du",
"colorMode": "Kolore Modua",
"fftSize": "FFT tamaina",
"frequencyRangeAndScaling": "Maiztasun-tartea eta eskalatzea",
"showScaleY": "Erakutsi Y Eskala",
"pasteGradientPlaceholder": "Itsatsi JSON gradientea hemen...",
"pasteGradient": "Itsatsi Gradientea",
"addColor": "Gehitu Kolorea",
"colorStops": "Kolore Geldialdiak",
"gradientNamePlaceholder": "Gradientearen Izena",
"gradientName": "Gradientearen Izena",
"addCustomGradient": "Gehitu Gradiente Pertsonalizatua",
"customGradients": "Gradiente Pertsonalizatuak",
"maxFPS": "FPS maximoak",
"channelLayout": "Kanalaren Diseinua",
"lineWidth": "Lerroaren Zabalera",
"presetNamePlaceholder": "Sartu aurrezarpenaren izena",
"presetName": "Aurrezarpenaren Izena",
"applyConfiguration": "Aplikatu konfigurazioa",
"pasteFromClipboard": "Itsatsi Arbeletik",
"pasteConfigurationPlaceholder": "Itsatsi JSON konfigurazioa hemen...",
"pasteConfiguration": "Itsatsi Konfigurazioa",
"copyConfiguration": "Kopiatu Konfigurazioa",
"updatePreset": "Aurrezarpena Eguneratu",
"saveAsPreset": "Aurrezarpen gisa gorde",
"applyPreset": "Aurrezarpena Aplikatu",
"selectPreset": "Aukeratu Aurrezarpena",
"presets": "Aurrezarpenak"
}
}
+55 -58
View File
@@ -33,23 +33,23 @@
"muted": "بی‌صدا"
},
"action": {
"editPlaylist": "ویرایش $t(entity.playlist_one)",
"editPlaylist": "ویرایش $t(entity.playlist, {\"count\": 1})",
"goToPage": "برو به صفحهٔ",
"moveToTop": "انتقال به بالا",
"clearQueue": "خالی کردن صف",
"addToFavorites": "افزودن به $t(entity.favorite_other)",
"addToPlaylist": "افزودن به $t(entity.playlist_one)",
"createPlaylist": "ساخت $t(entity.playlist_one)",
"removeFromPlaylist": "حذف از $t(entity.playlist_one)",
"viewPlaylists": "نمایش $t(entity.playlist_other)",
"addToFavorites": "افزودن به $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "افزودن به $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "ساخت $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "حذف از $t(entity.playlist, {\"count\": 1})",
"viewPlaylists": "نمایش $t(entity.playlist, {\"count\": 2})",
"refresh": "$t(common.refresh)",
"deletePlaylist": "حذف $t(entity.playlist_one)",
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "حذف از صف",
"deselectAll": "لغو انتخاب همه",
"moveToBottom": "انتقال به پایین",
"setRating": "تعیین امتیاز",
"toggleSmartPlaylistEditor": "تغییر ویرایشگر $t(entity.smartPlaylist)",
"removeFromFavorites": "حذف از $t(entity.favorite_other)",
"removeFromFavorites": "حذف از $t(entity.favorite, {\"count\": 2})",
"openIn": {
"lastfm": "باز کردن در Last.fm",
"musicbrainz": "باز کردن در MusicBranz"
@@ -76,16 +76,15 @@
"hotkey_volumeDown": "کم کردن صدا",
"audioPlayer_description": "پخش‌کنندهٔ صدا را برای پخش انتخاب کنید",
"hotkey_globalSearch": "جست و جوی سراسری",
"disableAutomaticUpdates": "غیرفعال کردن به‌‌روزرسانی خودکار",
"exitToTray_description": "خروج از اپلیکیشن به system tray",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"discordUpdateInterval_description": "فاصلهٔ بین هر به روزرسانی به ثانیه (حداقل ۱۵ ثانیه)",
"audioExclusiveMode": "حالت اختصاصی صدا",
"remotePassword": "رمز عبور کنترل از راه دور",
"language_description": "زبان اپلیکیشن را معین می‌کند $t(common.restartRequired)",
"hotkey_rate3": "امتیاز ۳ ستاره",
"font": "قلم",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"hotkey_toggleFullScreenPlayer": "تغییر به پخش‌کنندهٔ تمام‌صفحه",
"hotkey_localSearch": "جست و جو در صفحه",
"hotkey_toggleQueue": "تغییر صف",
@@ -186,7 +185,7 @@
"left": "چپ",
"save": "ذخیره",
"right": "راست",
"currentSong": "فعلی $t(entity.track_one)",
"currentSong": "فعلی $t(entity.track, {\"count\": 1})",
"collapse": "بستن",
"trackNumber": "قطعه",
"descending": "نزولی",
@@ -239,7 +238,7 @@
"none": "هیچ",
"menu": "منو",
"restartRequired": "راه‌اندازی دوباره لازم است",
"previousSong": "$t(entity.track_one) پیشین",
"previousSong": "$t(entity.track, {\"count\": 1}) پیشین",
"noResultsFromQuery": "جست‌وجو نتیجه‌ای نداشت",
"quit": "خروج",
"expand": "گسترش",
@@ -256,7 +255,8 @@
"albumPeak": "اوج آلبوم",
"mbid": "شناسه‌ی MusicBrainz",
"reload": "بارگذاری مجدد",
"setting": "پیکربندی",
"setting_one": "پیکربندی",
"setting_other": "",
"trackGain": "گین قطعه",
"trackPeak": "اوج قطعه",
"translation": "ترجمه",
@@ -301,16 +301,16 @@
"rating": "امتیاز",
"search": "جست‌وجو",
"bitrate": "بیت‌ریت",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"recentlyAdded": "به تازگی افزوده شده",
"note": "توجه",
"name": "نام",
"dateAdded": "تاریخ افزوده شدن",
"releaseDate": "تاریخ انتشار",
"albumCount": "$t(entity.album_other) عدد",
"albumCount": "$t(entity.album, {\"count\": 2}) عدد",
"path": "مسیر",
"favorited": "موردعلاقه",
"albumArtist": "$t(entity.albumArtist_one)",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"isRecentlyPlayed": "به تازگی پخش شده است",
"isFavorited": "موردعلاقه است",
"bpm": "bpm",
@@ -319,7 +319,7 @@
"disc": "دیسک",
"biography": "زندگی‌نامه",
"songCount": "تعداد ترانه",
"artist": "$t(entity.artist_one)",
"artist": "$t(entity.artist, {\"count\": 1})",
"duration": "مدت",
"isPublic": "عمومی است",
"random": "تصادفی",
@@ -327,23 +327,23 @@
"toYear": "تا سال",
"fromYear": "از سال",
"criticRating": "امتیاز منتقدین",
"album": "$t(entity.album_one)",
"album": "$t(entity.album, {\"count\": 1})",
"trackNumber": "قطعه",
"communityRating": "رتبه بندی جامعه",
"isCompilation": "مخلوط است"
},
"form": {
"deletePlaylist": {
"title": "حذف $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) حذف شد",
"input_confirm": "برای تایید، نام $t(entity.playlist_one) را وارد کنید"
"title": "حذف $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) حذف شد",
"input_confirm": "برای تایید، نام $t(entity.playlist, {\"count\": 1}) را وارد کنید"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"title": "ساخت $t(entity.playlist_one)",
"title": "ساخت $t(entity.playlist, {\"count\": 1})",
"input_public": "عمومی",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist_one) ساخته شد",
"success": "$t(entity.playlist, {\"count\": 1}) ساخته شد",
"input_owner": "$t(common.owner)"
},
"addServer": {
@@ -360,19 +360,19 @@
"ignoreSsl": "نادیده گرفتن ssl ($t(common.restartRequired))"
},
"addToPlaylist": {
"success": "$t(entity.song_other) به {{numOfPlaylists}}$t(entity.playlist_other) افزوده شد",
"title": "افزودن به $t(entity.playlist_one)",
"input_playlists": "$t(entity.playlist_other)",
"success": "$t(entity.song, {\"count\": 2}) به {{numOfPlaylists}}$t(entity.playlist, {\"count\": 2}) افزوده شد",
"title": "افزودن به $t(entity.playlist, {\"count\": 1})",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"input_skipDuplicates": "پرش از تکراری‌ها"
},
"lyricSearch": {
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist_one)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"title": "جست‌وجو در متن شعر"
},
"editPlaylist": {
"title": "ویرایش $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) با موفقیت بروزرسانی شد",
"title": "ویرایش $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) با موفقیت بروزرسانی شد",
"publicJellyfinNote": "جلی‌فین به دلیلی این‌که فهرست پخش عمومی‌ست یا خصوصی را فاش نمی‌کند. اگر می‌خواهید این عمومی باقی بماند، لطفاٌ ورودی پیش‌رو را منتخب داشته باشید"
},
"queryEditor": {
@@ -417,7 +417,7 @@
"artistWithCount_other": "{{count}} هنرمند",
"folder_one": "پوشه",
"folder_other": "پوشه‌ها",
"smartPlaylist": "$t(entity.playlist_one) هوشمند",
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) هوشمند",
"album_one": "آلبوم",
"album_other": "آلبوم‌ها",
"genreWithCount_one": "{{count}} ژانر",
@@ -431,12 +431,12 @@
},
"page": {
"albumList": {
"title": "$t(entity.album_other)",
"title": "$t(entity.album, {\"count\": 2})",
"artistAlbums": "آلبوم‌های {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})"
},
"appMenu": {
"settings": "$t(common.setting_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"selectServer": "گزینش سرویس‌دهنده",
"expandSidebar": "گسترش نوار کناری",
"collapseSidebar": "فروکش نوار کناری",
@@ -451,11 +451,11 @@
"appearsOn": "مشاهده می‌شود در",
"about": "درباره‌ی {{artist}}",
"recentReleases": "عرضه‌های اخیر",
"viewAllTracks": "نمایش همه‌ی $t(entity.track_other)",
"viewAllTracks": "نمایش همه‌ی $t(entity.track, {\"count\": 2})",
"topSongsFrom": "قطعه‌های برتر از {{title}}",
"viewAll": "نمایش همه",
"viewDiscography": "نمایش کاتالوگ",
"relatedArtists": "$t(entity.artist_other) مربوطه",
"relatedArtists": "$t(entity.artist, {\"count\": 2}) مربوطه",
"topSongs": "قطعه‌های برتر"
},
"contextMenu": {
@@ -523,21 +523,21 @@
"playbackTab": "پخش"
},
"sidebar": {
"genres": "$t(entity.genre_other)",
"playlists": "$t(entity.playlist_other)",
"genres": "$t(entity.genre, {\"count\": 2})",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"search": "$t(common.search)",
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"folders": "$t(entity.folder_other)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"artists": "$t(entity.artist, {\"count\": 2})",
"home": "$t(common.home)",
"nowPlaying": "پخش کنونی",
"tracks": "$t(entity.track_other)",
"settings": "$t(common.setting_other)",
"shared": "$t(entity.playlist_other) اشتراک‌گذاری شده"
"tracks": "$t(entity.track, {\"count\": 2})",
"settings": "$t(common.setting, {\"count\": 2})",
"shared": "$t(entity.playlist, {\"count\": 2}) اشتراک‌گذاری شده"
},
"albumDetail": {
"moreFromArtist": "موارد بیشتر از این $t(entity.artist_one)",
"moreFromArtist": "موارد بیشتر از این $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "موارد بیشتر از {{item}}",
"released": "عرضه شده"
},
@@ -550,9 +550,9 @@
"editServerDetailsTooltip": "ویرایش ریزگان سرویس‌دهنده"
},
"genreList": {
"showAlbums": "نمایش $t(entity.genre_one) $t(entity.album_other)",
"title": "$t(entity.genre_other)",
"showTracks": "نمایش $t(entity.genre_one) $t(entity.track_other)"
"showAlbums": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"title": "$t(entity.genre, {\"count\": 2})",
"showTracks": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
},
"globalSearch": {
"commands": {
@@ -563,15 +563,15 @@
"title": "فرمان‌ها"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
"title": "$t(entity.playlist, {\"count\": 2})"
},
"trackList": {
"title": "$t(entity.track_other)",
"title": "$t(entity.track, {\"count\": 2})",
"artistTracks": "قطعه‌های {{artist}}",
"genreTracks": "$t(entity.track_other) \"{{genre}}\""
"genreTracks": "$t(entity.track, {\"count\": 2}) \"{{genre}}\""
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"itemDetail": {
"copyPath": "کپی کردن مسیر در کلیپ‌بورد",
@@ -584,11 +584,11 @@
"size": "$t(common.size)",
"lastPlayed": "آخرین بار پخش شده",
"discNumber": "دیسک",
"songCount": "$t(entity.track_other)",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "عنوان",
"trackNumber": "قطعه",
"favorite": "مورد علاقه",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"comment": "دیدگاه",
"playCount": "تعداد پخش",
"rating": "امتیاز",
@@ -608,9 +608,6 @@
"gap": "$t(common.gap)",
"itemGap": "فاصله‌ی آیتم (px)"
},
"view": {
"card": "کارت"
},
"label": {
"playCount": "تعداد پخش",
"dateAdded": "تاریخ افزوده شدن",
+337 -93
View File
@@ -3,7 +3,8 @@
"size": "koko",
"search": "etsi",
"sortOrder": "järjestys",
"setting": "asetus",
"setting_one": "asetus",
"setting_other": "asetukset",
"title": "otsikko",
"trackNumber": "raita",
"action_one": "toiminto",
@@ -44,7 +45,7 @@
"owner": "omistaja",
"path": "polku",
"preview": "esikatsele",
"previousSong": "edellinen $t(entity.track_one)",
"previousSong": "edellinen $t(entity.track, {\"count\": 1})",
"resetToDefault": "palauta oletusarvoihin",
"restartRequired": "vaatii uudelleenkäynnistyksen",
"right": "oikea",
@@ -66,7 +67,7 @@
"codec": "koodekki",
"create": "luo",
"description": "kuvaus",
"currentSong": "nykyinen $t(entity.track_one)",
"currentSong": "nykyinen $t(entity.track, {\"count\": 1})",
"delete": "poista",
"duration": "kesto",
"edit": "muokkaa",
@@ -94,7 +95,31 @@
"newVersion": "uusi versio on asennettu ({{version}})",
"viewReleaseNotes": "katsele julkaisutietoja",
"bitDepth": "bittisyvyys",
"sampleRate": "näytteenottotaajuus"
"sampleRate": "näytteenottotaajuus",
"private": "yksityinen",
"public": "julkinen",
"explicitStatus": "eksplisiittinen tila",
"recordLabel": "levy-yhtiö",
"releaseType": "julkaisun tyyppi",
"explicit": "eksplisiittinen",
"clean": "puhdas",
"countSelected": "{{count}} valittuna",
"doNotShowAgain": "älä näytä uudelleen",
"view": "katso",
"example": "esimerkki",
"externalLinks": "ulkoiset linkit",
"faster": "nopeammin",
"filter_single": "yksi",
"filter_multiple": "useampi",
"mood": "mieliala",
"noFilters": "suodattimia ei ole määritetty",
"retry": "yritä uudelleen",
"rename": "nimeä uudelleen",
"slower": "hitaammin",
"sort": "järjestä",
"gridRows": "ruudukon rivejä",
"tableColumns": "taulukon sarakkeita",
"itemsMore": "{{count}} lisää"
},
"entity": {
"album_one": "albumi",
@@ -123,7 +148,7 @@
"genre_other": "genret",
"genreWithCount_one": "{{count}} genre",
"genreWithCount_other": "{{count}} genreä",
"smartPlaylist": "älykäs $t(entity.playlist_one)",
"smartPlaylist": "älykäs $t(entity.playlist, {\"count\": 1})",
"track_one": "raita",
"track_other": "raidat",
"trackWithCount_one": "{{count}} raita",
@@ -131,31 +156,52 @@
"play_one": "{{count}} toisto",
"play_other": "{{count}} toistoa",
"song_one": "kappale",
"song_other": "kappaleet"
"song_other": "kappaleet",
"radioStation_one": "radioasema",
"radioStation_other": "radioasemaa",
"radioStationWithCount_one": "{{count}} radioasema",
"radioStationWithCount_other": "{{count}} radioasemaa"
},
"action": {
"clearQueue": "tyhjennä jono",
"createPlaylist": "luo $t(entity.playlist_one)",
"createPlaylist": "luo $t(entity.playlist, {\"count\": 1})",
"deselectAll": "poista kaikkien valinta",
"editPlaylist": "muokkaa $t(entity.playlist_one)",
"editPlaylist": "muokkaa $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "poista jonosta",
"viewPlaylists": "katsele $t(entity.playlist_other)",
"viewPlaylists": "katsele $t(entity.playlist, {\"count\": 2})",
"openIn": {
"lastfm": "Avaa Last.fm:ssä",
"musicbrainz": "Avaa MusicBrainz:ssä"
},
"goToPage": "mene sivulle",
"moveToBottom": "siirry pohjalle",
"moveToBottom": "siirrä alimmaksi",
"moveToTop": "siirry ylös",
"addToFavorites": "lisää kohteeseen $t(entity.favorite_other)",
"addToPlaylist": "lisää kohteeseen $t(entity.playlist_one)",
"addToFavorites": "lisää kohteeseen $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "lisää kohteeseen $t(entity.playlist, {\"count\": 1})",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "poista kohteesta $t(entity.favorite_other)",
"removeFromFavorites": "poista kohteesta $t(entity.favorite, {\"count\": 2})",
"toggleSmartPlaylistEditor": "kytke $t(entity.smartPlaylist) editori",
"deletePlaylist": "poista $t(entity.playlist_one)",
"removeFromPlaylist": "poista kohteesta $t(entity.playlist_one)",
"deletePlaylist": "poista $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "poista kohteesta $t(entity.playlist, {\"count\": 1})",
"setRating": "aseta arvostelu",
"moveToNext": "siirry seuraavaan"
"moveToNext": "siirry seuraavaan",
"selectRangeOfItems": "valitse useita peräkkäisiä kohteita",
"goToCurrent": "siirry nykyiseen kohteeseen",
"createRadioStation": "luo $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "poista $t(entity.radioStation, {\"count\": 1})",
"selectAll": "valitse kaikki",
"downloadStarted": "aloitettiin lataamaan {{count}} kohdetta",
"moveUp": "siirrä ylöspäin",
"moveDown": "siirrä alaspäin",
"holdToMoveToTop": "pidä pohjassa siirtääksesi ylimmäksi",
"holdToMoveToBottom": "pidä pohjassa siirtääksesi alimmaksi",
"moveItems": "siirrä kohteet",
"shuffle": "sekoita",
"shuffleAll": "sekoita kaikki",
"shuffleSelected": "sekoita valitut",
"viewMore": "katso lisää",
"openApplicationDirectory": "avaa ohjelman kansio",
"addOrRemoveFromSelection": "lisää tai poista valinnasta"
},
"error": {
"remoteEnableError": "virhe tapahtui yrittäessä $t(common.enable) etäpalvelinta",
@@ -181,16 +227,24 @@
"remotePortWarning": "käynnistä palvelin uudestaan ottaaksesi uuden portin käyttöön",
"endpointNotImplementedError": "päätepiste {{endpoint}} ei ole toteutettu {{serverType}} varten",
"badValue": "kelpaamaton optio \"{{value}}\". tätä arvoa ei ole enää olemassa",
"notificationDenied": "luvat ilmouilmoituksia varten evättiin. tällä asetuksella ei ole vaikutusta"
"notificationDenied": "luvat ilmouilmoituksia varten evättiin. tällä asetuksella ei ole vaikutusta",
"invalidJson": "virheellinen JSON",
"multipleServerSaveQueueError": "soittojonossa on yksi tai useampi kappale, jotka eivät ole nykyiseltä palvelimelta. tätä ei ole tuettu",
"noNetwork": "palvelin ei ole käytettävissä",
"noNetworkDescription": "ei voida yhdistää palvelimeen",
"serverLockSingleServer": "lukitussa tilassa sallitaan vain yksi palvelin",
"settingsSyncError": "rendererin ja pääprosessin asetukset eivät täsmää. Käynnistä sovellus uudelleen, jotta muutokset otetaan käyttöön",
"playbackPausedDueToError": "toisto tauotettiin virheen takia",
"saveQueueFailed": "jonon tallentaminen epäonnistui"
},
"filter": {
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "biografia",
"bitrate": "bittinopeus",
"bpm": "lyöntiä minuutissa (bpm)",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"title": "otsikko",
"playCount": "toistomäärä",
"dateAdded": "lisätty päivänä",
@@ -206,12 +260,12 @@
"search": "haku",
"trackNumber": "raita",
"isPublic": "on julkinen",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"favorited": "suosikeissa",
"fromYear": "vuodelta",
"isRated": "on arvosteltu",
"recentlyPlayed": "äskettäin toistetut",
"albumCount": "$t(entity.album_other) määrä",
"albumCount": "$t(entity.album, {\"count\": 2}) määrä",
"disc": "levy",
"duration": "kesto",
"id": "tunnus",
@@ -225,7 +279,11 @@
"note": "muistiinpano",
"owner": "$t(common.owner)",
"path": "polku",
"songCount": "kappalemäärä"
"songCount": "kappalemäärä",
"explicitStatus": "$t(common.explicitStatus)",
"matchAnd": "ja",
"matchOr": "tai",
"sortName": "järjestä nimen mukaan"
},
"form": {
"addServer": {
@@ -239,38 +297,46 @@
"error_savePassword": "salasanaa tallentaessa tapahtui virhe",
"input_password": "salasana",
"input_username": "käyttäjänimi",
"success": "palvelin lisätty onnistuneesti"
"success": "palvelin lisätty onnistuneesti",
"input_preferInstantMix": "suosi pika-miksausta",
"input_preferInstantMixDescription": "käytä vain pika-miksausta saadaksesi samankaltaisia kappaleita. käytännöllinen jos sinulla on lisäosia, jotka muuttavat tätä käytöstä",
"input_preferRemoteUrl": "suosi julkista url-osoitetta",
"input_remoteUrl": "julkinen url-osoite",
"input_remoteUrlPlaceholder": "valinnainen: julkinen url-osoite ulkoisille toiminnoille"
},
"createPlaylist": {
"input_public": "julkinen",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"success": "$t(entity.playlist_one) luotu onnistuneesti",
"title": "luo $t(entity.playlist_one)",
"success": "$t(entity.playlist, {\"count\": 1}) luotu onnistuneesti",
"title": "luo $t(entity.playlist, {\"count\": 1})",
"input_description": "$t(common.description)"
},
"addToPlaylist": {
"input_skipDuplicates": "ohita kaksoiskappaleet",
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) lisätty $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "lisää soittolistalle $t(entity.playlist_one)",
"input_playlists": "$t(entity.playlist_other)"
"title": "lisää soittolistalle $t(entity.playlist, {\"count\": 1})",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"create": "luo $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "hae $t(entity.playlist, {\"count\": 2}) tai tyyppiä luodaksesi uuden"
},
"updateServer": {
"success": "palvelin on päivitetty onnistuneesti",
"title": "päivitä palvelin"
},
"deletePlaylist": {
"success": "$t(entity.playlist_one) poistettu onnistuneesti",
"title": "poista $t(entity.playlist_one)",
"input_confirm": "kirjoita soittolistan $t(entity.playlist_one) nimi vahvistaaksesi"
"success": "$t(entity.playlist, {\"count\": 1}) poistettu onnistuneesti",
"title": "poista $t(entity.playlist, {\"count\": 1})",
"input_confirm": "kirjoita soittolistan $t(entity.playlist, {\"count\": 1}) nimi vahvistaaksesi"
},
"editPlaylist": {
"success": "$t(entity.playlist_one) päivitetty onnistuneesti",
"title": "muokkaa $t(entity.playlist_one)",
"publicJellyfinNote": "Jellyfin ei jostain syystä kerro onko soittolista julkinen vai ei. Jos haluat sen pysyvän julkisena, pidä seuraava valinta valittuna"
"success": "$t(entity.playlist, {\"count\": 1}) päivitetty onnistuneesti",
"title": "muokkaa $t(entity.playlist, {\"count\": 1})",
"publicJellyfinNote": "Jellyfin ei jostain syystä kerro onko soittolista julkinen vai ei. Jos haluat sen pysyvän julkisena, pidä seuraava valinta valittuna",
"editNote": "manuaalisia muokkauksia ei suositella suurille soittolistoille. haluatko varmasti hyväksyä riskin, että nykyinen soittolista ylikirjoitetaan ja tietoja voi hävitä?"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"input_name": "$t(common.name)",
"title": "sanojen haku"
},
@@ -280,12 +346,53 @@
"description": "kuvaus",
"setExpiration": "aseta vanheneminen",
"success": "jakolinkki kopioitu leikepöydälle (tai klikkaa tästä avataksesi)",
"expireInvalid": "vanhetumisen pitää olla tulevaisuudessa"
"expireInvalid": "vanhetumisen pitää olla tulevaisuudessa",
"copyToClipboard": "Kopioi leikepöydälle: Ctrl+C, Enter",
"successMustClick": "jako luotu onnistuneesti. paina tästä avataksesi"
},
"queryEditor": {
"input_optionMatchAny": "sovita joku",
"input_optionMatchAll": "sovita kaikki",
"title": "kyselyeditori"
"title": "kyselyeditori",
"addRuleGroup": "lisää sääntöryhmä",
"removeRuleGroup": "poista sääntöryhmä",
"resetToDefault": "palauta oletukset",
"clearFilters": "poista suodattimet"
},
"privateMode": {
"enabled": "yksityinen tila käytössä, toistotila on nyt piilotettu ulkoisilta integraatioilta",
"disabled": "yksityinen tila poissa käytössä, toistotila on nyt näkyvillä ulkoisille integraatioille",
"title": "yksityinen tila"
},
"largeFetchConfirmation": {
"title": "lisää kohteet jonoon",
"description": "lisää kaikki suodatetun näkymän kohteet"
},
"createRadioStation": {
"success": "radiokanava luotu onnistuneesti",
"title": "luo radiokanava",
"input_homepageUrl": "kotisivun osoite",
"input_name": "nimi",
"input_streamUrl": "suoratoisto-osoite"
},
"lyricsExport": {
"export": "vie sanoitukset",
"input_synced": "vie ajastetut sanoitukset",
"input_offset": "$t(setting.lyricOffset)"
},
"saveQueue": {
"success": "toistojono tallennettu palvelimelle"
},
"shuffleAll": {
"title": "soita satunnainen",
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "kuinka monta kappaletta?",
"input_minYear": "vuodesta",
"input_maxYear": "vuoteen",
"input_played": "toiston suodatin",
"input_played_optionAll": "kaikki raidat",
"input_played_optionUnplayed": "vain toistamattomat raidat",
"input_played_optionPlayed": "vain toistetut raidat"
}
},
"setting": {
@@ -324,7 +431,6 @@
"homeConfiguration": "koti sivun muokkaus",
"homeConfiguration_description": "määritä mitä osioita näkyy, ja missä järjestyksessä, koti sivulla",
"gaplessAudio_optionWeak": "heikko (suositus)",
"genreBehavior_description": "määrittää avautuuko generä painettaessa oletuksena ääniraita vaiko albumi listassa",
"hotkey_browserBack": "selain takaisin",
"hotkey_playbackPlay": "toista",
"hotkey_playbackPlayPause": "toista / tauko",
@@ -358,17 +464,14 @@
"customCss_description": "mukautettu CSS-sisältö. Huomautus: content- ja etä-URL-osoitteet ovat estettyjä ominaisuuksia. Esikatselu sisällöstäsi on alla. Lisäkenttiä, joita et ole määrittänyt, on näkyvissä puhdistuksen vuoksi",
"customCssNotice": "Varoitus: vaikka jonkinlainen puhdistus onkin tehty (url()- ja content:-komentojen estäminen), mukautetun css:n käyttäminen voi silti aiheuttaa riskejä muuttamalla käyttöliittymää",
"disableLibraryUpdateOnStartup": "poista uusimman version tarkistus käynnistyksen yhteydessä käytöstä",
"disableAutomaticUpdates": "poista automaattiset päivitykset käytöstä",
"discordIdleStatus": "näytä rich presencen käyttämätön tila",
"discordIdleStatus_description": "kun käytössä, päivitä tila kun soitin on käyttämättömänä",
"doubleClickBehavior": "lisää kaikki haetut kappaleet soittojonoon tuplaklikkauksella",
"discordUpdateInterval_description": "päivitysväli sekunnteina (vähintään 15 sekunttia)",
"discordRichPresence_description": "ota toiston tila käyttöön {{discord}}n rich presence-toiminnossa. Kuvakkeiden avaimet ovat {{icon}}, {{playing}} ja {{paused}}",
"discordUpdateInterval": "{{discord}} rich presencen päivitysväli",
"enableRemote": "aktivoi etäohjauspalvelin",
"externalLinks_description": "ottaa ulkoiset linkit (Last.fm, MusicBrainz) artistien/albumien sivuilla",
"exitToTray": "sulje tehtäväpalkkiin",
"doubleClickBehavior_description": "jos päällä, kaikki hakutuloksissa olevat kappaleet lisätään soittojonoon. muuten vain napsautettu kappale lisätään jonoon",
"discordApplicationId_description": "{{discord}}n ohjelma-ID rich presenceä varten (oletuksena {{defaultId}})",
"enableRemote_description": "aktivoi etäohjauspalvelimen, jolla muut laitteet voivat ohjata sovellusta",
"externalLinks": "näytä ulkoiset linkit",
@@ -379,7 +482,6 @@
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"lastfmApiKey_description": "API-avain {{lastfm}}:lle. tarvitaan kansikuvia varten",
"passwordStore_description": "mitä salasanojen/avaimien tallennusta käytetään. muuta tätä, jos sinulla on ongelmia salasanojen tallennuksessa",
"floatingQueueArea_description": "näyttää ikonin ikkunan oikealla reunalla jonon katselua varten",
"homeFeature_description": "ohjaa näytetäänkö suuri esittelykaruselli kotisivulla",
"hotkey_rate0": "arvostelun tyhjennys",
"hotkey_togglePreviousSongFavorite": "vaihda $t(common.previousSong) suosikkiasetus",
@@ -392,7 +494,6 @@
"mpvExecutablePath_description": "asettaa mpv:n suoritettavan tiedoston polun. ollessa tyhjä, käytetään oletuspolkua",
"mpvExtraParameters_help": "yksi per rivi",
"playButtonBehavior_optionPlay": "$t(player.play)",
"genreBehavior": "genre-sivun oletustoiminta",
"globalMediaHotkeys": "globaalit median pikanäppäimet",
"globalMediaHotkeys_description": "ota käyttöön tai poista käytöstä järjestelmän median pikanäppäinten käyttö toiston hallintaa",
"hotkey_toggleCurrentSongFavorite": "vaihda $t(common.currentSong) suosikkiasetus",
@@ -419,14 +520,13 @@
"minimizeToTray_description": "pienennä sovellus ilmaisinalueelle",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"hotkey_zoomOut": "loitonna",
"floatingQueueArea": "näytä kelluvan jonon avausalue",
"homeFeature": "kodin esittelykaruselli",
"hotkey_toggleFullScreenPlayer": "vaihda kokonäytön toistin",
"hotkey_toggleRepeat": "vaihda kertaus",
"gaplessAudio": "tauoton toisto",
"transcodeFormat_description": "valitsee transkoodattavan formaatin. jätä tyhjäksi palvelimen valintaa varten",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"themeDark": "teema (tumma)",
"translationApiKey_description": "API-avain käännöstä varten (tukee vain globaalia palvelun palvelupistettä)",
"playbackStyle_description": "valitse toiston tyyli, jota käytetään soittimessa",
@@ -463,8 +563,7 @@
"replayGainClipping": "{{ReplayGain}} leikkaus",
"replayGainClipping_description": "Estää {{ReplayGain}}n aiheuttaman leikkauksen laskemalla vahvistusta automaatisesti",
"replayGainFallback": "{{ReplayGain}} palautus",
"playerAlbumArtResolution_description": "suurien kansikuvien resoluutio soittimen esikatselussa. suurempi tekee niistä terävempiä, mutta voi hidastaa latausta. oletuksena on 0, joka tarkoittaa automaattista",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"replayGainPreamp": "{{ReplayGain}} esivahvistus (dB)",
"scrobble_description": "skrobblaa toistot mediapalvelimellesi",
"replayGainPreamp_description": "säätää esivahvistuksen määrää {{ReplayGain}} arvoon",
@@ -479,7 +578,6 @@
"sidebarConfiguration": "sivupalkin asetukset",
"sidebarConfiguration_description": "valitse kohteet ja niiden järjestys sivupalkissa",
"volumeWidth_description": "äänenvoimakkuuden säätimen leveys",
"playerAlbumArtResolution": "soittimen kansikuvien resoluutio",
"playerbarOpenDrawer": "toistipalkin kokoruudun kytkin",
"playerbarOpenDrawer_description": "sallii toistopalkin klikkaamisen avaamaan kokonäytön soittimen",
"replayGainFallback_description": "asetettava vahvistus desibelinä (dB), jos tiedostolla ei ole {{ReplayGain}} tageja",
@@ -521,7 +619,22 @@
"discordPausedStatus": "näytä rich presence tauotettuna",
"discordPausedStatus_description": "ollessak käytössä, status näyttää milloin soitin on tautotettuna",
"preservePitch": "säilytä sävelkorkeus",
"preservePitch_description": "säilytä sävelkorkeus toistonopeutta muokatessa"
"preservePitch_description": "säilytä sävelkorkeus toistonopeutta muokatessa",
"artistBackground": "artistin taustakuva",
"artistBackground_description": "lisää taustakuvan artistin sivuille, jotak sisältävät artistin kuvia",
"artistBackgroundBlur": "artistin taustakuvan kuvan sumennuksen koko",
"artistBackgroundBlur_description": "säätää artistin taustakuvaan käytettävän sumennuksen määrää",
"crossfadeStyle": "ristihäivytyksen tyylli",
"releaseChannel_optionBeta": "beeta",
"releaseChannel_optionLatest": "viimeisin",
"releaseChannel": "julkaisulinja",
"releaseChannel_description": "valitse vakaiden ja beetaversioiden välillä automaattisille päivityksille",
"discordDisplayType_artistname": "artistin nimi / artistien nimet",
"autoDJ": "auto DJ",
"autoDJ_description": "lisää automaattisesti samanlaisia kappaleita jonoon",
"autoDJ_itemCount": "kohteiden määrä",
"autoDJ_itemCount_description": "jonoon lisättäväksi yritettyjen kohteiden määrä, kun auto DJ on käytössä",
"autoDJ_timing": "ajastus"
},
"page": {
"itemDetail": {
@@ -530,29 +643,35 @@
"openFile": "näytä kappale tiedostonhallinnassa"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"albumDetail": {
"moreFromArtist": "siirrä kohteesta $t(entity.artist_one)",
"moreFromArtist": "siirrä kohteesta $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "listää kohteesta {{item}}",
"released": "julkaistu"
},
"albumList": {
"artistAlbums": "artistin {{artist}} albumit",
"genreAlbums": "\"{{genre}}\"$t(entity.album_other)",
"title": "$t(entity.album_other)"
"genreAlbums": "\"{{genre}}\"$t(entity.album, {\"count\": 2})",
"title": "$t(entity.album, {\"count\": 2})"
},
"appMenu": {
"goBack": "mene takaisin",
"openBrowserDevtools": "avaa selaimen kehitystyökalut",
"quit": "$t(common.quit)",
"selectServer": "valitse palvelin",
"settings": "$t(common.setting_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"expandSidebar": "laajenna sivupalkki",
"goForward": "mene eteenpäin",
"manageServers": "hallitse palvelimia",
"collapseSidebar": "kutista sivupalkki",
"version": "versio {{version}}"
"version": "versio {{version}}",
"privateModeOff": "käännä yksityinen tila pois käytöstä",
"privateModeOn": "käännä yksityinen tila käyttöön",
"commandPalette": "avaa komentopaletti",
"selectMusicFolder": "valitse musiikkikansio",
"noMusicFolder": "musiikkikansiota ei ole valittu",
"multipleMusicFolders": "{{count}} musiikkikansio(ta) valittu"
},
"contextMenu": {
"playSimilarSongs": "$t(player.playSimilarSongs)",
@@ -576,29 +695,54 @@
"addFavorite": "$t(action.addToFavorites)",
"addLast": "$t(player.addLast)",
"moveToNext": "$t(action.moveToNext)",
"removeFromQueue": "$t(action.removeFromQueue)"
"removeFromQueue": "$t(action.removeFromQueue)",
"goToAlbum": "mene $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "mene $t(entity.albumArtist, {\"count\": 1})",
"moveItems": "$t(action.moveItems)",
"goTo": "mene"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"settings": "$t(common.setting_other)",
"shared": "$t(entity.playlist_other) jaettu",
"tracks": "$t(entity.track_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"settings": "$t(common.setting, {\"count\": 2})",
"shared": "$t(entity.playlist, {\"count\": 2}) jaettu",
"tracks": "$t(entity.track, {\"count\": 2})",
"artists": "$t(entity.artist, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"home": "$t(common.home)",
"nowPlaying": "nyt soi",
"playlists": "$t(entity.playlist_other)",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"search": "$t(common.search)",
"myLibrary": "oma kirjasto"
"myLibrary": "oma kirjasto",
"collections": "kokoelmat",
"favorites": "$t(entity.favorite, {\"count\": 2})",
"radio": "$t(entity.radioStation, {\"count\": 2})"
},
"setting": {
"generalTab": "yleinen",
"windowTab": "ikkuna",
"hotkeysTab": "pikanäppäimet",
"playbackTab": "toisto",
"advanced": "edistyneet"
"advanced": "edistyneet",
"analytics": "tilastot",
"updates": "päivitä",
"cache": "välimuisti",
"application": "aplikaatio",
"queryBuilder": "kyselynrakentaja",
"theme": "teema",
"controls": "säätimet",
"sidebar": "sivupalkki",
"remote": "kauko-ohjain",
"exportImport": "tuo/vie",
"scrobble": "scrobblata",
"audio": "audio",
"lyrics": "sanat",
"lyricsDisplay": "sanojen näyttö",
"transcoding": "transkoodaus",
"discord": "discord",
"logger": "lokittaja",
"playerFilters": "soittimen suodattimet"
},
"fullscreenPlayer": {
"upNext": "seuraavaksi",
@@ -624,9 +768,9 @@
"related": "liittyvät"
},
"genreList": {
"showAlbums": "näytä $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "näytä $t(entity.genre_one) $t(entity.track_other)",
"title": "$t(entity.genre_other)"
"showAlbums": "näytä $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"showTracks": "näytä $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})",
"title": "$t(entity.genre, {\"count\": 2})"
},
"globalSearch": {
"commands": {
@@ -641,21 +785,29 @@
"recentlyPlayed": "hiljattain soitetut",
"title": "$t(common.home)",
"mostPlayed": "eniten soitetut",
"newlyAdded": "hiljattain lisätyt julkaisut"
"newlyAdded": "hiljattain lisätyt julkaisut",
"recentlyReleased": "hiljattain julkaistu",
"genres": "$t(entity.genre, {\"count\": 2})"
},
"albumArtistDetail": {
"about": "{{artist}}{sta/stä",
"about": "{{artist}}",
"viewDiscography": "katsele diskografiaa",
"relatedArtists": "liittyvät $t(entity.artist_other)",
"relatedArtists": "liittyvät $t(entity.artist, {\"count\": 2})",
"appearsOn": "esiintyy",
"topSongs": "parhaat kappaleet",
"topSongsFrom": "parhaat kappaleet albumilta {{title}}",
"recentReleases": "hiljattaiset julkaisut",
"viewAll": "katsele kaikkia",
"viewAllTracks": "katsele kaikkia $t(entity.track_other)"
"viewAllTracks": "katsele kaikkia $t(entity.track, {\"count\": 2})",
"favoriteSongs": "suosikki kappaleet",
"groupingTypeAll": "kaikki julkaisun tyypit",
"groupingTypePrimary": "ensisijaiset tyypin julkaisut",
"topSongsCommunity": "yhteisö",
"topSongsPersonal": "henkilökohtainen",
"favoriteSongsFrom": "suosikkikappale {{title}}:sta"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
"title": "$t(entity.playlist, {\"count\": 2})"
},
"manageServers": {
"title": "hallitse palvelimia",
@@ -670,13 +822,35 @@
},
"trackList": {
"artistTracks": "artistin {{artist}} kappaleet",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track_other)"
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
"title": "$t(entity.track, {\"count\": 2})"
},
"radioList": {
"title": "radiokanavat"
},
"releasenotes": {
"commitsSinceStable": "muutokset {{stable}} verrattuna",
"noNewCommits": "ei uusia muutoksia tällä välillä",
"noStableReleaseToCompare": "vertailukelpoista vakaata versiota ei löytynyt"
},
"favorites": {
"title": "$t(entity.favorite, {\"count\": 2})"
},
"windowBar": {
"paused": "(Tauotettu) ",
"privateMode": "(Yksityinen tila)"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"collections": {
"overrideExisting": "syrjäytä olemassa olevat",
"saveAsCollection": "tallenna kokoelmana"
}
},
"player": {
"addLast": "lisää viimeinen",
"addNext": "lisää seuraava",
"addLast": "viimeinen",
"addNext": "seuraava",
"favorite": "suosikki",
"queue_moveToTop": "siirrä valittu alas",
"queue_remove": "poista valittu",
@@ -695,7 +869,7 @@
"repeat_all": "kertaa kaikki",
"playbackFetchCancel": "tämä vie aikaa... sulje ilmoitus peruaksesi",
"mute": "mykistä",
"shuffle": "soita sekoitettuna",
"shuffle": "soita (sekoitettuna)",
"next": "seuraava",
"play": "toista",
"playbackFetchInProgress": "ladataan kappaleita…",
@@ -705,7 +879,25 @@
"playSimilarSongs": "toista samanlaisia kappaleita",
"repeat_off": "kertaus pois päältä",
"shuffle_off": "sekoitus pois päältä",
"toggleFullscreenPlayer": "vaihda kokoruudun soittimeen"
"toggleFullscreenPlayer": "vaihda kokoruudun soittimeen",
"addLastShuffled": "viimeinen (sekoitettu)",
"addNextShuffled": "seuraava (sekoitettu)",
"albumRadio": "albumiradio",
"artistRadio": "artistiradio",
"holdToShuffle": "pidä sekoittaaksesi",
"lyrics": "sanat",
"restoreQueueFromServer": "palauta tiedustelu palvelimelta",
"saveQueueToServer": "tallenna tiedustelu palvelimelle",
"trackRadio": "raitaradio",
"sleepTimer": "uniajastin",
"sleepTimer_endOfSong": "nykyisen kappaleen loppu",
"sleepTimer_minutes": "{{count}} min",
"sleepTimer_hours": "{{count}} t",
"sleepTimer_custom": "mukautettu",
"sleepTimer_off": "pois",
"sleepTimer_timeRemaining": "{{time}} jäljellä",
"sleepTimer_setCustom": "aseta ajastin",
"sleepTimer_cancel": "peruuta ajastin"
},
"table": {
"config": {
@@ -722,14 +914,14 @@
"label": {
"channels": "$t(common.channel_other)",
"trackNumber": "raidan numero",
"album": "$t(entity.album_one)",
"album": "$t(entity.album, {\"count\": 1})",
"actions": "$t(common.action_other)",
"codec": "$t(common.codec)",
"dateAdded": "lisäyspäivämäärä",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"discNumber": "levyn numero",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
@@ -740,19 +932,17 @@
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"playCount": "toistojen lukumäärä",
"rating": "$t(common.rating)",
"releaseDate": "julkaisupäivämäärä",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "$t(common.title)",
"year": "$t(common.year)"
},
"view": {
"table": "taulukko",
"card": "kortti",
"poster": "juliste",
"grid": "ruudukko",
"list": "lista"
}
@@ -760,7 +950,7 @@
"column": {
"releaseYear": "vuosi",
"bpm": "bpm",
"artist": "$t(entity.artist_one)",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "biografia",
"dateAdded": "lisäyspäivämäärä",
"album": "albumi",
@@ -768,20 +958,74 @@
"lastPlayed": "viimeksi toistettu",
"path": "polku",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "nimi",
"trackNumber": "raita",
"codec": "$t(common.codec)",
"comment": "kommentti",
"albumCount": "$t(entity.album_other)",
"albumCount": "$t(entity.album, {\"count\": 2})",
"bitrate": "bittinopeus",
"channels": "$t(common.channel_other)",
"discNumber": "levy",
"favorite": "suosikki",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"playCount": "toistoja",
"rating": "arvostelu",
"releaseDate": "julkaisupäivämäärä"
}
},
"releaseType": {
"primary": {
"album": "$t(entity.album, {\"count\": 1})",
"broadcast": "lähetys",
"ep": "EP",
"other": "muu",
"single": "single"
},
"secondary": {
"audiobook": "änikirja",
"audioDrama": "kuunnelma",
"compilation": "kokoomateos",
"djMix": "DJ mix",
"demo": "demo",
"fieldRecording": "kenttä-äänitys",
"interview": "haastattelu",
"live": "live",
"mixtape": "mixtape",
"remix": "remiksi",
"soundtrack": "elokuvamusiikki",
"spokenWord": "puhetta"
}
},
"datetime": {
"minuteShort": "m",
"secondShort": "s",
"hourShort": "t",
"dayShort": "p"
},
"filterOperator": {
"after": "jälkeen",
"afterDate": "jälkeen (päivän)",
"before": "ennen",
"beforeDate": "ennen (päivää)",
"contains": "sisältää",
"endsWith": "loppuu",
"inPlaylist": "on",
"inTheLast": "on viimeisenä",
"inTheRange": "on välillä",
"inTheRangeDate": "on valitulla aikavälillä (päivä)",
"is": "on",
"isNot": "ei ole",
"isGreaterThan": "enemmän kuin",
"isLessThan": "vähemmän kuin",
"matchesRegex": "vastaa säännöllistä lausetta (regex)",
"notContains": "ei sisällä",
"notInPlaylist": "ei ole",
"notInTheLast": "ei ole viimeisenä",
"startsWith": "alkaa"
},
"queryBuilder": {
"standardTags": "standardi tagit",
"customTags": "mukautetut tagit"
}
}
+582 -131
View File
File diff suppressed because it is too large Load Diff
+889 -67
View File
File diff suppressed because it is too large Load Diff
+681 -109
View File
File diff suppressed because it is too large Load Diff
+332 -95
View File
@@ -1,27 +1,40 @@
{
"action": {
"editPlaylist": "modifica $t(entity.playlist_one)",
"editPlaylist": "modifica $t(entity.playlist, {\"count\": 1})",
"goToPage": "vai alla pagina",
"clearQueue": "cancella la coda",
"addToFavorites": "aggiungi a $t(entity.favorite_other)",
"addToPlaylist": "aggiungi a $t(entity.playlist_one)",
"createPlaylist": "crea $t(entity.playlist_one)",
"removeFromPlaylist": "rimuovi da $t(entity.playlist_one)",
"viewPlaylists": "visualizza $t(entity.playlist_other)",
"addToFavorites": "aggiungi a $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "aggiungi a $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "crea $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "rimuovi da $t(entity.playlist, {\"count\": 1})",
"viewPlaylists": "visualizza $t(entity.playlist, {\"count\": 2})",
"refresh": "$t(common.refresh)",
"deletePlaylist": "elimina $t(entity.playlist_one)",
"deletePlaylist": "elimina $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "rimuovi dalla coda",
"deselectAll": "deseleziona tutto",
"setRating": "vota",
"toggleSmartPlaylistEditor": "attiva/disattiva editor $t(entity.smartPlaylist)",
"removeFromFavorites": "rimuovi da $t(entity.favorite_other)",
"removeFromFavorites": "rimuovi da $t(entity.favorite, {\"count\": 2})",
"moveToTop": "sposta in cima",
"moveToBottom": "sposta in fondo",
"moveToNext": "passa al successivo",
"openIn": {
"lastfm": "Apri in Last.fm",
"musicbrainz": "Apri in MusicBrainz"
}
},
"addOrRemoveFromSelection": "aggiungi o rimuovi dalla selezione",
"selectRangeOfItems": "seleziona un intervallo di elementi",
"createRadioStation": "crea $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "rimuovi $t(entity.radioStation, {\"count\": 1})",
"selectAll": "seleziona tutto",
"downloadStarted": "download di {{count}} elementi iniziato",
"moveUp": "sposta sopra",
"moveDown": "sposta in basso",
"holdToMoveToTop": "tieni premuto per muovere in cima",
"holdToMoveToBottom": "tieni premuto per muoverlo in fondo",
"moveItems": "muovi elementi",
"shuffle": "casuale",
"viewMore": "mostra di più"
},
"common": {
"backward": "indietro",
@@ -51,7 +64,7 @@
"left": "sinistra",
"save": "salva",
"right": "destra",
"currentSong": "$t(entity.track_one) corrente",
"currentSong": "$t(entity.track, {\"count\": 1}) corrente",
"trackNumber": "traccia",
"descending": "decrescente",
"gap": "gap",
@@ -75,7 +88,9 @@
"forward": "successivo",
"delete": "elimina",
"forceRestartRequired": "riavvia per applicare le modifiche... chiudi la notifica per riavviare",
"setting": "impostazione",
"setting_one": "impostazione",
"setting_many": "impostazioni",
"setting_other": "impostazioni",
"version": "versione",
"title": "titolo",
"filter_one": "filtro",
@@ -94,7 +109,7 @@
"none": "nessuno",
"menu": "menù",
"restartRequired": "riavvio richiesto",
"previousSong": "$t(entity.track_one) precedente",
"previousSong": "$t(entity.track, {\"count\": 1}) precedente",
"noResultsFromQuery": "la query non ha ritornato risultati",
"quit": "esci",
"expand": "espandi",
@@ -121,7 +136,24 @@
"trackPeak": "picco di volume del brano",
"translation": "traduzione",
"bitDepth": "bit depth (profondità di bit)",
"sampleRate": "sample rate (frequenza di campionamento)"
"sampleRate": "sample rate (frequenza di campionamento)",
"countSelected": "{{count}} selezionati",
"doNotShowAgain": "non mostrarlo di nuovo",
"view": "visualizza",
"example": "esempio",
"externalLinks": "link esterni",
"faster": "più rapido",
"filter_single": "singolo",
"noFilters": "nessun filtro configurato",
"private": "privato",
"public": "pubblico",
"retry": "riprova",
"recordLabel": "registra etichetta",
"rename": "rinomina",
"sort": "ordina",
"explicit": "esplicito",
"clean": "pulisci",
"itemsMore": "ancora {{count}}"
},
"player": {
"repeat_all": "ripeti coda",
@@ -138,7 +170,7 @@
"shuffle": "riproduzione casuale",
"playbackFetchNoResults": "nessuna canzone trovata",
"playbackFetchInProgress": "caricamento canzoni…",
"addNext": "aggiungi successivo",
"addNext": "successivo",
"playbackSpeed": "velocità di riproduzione",
"playbackFetchCancel": "ci sta mettendo un po'... chiudi la notifica per annullare",
"play": "riproduci",
@@ -150,18 +182,30 @@
"queue_moveToTop": "sposta selezionati in fondo",
"queue_moveToBottom": "sposta selezionati in cima",
"shuffle_off": "non mescolare",
"addLast": "aggiungi in coda",
"addLast": "per ultima",
"mute": "silenzia",
"skip_forward": "salta avanti",
"playSimilarSongs": "riproduci brani simili",
"viewQueue": "visualizza coda"
"viewQueue": "visualizza coda",
"holdToShuffle": "tieni premuto per la riproduzione casuale",
"lyrics": "testi",
"restoreQueueFromServer": "ripristina coda dal server",
"saveQueueToServer": "salva coda sul server",
"trackRadio": "radio della traccia",
"sleepTimer_minutes": "{{count}} minuti",
"sleepTimer_hours": "{{count}} ore",
"sleepTimer_custom": "personalizzato",
"sleepTimer_off": "spento",
"sleepTimer_timeRemaining": "{{time}} rimanente",
"sleepTimer_setCustom": "imposta timer",
"sleepTimer_cancel": "cancella timer"
},
"setting": {
"crossfadeStyle_description": "seleziona lo stile dissolvenza da usare per il player audio",
"remotePort_description": "imposta la porta del server di controllo remoto",
"hotkey_skipBackward": "salta a precedente",
"volumeWheelStep_description": "la quantità di volume da cambiare quando si scorre la rotellina del mouse sullo slider del volume",
"audioDevice_description": "seleziona il device audioda usare per la riproduzione (solo web player)",
"audioDevice_description": "seleziona il dispositivo audio da usare per la riproduzione",
"theme_description": "imposta il tema da usare per l'applicazione",
"hotkey_playbackPause": "pausa",
"hotkey_volumeUp": "alza volume",
@@ -200,11 +244,10 @@
"hotkey_globalSearch": "ricerca globale",
"gaplessAudio_description": "imposta l'audio gapless per mpv",
"remoteUsername_description": "imposta l'username del server di controllo remoto. Se username e password sono vuoti, l'autenticazione sarà disattivata",
"disableAutomaticUpdates": "disabilita aggiornamenti automatici",
"exitToTray_description": "riduce a icona nella barra di sistema all'uscita",
"followLyric_description": "scorre il testo alla posizione di riproduzione corrente",
"hotkey_favoritePreviousSong": "$t(common.previousSong) preferita",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"lyricOffset": "offset testi (ms)",
"discordUpdateInterval_description": "il tempo in secondi tra ogni aggiornamento (minimo 15 secondi)",
"fontType_optionCustom": "font personalizzato",
@@ -216,7 +259,7 @@
"playbackStyle_optionCrossFade": "dissolvenza",
"hotkey_rate3": "voto 3 stelle",
"font": "font",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"themeLight_description": "imposta il tema chiaro da usare per l'applicazione",
"hotkey_toggleFullScreenPlayer": "attiva/disattiva player a schermo intero",
"hotkey_localSearch": "ricerca in-pagina",
@@ -249,7 +292,6 @@
"accentColor_description": "imposta colore d'accento per l'applicazione",
"playbackStyle_optionNormal": "normale",
"windowBarStyle": "stile barra della finestra",
"floatingQueueArea": "mostra l'area di passaggio della coda fluttante",
"hotkey_toggleRepeat": "attiva/disattiva ripeti",
"lyricOffset_description": "aumenta/dimuisce l'offset del testo di una specifica quantità di millisecondi",
"sidebarConfiguration_description": "seleziona gli elementi e l'ordine in cui appaiono nella barra laterale",
@@ -260,7 +302,7 @@
"useSystemTheme_description": "segui le preferenze del tema definite dal sistema",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"lyricFetch_description": "ottieni testi da varie sorgenti internet",
"lyricFetchProvider_description": "seleziona i provider da dove prendere i testi. l'ordine dei provider è l'ordine in cui vengono fatte le richieste",
"lyricFetchProvider_description": "seleziona i provider dai quali prendere i testi",
"globalMediaHotkeys_description": "attiva/disattiva l'uso dei tasti media globali per controllare la riproduzione",
"customFontPath": "percorso font personalizzato",
"followLyric": "segui testo corrente",
@@ -271,7 +313,6 @@
"hotkey_rate0": "rimuovi voto",
"discordApplicationId": "application id {{discord}}",
"applicationHotkeys_description": "configura tasti a scelta rapida dell'applicazione. attiva/disattiva la casella per impostare un tasto a scelta rapida globale (solo desktop)",
"floatingQueueArea_description": "visualizza l'icona di passaggio sul lato destro dello schermo per mostrare la coda di riproduzione",
"hotkey_volumeMute": "silenzia volume",
"remoteUsername": "username server di controllo remoto",
"sidebarPlaylistList": "lista playlist nella barra laterale",
@@ -335,14 +376,10 @@
"discordListening_description": "mostra lo stato come in ascolto invece che in riproduzione",
"discordServeImage": "recupera le immagini di {{discord}} dal server",
"discordServeImage_description": "condividi la copertina per lo stato attività di {{discord}} direttamente dal server, disponibile solo per Jellyfin e Navidrome",
"doubleClickBehavior": "aggiungi alla coda tutte le tracce cercate, con un doppio clic",
"doubleClickBehavior_description": "se attivato, tutte le tracce corrispondenti alla ricerca verranno aggiunte alla coda. altrimenti, verrà aggiunta alla coda solo la traccia selezionata",
"externalLinks": "mostra link esterni",
"externalLinks_description": "consente di visualizzare link esterni (Last.fm, MusicBrainz) sulle pagine di artista/album",
"preferLocalLyrics": "utilizza i testi locali",
"preferLocalLyrics_description": "usa i testi locali anziché quelli online, quando disponibili",
"genreBehavior": "comportamento predefinito della pagina genere",
"genreBehavior_description": "determina se cliccando su un genere si apre di default la lista dei brani o degli album",
"homeConfiguration": "configurazione della home page",
"homeConfiguration_description": "configura quali elementi vengono mostrati e in quale ordine nella home page",
"homeFeature": "carosello in evidenza nella home page",
@@ -361,8 +398,6 @@
"passwordStore": "Archivio di password/segreti",
"passwordStore_description": "specifica quale archivio di password e segreti utilizzare. modificalo in caso di problemi nel salvataggio delle credenziali",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"playerAlbumArtResolution": "risoluzione della copertina nel lettore",
"playerAlbumArtResolution_description": "la risoluzione dellanteprima della copertina nel lettore in formato grande. valori più alti la rendono più nitida, ma possono rallentare il caricamento. Il valore predefinito è 0, che indica la modalità automatica",
"sidePlayQueueStyle_optionAttached": "fissata",
"sidePlayQueueStyle_optionDetached": "sganciata",
"startMinimized": "avvia minimizzato",
@@ -400,7 +435,35 @@
"discordLinkType": "link di attività {{discord}}",
"discordLinkType_description": "aggiunge collegamenti esterni a {{lastfm}} o {{musicbrainz}} ai campi del brano e dell'artista nell'attività {{discord}}. {{musicbrainz}} è il più accurato, ma richiede tag e non fornisce collegamenti dell'artista mentre {{lastfm}} dovrebbe sempre fornire un link. non rende richieste di rete extra",
"discordLinkType_none": "$t(common.none)",
"discordLinkType_mbz_lastfm": "{{musicbrainz}} con {{lastfm}} fallback"
"discordLinkType_mbz_lastfm": "{{musicbrainz}} con {{lastfm}} fallback",
"autoDJ": "auto DJ",
"autoDJ_description": "aggiungi automaticamente canzoni simili alla coda",
"autoDJ_itemCount": "conteggio elementi",
"analyticsDisable_description": "Alcuni dati anonimi sull'utilizzo vengono inviati allo sviluppatore per migliorare l'applicazione",
"artistBackground": "immagine dello sfondo dell'artista",
"releaseChannel_optionBeta": "beta",
"releaseChannel_optionLatest": "ultima",
"releaseChannel": "canale di rilascio",
"releaseChannel_description": "seleziona tra rilascio stabile, beta o alpha (nightly) per gli aggiornamenti automatici",
"discordRichPresence": "{{discord}} rich presence",
"releaseChannel_optionAlpha": "alpha (nightly)",
"automaticUpdates_description": "Controlla e installa aggiornamenti automaticamente",
"automaticUpdates": "Aggiornamenti automatici",
"exportImportSettings_notValidJSON": "il file passato non è un JSON valido",
"language": "lingua",
"logLevel_optionDebug": "debug",
"logLevel_optionError": "errore",
"logLevel_optionInfo": "info",
"pathReplace_optionRemovePrefix": "rimuovi prefisso",
"pathReplace_optionAddPrefix": "aggiungi prefisso",
"playerFilters": "Filtra canzoni dalla coda",
"imageResolution_optionHeader": "header",
"playerbarWaveformAlign_optionTop": "in cima",
"sidebarPlaylistListFilterRegex_placeholder": "es. ^Daily Mix.*",
"transcode": "abilita transcodifica",
"queryBuilderCustomFields_inputLabel": "etichetta",
"queryBuilderCustomFields_inputTag": "tag",
"queryBuilderCustomFields": "campi personalizzati"
},
"error": {
"remotePortWarning": "riavvia il server per applicare la nuova porta",
@@ -426,14 +489,17 @@
"badValue": "opzione non valida \"{{value}}\". valore inesistente",
"networkError": "si è verificato un errore di rete",
"openError": "impossibile aprire il file",
"notificationDenied": "i permessi per le notifiche non sono stati concessi. questa configurazione non ha effetto"
"notificationDenied": "i permessi per le notifiche non sono stati concessi. questa configurazione non ha effetto",
"invalidJson": "JSON non valido",
"noNetwork": "server non disponibile",
"noNetworkDescription": "impossibile connettersi al server"
},
"filter": {
"mostPlayed": "più riprodotti",
"comment": "commento",
"playCount": "numero di riproduzioni",
"recentlyUpdated": "aggiornati recentemente",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"isCompilation": "è una compilation",
"recentlyPlayed": "riprodotti recentemente",
"isRated": "è valutato",
@@ -442,17 +508,17 @@
"rating": "voto",
"search": "cerca",
"bitrate": "bitrate",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"recentlyAdded": "aggiunti recentemente",
"note": "nota",
"name": "nome",
"dateAdded": "data aggiunta",
"releaseDate": "data di rilascio",
"albumCount": "numero $t(entity.album_other)",
"albumCount": "numero $t(entity.album, {\"count\": 2})",
"communityRating": "voto della community",
"path": "percorso",
"favorited": "preferito",
"albumArtist": "$t(entity.albumArtist_one)",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"isRecentlyPlayed": "è stato recentemente riprodotto",
"isFavorited": "è preferito",
"bpm": "bpm",
@@ -461,7 +527,7 @@
"disc": "disco",
"biography": "biografia",
"songCount": "conteggio canzoni",
"artist": "$t(entity.artist_one)",
"artist": "$t(entity.artist, {\"count\": 1})",
"duration": "durata",
"isPublic": "è pubblico",
"random": "casuale",
@@ -469,24 +535,29 @@
"toYear": "fino all'anno",
"fromYear": "dall'anno",
"criticRating": "voto della critica",
"album": "$t(entity.album_one)",
"trackNumber": "traccia"
"album": "$t(entity.album, {\"count\": 1})",
"trackNumber": "traccia",
"matchOr": "o",
"sortName": "ordina nome"
},
"page": {
"sidebar": {
"nowPlaying": "in riproduzione",
"playlists": "$t(entity.playlist_other)",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"search": "$t(common.search)",
"tracks": "$t(entity.track_other)",
"albums": "$t(entity.album_other)",
"genres": "$t(entity.genre_other)",
"folders": "$t(entity.folder_other)",
"settings": "$t(common.setting_other)",
"tracks": "$t(entity.track, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"settings": "$t(common.setting, {\"count\": 2})",
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"artists": "$t(entity.artist, {\"count\": 2})",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"myLibrary": "la mia libreria",
"shared": "condivisa $t(entity.playlist_other)"
"shared": "condivisa $t(entity.playlist, {\"count\": 2})",
"collections": "collezioni",
"favorites": "$t(entity.favorite, {\"count\": 2})",
"radio": "$t(entity.radioStation, {\"count\": 2})"
},
"fullscreenPlayer": {
"config": {
@@ -514,7 +585,7 @@
"appMenu": {
"selectServer": "seleziona server",
"version": "versione {{version}}",
"settings": "$t(common.setting_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"manageServers": "gestisci server",
"expandSidebar": "espandi barra laterale",
"collapseSidebar": "collassa barra laterale",
@@ -523,7 +594,10 @@
"goBack": "torna indietro",
"goForward": "vai avanti",
"privateModeOff": "disabilita modalità privata",
"privateModeOn": "abilita modalità privata"
"privateModeOn": "abilita modalità privata",
"selectMusicFolder": "seleziona cartella con musica",
"noMusicFolder": "nessuna cartella con musica selezionata",
"multipleMusicFolders": "{{count}} cartelle con musica selezionate"
},
"contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)",
@@ -548,8 +622,10 @@
"playShuffled": "$t(player.shuffle)",
"shareItem": "condividi elemento",
"showDetails": "mostra info",
"goToAlbum": "vai a $t(entity.album_one)",
"goToAlbumArtist": "vai a $t(entity.albumArtist_one)"
"goToAlbum": "vai a $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "vai a $t(entity.albumArtist, {\"count\": 1})",
"moveItems": "$t(action.moveItems)",
"goTo": "vai a"
},
"home": {
"mostPlayed": "più riprodotti",
@@ -557,10 +633,11 @@
"title": "$t(common.home)",
"explore": "esplora dalla tua libreria",
"recentlyPlayed": "riprodotti recentemente",
"recentlyReleased": "appena pubblicato"
"recentlyReleased": "appena pubblicato",
"genres": "$t(entity.genre, {\"count\": 2})"
},
"albumDetail": {
"moreFromArtist": "di più da questo $t(entity.artist_one)",
"moreFromArtist": "di più da questo $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "di più da {{item}}",
"released": "rilasciato"
},
@@ -569,20 +646,33 @@
"generalTab": "generale",
"hotkeysTab": "tasti a scelta rapida",
"windowTab": "finestra",
"advanced": "avanzate"
"advanced": "avanzate",
"updates": "aggiorna",
"cache": "cache",
"application": "applicazione",
"theme": "tema",
"controls": "controlla",
"remote": "remoto",
"exportImport": "importa/esporta",
"scrobble": "scrobble",
"audio": "audio",
"lyrics": "testi",
"transcoding": "transcodifica",
"discord": "discord",
"lyricsDisplay": "mostra testi"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"genreList": {
"title": "$t(entity.genre_other)",
"showAlbums": "mostra $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "mostra $t(entity.genre_one) $t(entity.track_other)"
"title": "$t(entity.genre, {\"count\": 2})",
"showAlbums": "mostra $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"showTracks": "mostra $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
},
"trackList": {
"title": "$t(entity.track_other)",
"title": "$t(entity.track, {\"count\": 2})",
"artistTracks": "tracce di {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)"
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})"
},
"globalSearch": {
"commands": {
@@ -593,23 +683,26 @@
"title": "comandi"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
"title": "$t(entity.playlist, {\"count\": 2})"
},
"albumList": {
"title": "$t(entity.album_other)",
"title": "$t(entity.album, {\"count\": 2})",
"artistAlbums": "albums di {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})"
},
"albumArtistDetail": {
"about": "Info {{artist}}",
"appearsOn": "compare su",
"recentReleases": "uscite recenti",
"viewDiscography": "mostra discografia",
"relatedArtists": "correlati $t(entity.artist_other)",
"relatedArtists": "correlati $t(entity.artist, {\"count\": 2})",
"topSongs": "brani migliori",
"topSongsFrom": "brani migliori da {{title}}",
"viewAll": "mostra tutto",
"viewAllTracks": "mostra tutto $t(entity.track_other)"
"viewAllTracks": "mostra tutto $t(entity.track, {\"count\": 2})",
"favoriteSongs": "canzoni preferite",
"topSongsPersonal": "personale",
"favoriteSongsFrom": "canzoni preferite da {{title}}"
},
"manageServers": {
"title": "gestisci servers",
@@ -626,20 +719,30 @@
},
"playlist": {
"reorder": "riordino abilitato solo quando si ordina per id"
},
"radioList": {
"title": "stazioni radio"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"collections": {
"overrideExisting": "sovrascrivi esistente",
"saveAsCollection": "salva come collezione"
}
},
"form": {
"deletePlaylist": {
"title": "elimina $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) eliminata correttamente",
"input_confirm": "digita il nome della $t(entity.playlist_one) per confermare"
"title": "elimina $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) eliminata correttamente",
"input_confirm": "digita il nome della $t(entity.playlist, {\"count\": 1}) per confermare"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"title": "crea $t(entity.playlist_one)",
"title": "crea $t(entity.playlist, {\"count\": 1})",
"input_public": "publico",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist_one) creata con successo",
"success": "$t(entity.playlist, {\"count\": 1}) creata con successo",
"input_owner": "$t(common.owner)"
},
"addServer": {
@@ -655,13 +758,17 @@
"ignoreCors": "ignora cors ($t(common.restartRequired))",
"error_savePassword": "si è verificato un errore quando si è provato a salvare la password",
"input_preferInstantMix": "preferisci mix istantaneo",
"input_preferInstantMixDescription": "usa solo mix istantaneo per ottenere canzoni simili. utile se si dispone di plugin che modificano questo comportamento"
"input_preferInstantMixDescription": "usa solo mix istantaneo per ottenere canzoni simili. utile se si dispone di plugin che modificano questo comportamento",
"input_preferRemoteUrl": "preferisci url pubblico",
"input_remoteUrl": "url pubblico"
},
"addToPlaylist": {
"success": "aggiunto $t(entity.trackWithCount, {\"count\": {{message}} }) a $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "aggiungi a $t(entity.playlist_one)",
"title": "aggiungi a $t(entity.playlist, {\"count\": 1})",
"input_skipDuplicates": "salta duplicati",
"input_playlists": "$t(entity.playlist_other)"
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"create": "crea $t(entity.playlist, {\"count\": 1})",
"searchOrCreate": "cerca $t(entity.playlist, {\"count\": 2}) o digita per crearne una nuova"
},
"updateServer": {
"title": "aggiorna server",
@@ -670,17 +777,19 @@
"queryEditor": {
"input_optionMatchAll": "soddisfa tutti",
"input_optionMatchAny": "soddisfa qualsiasi",
"title": "editor di query"
"title": "editor di query",
"resetToDefault": "ripristina predefinito",
"clearFilters": "rimuovi filtri"
},
"lyricSearch": {
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist_one)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"title": "cerca testi"
},
"editPlaylist": {
"title": "modifica $t(entity.playlist_one)",
"title": "modifica $t(entity.playlist, {\"count\": 1})",
"publicJellyfinNote": "Jellyfin non mostra se una playlist è pubblica o meno. Se vuoi che rimanga pubblica, assicurati di selezionare lopzione seguente",
"success": "$t(entity.playlist_one) aggiornato con successo"
"success": "$t(entity.playlist, {\"count\": 1}) aggiornato con successo"
},
"shareItem": {
"allowDownloading": "consentire il download",
@@ -694,6 +803,27 @@
"enabled": "la modalità privata è abilitata: lo stato di riproduzione viene ora nascosto alle integrazioni esterne",
"disabled": "la modalità privata è disabilitata: lo stato di riproduzione è ora visibile alle integrazioni esterne abilitate",
"title": "modalità privata"
},
"largeFetchConfirmation": {
"title": "aggiungi elementi alla coda"
},
"createRadioStation": {
"success": "stazione radio creata con successo",
"title": "crea stazione radio",
"input_name": "nome"
},
"lyricsExport": {
"export": "esporta testi",
"input_synced": "esporta testi sincronizzati",
"input_offset": "$t(setting.lyricOffset)"
},
"shuffleAll": {
"input_limit": "quante canzoni?",
"input_minYear": "dall'anno",
"input_maxYear": "all'anno",
"input_played_optionAll": "tutte le tracce",
"input_played_optionUnplayed": "solo tracce non ancora riprodotte",
"input_played_optionPlayed": "solo tracce riprodotte"
}
},
"table": {
@@ -706,14 +836,29 @@
"size": "$t(common.size)",
"followCurrentSong": "segui il brano corrente",
"itemGap": "spaziatura tra gli elementi (px)",
"itemSize": "dimensione dellelemento (px)"
"itemSize": "dimensione dellelemento (px)",
"advancedSettings": "impostazioni avanzate",
"moveUp": "muovi sopra",
"moveDown": "muovi sotto",
"pinToLeft": "fissa a sinistra",
"pinToRight": "fissa a destra",
"alignLeft": "allinea a sinistra",
"alignCenter": "allina al centro",
"alignRight": "allinea a destra",
"itemsPerRow": "elementi per riga",
"size_default": "predefinito",
"size_compact": "compatto",
"size_large": "largo",
"pagination": "paginazione",
"pagination_itemsPerPage": "elementi per pagina",
"pagination_infinite": "infinita",
"pagination_paginate": "impaginato"
},
"view": {
"table": "tabella",
"card": "Scheda",
"grid": "griglia",
"list": "lista",
"poster": "poster"
"detail": "dettaglio"
},
"label": {
"releaseDate": "data rilascio",
@@ -727,23 +872,29 @@
"trackNumber": "numero traccia",
"rowIndex": "indice riga",
"rating": "$t(common.rating)",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album_one)",
"artist": "$t(entity.artist, {\"count\": 1})",
"album": "$t(entity.album, {\"count\": 1})",
"note": "$t(common.note)",
"biography": "$t(common.biography)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"playCount": "numero riproduzioni",
"bitrate": "$t(common.bitrate)",
"actions": "$t(common.action_other)",
"genre": "$t(entity.genre_one)",
"actions": "$t(common.action, {\"count\": 2})",
"genre": "$t(entity.genre, {\"count\": 1})",
"discNumber": "numero disco",
"favorite": "$t(common.favorite)",
"year": "$t(common.year)",
"albumArtist": "$t(entity.albumArtist_one)",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"codec": "$t(common.codec)",
"songCount": "$t(entity.track_other)"
"songCount": "$t(entity.track, {\"count\": 2})",
"bitDepth": "$t(common.bitDepth)",
"albumCount": "$t(entity.album, {\"count\": 2})",
"composer": "compositore",
"image": "immagine",
"sampleRate": "$t(common.sampleRate)",
"titleArtist": "$t(common.title) (artista)"
}
},
"column": {
@@ -752,7 +903,7 @@
"rating": "voto",
"favorite": "preferito",
"playCount": "riproduzioni",
"albumCount": "$t(entity.album_other)",
"albumCount": "$t(entity.album, {\"count\": 2})",
"releaseYear": "anno",
"lastPlayed": "ultima riproduzione",
"biography": "biografia",
@@ -761,16 +912,19 @@
"title": "titolo",
"bpm": "bpm",
"dateAdded": "data aggiunta",
"artist": "$t(entity.artist_one)",
"songCount": "$t(entity.track_other)",
"artist": "$t(entity.artist, {\"count\": 1})",
"songCount": "$t(entity.track, {\"count\": 2})",
"trackNumber": "traccia",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"albumArtist": "artista album",
"path": "percorso",
"discNumber": "disco",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"size": "$t(common.size)",
"codec": "$t(common.codec)"
"codec": "$t(common.codec)",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)",
"owner": "proprietario"
}
},
"entity": {
@@ -810,7 +964,7 @@
"folder_one": "cartella",
"folder_many": "cartelle",
"folder_other": "cartelle",
"smartPlaylist": "$t(entity.playlist_one) smart",
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) smart",
"album_one": "album",
"album_many": "album",
"album_other": "album",
@@ -825,6 +979,89 @@
"play_other": "{{count}} riproduzioni",
"song_one": "traccia",
"song_many": "tracce",
"song_other": "tracce"
"song_other": "tracce",
"radioStation_one": "stazione radio",
"radioStation_many": "stazioni radio",
"radioStation_other": "stazioni radio",
"radioStationWithCount_one": "{{count}} stazione radio",
"radioStationWithCount_many": "{{count}} stazioni radio",
"radioStationWithCount_other": "{{count}} stazioni radio"
},
"datetime": {
"minuteShort": "m",
"secondShort": "s",
"hourShort": "o",
"dayShort": "g"
},
"filterOperator": {
"contains": "contiene",
"endsWith": "finisce con",
"inPlaylist": "è in",
"is": "è",
"isNot": "non è",
"isGreaterThan": "è più grande di",
"isLessThan": "è meno di",
"notContains": "non contiene",
"notInPlaylist": "non è in",
"startsWith": "inizia con"
},
"releaseType": {
"primary": {
"album": "$t(entity.album, {\"count\": 1})",
"broadcast": "broadcast",
"ep": "ep",
"other": "altro",
"single": "singolo"
},
"secondary": {
"audiobook": "audiolibro",
"audioDrama": "audio drama",
"compilation": "compilation",
"interview": "intervista",
"live": "live",
"mixtape": "mixtape",
"remix": "remix",
"soundtrack": "soundtrack"
}
},
"queryBuilder": {
"customTags": "tag personalizzati"
},
"dragDropZone": {
"error_oneFileOnly": "Per favore seleziona solo 1 file",
"error_readingFile": "errore nella lettura del file: {{errorMessage}}",
"mainText": "rilascia un file qui"
},
"visualizer": {
"ignoredPresets": "Preset Ignorati",
"includeAllPresets": "Includi Tutti i Preset",
"selectedPresets": "Preset Selezionati",
"presets": "Preset",
"selectPreset": "Seleziona Preset",
"applyPreset": "Applica Preset",
"saveAsPreset": "Salva come Preset",
"updatePreset": "Aggiorna Preset",
"copyConfiguration": "Copia Configurazione",
"pasteConfiguration": "Incolla Configurazione",
"pasteConfigurationPlaceholder": "Incolla la configurazione JSON qui...",
"pasteFromClipboard": "Incolla dalla Clipboard",
"applyConfiguration": "Applica Configurazione",
"presetName": "Nome Preset",
"presetNamePlaceholder": "Inserisci il nome del preset",
"general": "Generale",
"mode": "Modalità",
"maxFPS": "Max FPS",
"opacity": "Opacità",
"customGradients": "Gradienti Personalizzati",
"gradientNamePlaceholder": "Nome Gradiente",
"vertical": "Verticale",
"horizontal": "Orizzontale",
"addColor": "Aggiungi Colore",
"position": "Posizione",
"level": "Livello",
"remove": "Rimuovi",
"pasteGradient": "Incolla Gradiente",
"custom": "Personalizzato",
"gradient": "Gradiente"
}
}
+651 -133
View File
File diff suppressed because it is too large Load Diff
+120 -43
View File
@@ -1,27 +1,43 @@
{
"action": {
"createPlaylist": "$t(entity.playlist_one) 생성",
"addToFavorites": "$t(entity.favorite_other)에 추가",
"addToPlaylist": "$t(entity.playlist_one)에 추가",
"createPlaylist": "$t(entity.playlist, {\"count\": 1}) 생성",
"addToFavorites": "$t(entity.favorite, {\"count\": 2})에 추가",
"addToPlaylist": "$t(entity.playlist, {\"count\": 1})에 추가",
"clearQueue": "대기열 지우기",
"deletePlaylist": "$t(entity.playlist_one) 삭제",
"deletePlaylist": "$t(entity.playlist, {\"count\": 1}) 삭제",
"deselectAll": "모두 선택 해제",
"editPlaylist": "$t(entity.playlist_one) 편집",
"editPlaylist": "$t(entity.playlist, {\"count\": 1}) 편집",
"goToPage": "페이지 이동",
"moveToBottom": "맨 아래로 이동",
"moveToTop": "맨 위로 이동",
"moveToNext": "다음으로 이동",
"removeFromQueue": "대기열에서 제거",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "$t(entity.favorite_other)에서 제거",
"removeFromPlaylist": "$t(entity.playlist_one)에서 제거",
"removeFromFavorites": "$t(entity.favorite, {\"count\": 2})에서 제거",
"removeFromPlaylist": "$t(entity.playlist, {\"count\": 1})에서 제거",
"openIn": {
"musicbrainz": "MusicBrainz에서 보기",
"lastfm": "Last.fm에서 보기"
},
"viewPlaylists": "$t(entity.playlist_other) 보기",
"viewPlaylists": "$t(entity.playlist, {\"count\": 2}) 보기",
"setRating": "평점 지정",
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) 편집기 펼치기"
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) 편집기 펼치기",
"addOrRemoveFromSelection": "선택항목에서 추가 또는 제거",
"selectRangeOfItems": "항목의 범위 선택",
"createRadioStation": "$t(entity.radioStation, {\"count\": 1}) 생성",
"deleteRadioStation": "$t(entity.radioStation, {\"count\": 1}) 삭제",
"selectAll": "전부 선택",
"downloadStarted": "{{count}}개 항목 다운로드 시작했습니다",
"moveUp": "위로 옮기기",
"moveDown": "아래로 옮기기",
"holdToMoveToTop": "맨 위로 옮기기 위해 끌기",
"holdToMoveToBottom": "맨 아래로 옮기기 위해 끌기",
"moveItems": "항목 옮기기",
"shuffle": "섞기",
"shuffleAll": "모두 섞기",
"shuffleSelected": "선택항목 섞기",
"viewMore": "더 보기",
"openApplicationDirectory": "앱 디렉토리 열기"
},
"common": {
"translation": "번역",
@@ -43,7 +59,7 @@
"backward": "뒤로",
"saveAs": "(으)로 저장하기",
"search": "검색",
"setting": "설정",
"setting_other": "설정",
"share": "공유",
"size": "크기",
"sortOrder": "순서",
@@ -58,7 +74,7 @@
"comingSoon": "조만간…",
"configure": "설정",
"confirm": "확인",
"currentSong": "현재 $t(entity.track_one)",
"currentSong": "현재 $t(entity.track, {\"count\": 1})",
"decrease": "감소",
"delete": "삭제",
"descending": "내림차순",
@@ -80,7 +96,7 @@
"path": "경로",
"playerMustBePaused": "플레이어가 일시정지 되어야 합니다",
"preview": "미리보기",
"previousSong": "이전곡 $t(entity.track_one)",
"previousSong": "이전곡 $t(entity.track, {\"count\": 1})",
"quit": "종료",
"refresh": "새로고침",
"reload": "리로드",
@@ -115,7 +131,25 @@
"owner": "소유자",
"sampleRate": "샘플레이트",
"tags": "태그",
"additionalParticipants": "추가 참여자"
"additionalParticipants": "추가 참여자",
"explicitStatus": "성인컨텐츠",
"private": "비공개",
"public": "공개",
"recordLabel": "레이블",
"releaseType": "발매형태",
"explicit": "성인컨텐츠",
"clean": "클린",
"countSelected": "{{count}}개 선택됨",
"doNotShowAgain": "다시 보지 않기",
"view": "보기",
"externalLinks": "외부 링크",
"faster": "빠르게",
"noFilters": "필터 미설정",
"slower": "천천히",
"sort": "정렬",
"gridRows": "행 그리드",
"tableColumns": "테이블 열",
"itemsMore": "{{count}}개 더"
},
"entity": {
"albumWithCount_other": "{{count}} 앨범",
@@ -134,8 +168,10 @@
"song_other": "곡",
"play_other": "{{count}} 재생",
"playlistWithCount_other": "{{count}} 재생목록",
"smartPlaylist": "스마트 $t(entity.playlist_one)",
"track_other": "트랙"
"smartPlaylist": "스마트 $t(entity.playlist, {\"count\": 1})",
"track_other": "트랙",
"radioStation_other": "라디오 방송국",
"radioStationWithCount_other": "{{count}}개 라디오 방송국"
},
"error": {
"systemFontError": "시스템 폰트를 가져오는데 실패하였습니다",
@@ -178,9 +214,9 @@
"dateAdded": "추가된 날짜",
"lastPlayed": "마지막으로 재생한",
"mostPlayed": "가장 많이 재생한",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"communityRating": "커뮤니티 평점",
"criticRating": "비평가 평점",
"disc": "디스크",
@@ -189,11 +225,11 @@
"channels": "$t(common.channel_other)",
"duration": "길이",
"bpm": "bpm",
"albumCount": "$t(entity.album_other) 앨범수",
"albumCount": "$t(entity.album, {\"count\": 2}) 앨범수",
"comment": "코멘트",
"favorited": "즐겨찾기",
"fromYear": "시작 년도",
"genre": "$t(entity.genre_one)",
"genre": "$t(entity.genre, {\"count\": 1})",
"id": "아이디",
"isCompilation": "편집앨범 여부",
"isFavorited": "즐겨찾기 여부",
@@ -226,14 +262,16 @@
},
"addToPlaylist": {
"input_skipDuplicates": "중복 건너뛰기",
"title": "$t(entity.playlist_one) 에 추가",
"input_playlists": "$t(entity.playlist_other)",
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다"
"title": "$t(entity.playlist, {\"count\": 1}) 에 추가",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다",
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} 생성",
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기"
},
"lyricSearch": {
"title": "가사 검색",
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist_one)"
"input_artist": "$t(entity.artist, {\"count\": 1})"
},
"queryEditor": {
"input_optionMatchAll": "모두 일치",
@@ -241,9 +279,9 @@
"title": "쿼리 편집기"
},
"editPlaylist": {
"title": "$t(entity.playlist_one) 편집",
"title": "$t(entity.playlist, {\"count\": 1}) 편집",
"publicJellyfinNote": "Jellyfin은 재생목록 공개 여부를 노출하지 않습니다. 만약 공개되길 원한다면 다음을 선택하세요",
"success": "$t(entity.playlist_one) 업데이트 되었습니다"
"success": "$t(entity.playlist, {\"count\": 1}) 업데이트 되었습니다"
},
"shareItem": {
"allowDownloading": "다운로드 허용",
@@ -260,15 +298,15 @@
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist_one)를 생성했습니다",
"success": "$t(entity.playlist, {\"count\": 1})를 생성했습니다",
"input_owner": "$t(common.owner)",
"input_public": "공개",
"title": "$t(entity.playlist_one) 생성"
"title": "$t(entity.playlist, {\"count\": 1}) 생성"
},
"deletePlaylist": {
"input_confirm": "확인을 위해 $t(entity.playlist_one)의 이름을 적어주세요",
"success": "$t(entity.playlist_one)가 삭제되었습니다",
"title": "$t(entity.playlist_one) 삭제"
"input_confirm": "확인을 위해 $t(entity.playlist, {\"count\": 1})의 이름을 적어주세요",
"success": "$t(entity.playlist, {\"count\": 1})가 삭제되었습니다",
"title": "$t(entity.playlist, {\"count\": 1}) 삭제"
},
"privateMode": {
"enabled": "프라이빗 모드가 활성화되었습니다. 재생상태가 외부 서비스에 지금부터 노출되지 않습니다",
@@ -324,8 +362,8 @@
"download": "다운로드",
"numberSelected": "{{count}}개 선택됨",
"shareItem": "공유",
"goToAlbum": "$t(entity.album_one)으로 이동",
"goToAlbumArtist": "$t(entity.albumArtist_one)으로 이동",
"goToAlbum": "$t(entity.album, {\"count\": 1})으로 이동",
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1})으로 이동",
"showDetails": "추가정보"
},
"albumArtistDetail": {
@@ -333,17 +371,17 @@
"viewDiscography": "디스코그래피 보기",
"appearsOn": "참여 앨범",
"recentReleases": "최근 앨범",
"relatedArtists": "연관 $t(entity.artist_other)",
"relatedArtists": "연관 $t(entity.artist, {\"count\": 2})",
"topSongs": "최고의 곡들",
"topSongsFrom": "{{title}}이 포함된 최고의 곡들",
"viewAll": "전부 보이기",
"viewAllTracks": "$t(entity.track_other) 전부 보이기"
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"albumDetail": {
"moreFromArtist": "$t(entity.artist_one) 더 보기",
"moreFromArtist": "$t(entity.artist, {\"count\": 1}) 더 보기",
"moreFromGeneric": "{{item}} 더 보기",
"released": "발매"
},
@@ -351,8 +389,8 @@
"artistAlbums": "{{artist}}의 앨범"
},
"genreList": {
"showAlbums": "$t(entity.genre_one) $t(entity.album_other) 표시",
"showTracks": "$t(entity.genre_one) $t(entity.track_other) 표시"
"showAlbums": "$t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2}) 표시",
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시"
},
"globalSearch": {
"commands": {
@@ -387,7 +425,7 @@
"sidebar": {
"myLibrary": "내 라이브러리",
"nowPlaying": "재생중",
"shared": "공유 $t(entity.playlist_other)"
"shared": "공유 $t(entity.playlist, {\"count\": 2})"
},
"trackList": {
"artistTracks": "{{artist}}의 음악"
@@ -400,8 +438,6 @@
"dateAdded": "추가된 날짜"
},
"view": {
"card": "카드",
"poster": "포스터",
"table": "표"
}
}
@@ -443,6 +479,47 @@
"accentColor_description": "앱의 강조색상 설정",
"accentColor": "강조색상",
"albumBackground_description": "앨범아트가 있는 경우 앨범화면에 배경이미지 추가",
"albumBackground": "앨범 배경이미지"
"albumBackground": "앨범 배경이미지",
"albumBackgroundBlur_description": "앨범 배경이미지의 흐려짐 정도 조정",
"albumBackgroundBlur": "앨범배경이미지 흐려짐 크기",
"applicationHotkeys_description": "앱의 단축키 설정. 앱 전체에 적용되는 단축키를 설정하기 위해서는 체크박스에 체크하세요(PC만 가능)",
"applicationHotkeys": "앱 단축키",
"artistBackground": "아티스트 배경이미지",
"artistBackground_description": "아티스트 페이지에 아티스트가 포함된 배경이미지를 추가",
"artistBackgroundBlur": "아티스트 배경이미지 흐려짐 크기",
"artistBackgroundBlur_description": "아티스트 배경이미지에 적용된 흐려짐 크기 조정",
"artistConfiguration": "앨범아티스트 페이지 설정",
"artistConfiguration_description": "앨범아티스트 페이지에 표시할 정보 및 순서 설정",
"audioDevice_description": "음악재생에 사용할 장치 선택(웹플레이어만 가능)",
"audioDevice": "오디오 장치",
"audioExclusiveMode_description": "단독재생모드 켜기. 이 모드에서는 일반적으로 시스템의 재생장치가 고정되며 MPV로만 오디오가 재생됩니다",
"audioExclusiveMode": "오디오 단독재생모드",
"audioPlayer_description": "재생을 위한 오디오 플레이어 선택",
"audioPlayer": "오디오 플레이어",
"buttonSize_description": "플레이어 바 버튼 크기",
"buttonSize": "플레이어 바 버튼 크기",
"clearCache_description": "페이신 하드클리어. 페이신의 캐시 및 브라우저의 캐시 삭제(저장된 이미지 및 기타 정보). 서버 접속정보 및 설정은 유지됩니다"
},
"releaseType": {
"primary": {
"broadcast": "방송",
"ep": "ep앨범",
"other": "기타",
"single": "싱글"
},
"secondary": {
"audiobook": "오디오북",
"audioDrama": "오디오 드라마",
"compilation": "컴필레이션",
"djMix": "DJ 믹스",
"demo": "데모",
"fieldRecording": "현지녹음",
"interview": "인터뷰",
"live": "라이브",
"mixtape": "믹스테이프",
"remix": "리믹스",
"soundtrack": "사운드트랙",
"spokenWord": "보컬사운드"
}
}
}
+195 -67
View File
@@ -5,23 +5,39 @@
"musicbrainz": "Åpne i MusicBrainz"
},
"moveToBottom": "flytt til bunnen",
"deletePlaylist": "slett $t(entity.playlist_one)",
"deletePlaylist": "slett $t(entity.playlist, {\"count\": 1})",
"deselectAll": "avmarker alle",
"editPlaylist": "rediger $t(entity.playlist_one)",
"addToFavorites": "legg til $t(entity.favorite_other)",
"addToPlaylist": "legg til $t(entity.playlist_one)",
"editPlaylist": "rediger $t(entity.playlist, {\"count\": 1})",
"addToFavorites": "legg til $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "legg til $t(entity.playlist, {\"count\": 1})",
"clearQueue": "tøm kø",
"createPlaylist": "opprett $t(entity.playlist_one)",
"createPlaylist": "opprett $t(entity.playlist, {\"count\": 1})",
"goToPage": "gå til side",
"moveToTop": "flytt til toppen",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "fjern fra $t(entity.favorite_other)",
"removeFromFavorites": "fjern fra $t(entity.favorite, {\"count\": 2})",
"moveToNext": "flytt til neste",
"setRating": "angi vurdering",
"removeFromQueue": "fjern fra kø",
"removeFromPlaylist": "fjern fra $t(entity.playlist_one)",
"viewPlaylists": "vise $t(entity.playlist_other)",
"toggleSmartPlaylistEditor": "bytt $t(entity.smartPlaylist) editor"
"removeFromPlaylist": "fjern fra $t(entity.playlist, {\"count\": 1})",
"viewPlaylists": "vise $t(entity.playlist, {\"count\": 2})",
"toggleSmartPlaylistEditor": "bytt $t(entity.smartPlaylist) editor",
"selectAll": "marker alle",
"downloadStarted": "startet nedlasting av {{count}} elementer",
"selectRangeOfItems": "velg en rekke elementer",
"addOrRemoveFromSelection": "legge til eller fjerne fra utvalg",
"moveUp": "flytt opp",
"moveDown": "flytt ned",
"createRadioStation": "opprett $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "slett $t(entity.radioStation, {\"count\": 1})",
"holdToMoveToTop": "hold nede for å gå til toppen",
"holdToMoveToBottom": "hold nede for å gå til bunnen",
"moveItems": "flytt elementer",
"shuffle": "tilfeldig avspilling",
"shuffleAll": "tilfelding avspilling av alt",
"shuffleSelected": "tilfelding avspilling av utvalgte",
"viewMore": "se mer",
"openApplicationDirectory": "åpne applikasjonskatalogen"
},
"common": {
"bpm": "bpm",
@@ -31,7 +47,7 @@
"collapse": "slå sammen",
"configure": "konfigurer",
"confirm": "bekreft",
"currentSong": "gjeldende $t(entity.track_one)",
"currentSong": "gjeldende $t(entity.track, {\"count\": 1})",
"version": "versjon",
"areYouSure": "er du sikker?",
"ascending": "stigende",
@@ -50,8 +66,8 @@
"expand": "utvid",
"favorite": "favoritt",
"filters": "filter",
"forceRestartRequired": "ta omstart for å la endringene trå i kraft... lukk meldingen for å ta omstart",
"forward": "fremover",
"forceRestartRequired": "ta omstart for å aktivere endringene... lukk meldingen for å ta omstart",
"forward": "framover",
"gap": "avstand",
"home": "hjem",
"increase": "øke",
@@ -69,7 +85,7 @@
"owner": "eier",
"playerMustBePaused": "spilleren må settes på pause",
"path": "sti",
"previousSong": "forrige $t(entity.track_one)",
"previousSong": "forrige $t(entity.track, {\"count\": 1})",
"refresh": "frisk opp",
"rating": "vurdering",
"random": "vilkårlig",
@@ -87,7 +103,8 @@
"share": "del",
"quit": "avslutt",
"size": "størrelse",
"setting": "innstilling",
"setting_one": "innstilling",
"setting_other": "innstillinger",
"trackNumber": "spor",
"title": "tittel",
"channel_one": "kanal",
@@ -118,10 +135,34 @@
"albumGain": "gjennomsnittlig lydnivå for album",
"albumPeak": "høyeste lydnivå for album",
"bitDepth": "bitdybde",
"sampleRate": "samplingsfrekvens"
"sampleRate": "samplingsfrekvens",
"countSelected": "{{count}} valgt",
"doNotShowAgain": "ikke vis dette igjen",
"view": "vis",
"example": "eksempel",
"externalLinks": "eksterne lenker",
"faster": "raskere",
"filter_single": "enkelt",
"filter_multiple": "flerfoldige",
"mood": "humør",
"noFilters": "ingen filtre konfigurert",
"private": "privat",
"public": "offentlig",
"retry": "prøv igjen",
"recordLabel": "plateselskap",
"releaseType": "utgivelsestype",
"rename": "gi nytt navn",
"slower": "saktere",
"sort": "sorter",
"explicit": "grov",
"clean": "ren",
"gridRows": "rutenettrader",
"tableColumns": "tabellkolonner",
"itemsMore": "{{count}} fler",
"explicitStatus": "grovhetsstatus"
},
"entity": {
"smartPlaylist": "smart $t(entity.playlist_one)",
"smartPlaylist": "smart $t(entity.playlist, {\"count\": 1})",
"album_one": "album",
"album_other": "album",
"albumArtist_one": "albumartist",
@@ -155,7 +196,11 @@
"artist_one": "artist",
"artist_other": "artister",
"song_one": "sang",
"song_other": "sanger"
"song_other": "sanger",
"radioStation_one": "radiostasjon",
"radioStation_other": "radiostasjoner",
"radioStationWithCount_one": "{{count}} radiostasjon",
"radioStationWithCount_other": "{{count}} radiostasjoner"
},
"error": {
"apiRouteError": "kan ikke behandle forespørselen",
@@ -165,23 +210,30 @@
"endpointNotImplementedError": "endepunkt {{endpoint}} er ikke implementert for {{serverType}}",
"credentialsRequired": "innloggingsdetaljer er påkrevd",
"genericError": "en feil har oppstått",
"invalidServer": "ugyldig server",
"invalidServer": "ugyldig tjener",
"playbackError": "et problem oppstod ved avspilling av media",
"localFontAccessDenied": "ingen tilgang til lokale skrifttyper",
"loginRateError": "for mange innloggingsforsøk, vennligst prøv igjen om noen få sekunder",
"audioDeviceFetchError": "en feil oppstod ved innhenting av lydenheter",
"networkError": "at nettverksproblem har oppstått",
"networkError": "det har oppstått et nettverksproblem",
"openError": "kunne ikke åpne fil",
"serverNotSelectedError": "ingen server er valgt",
"serverNotSelectedError": "ingen tjener er valgt",
"remotePortError": "et problem oppstod med å sette serverport",
"systemFontError": "et problem oppstod med innlasting av systemskrifttyper",
"serverRequired": "server er påkrevd",
"serverRequired": "tjener er påkrevd",
"sessionExpiredError": "sesjonen din har utløpt",
"remotePortWarning": "ta omstart av serveren for å aktivere ny port",
"remoteDisableError": "en problem oppstod ved å $t(common.disable) serveren",
"remoteEnableError": "et problem oppstod ved å $t(common.enable) serveren",
"notificationDenied": "tillatelser for varsler ble avvist. Denne innstillingen har ingen effekt",
"badValue": "ugyldig alternativ \"{{value}}\". Denne verdien eksisterer ikke lenger"
"badValue": "ugyldig alternativ \"{{value}}\". Denne verdien eksisterer ikke lenger",
"noNetwork": "tjener utilgjengelig",
"noNetworkDescription": "kunne ikke koble til tjeneren",
"invalidJson": "ugyldig JSON",
"saveQueueFailed": "kunne ikke lagre kø",
"multipleServerSaveQueueError": "Spillekøen har en eller flere sanger som ikke finnes på gjeldene tjener. Dette er ikke støttet",
"serverLockSingleServer": "kun én tjener er tillatt når tjener er låst",
"settingsSyncError": "avvik ble funnet mellom innstillinger i avspilleren og hovedprosessen. ta en omstart av applikasjonen for å aktivere endringene"
},
"filter": {
"bpm": "bpm",
@@ -189,10 +241,10 @@
"id": "id",
"name": "navn",
"bitrate": "bithastighet",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "biografi",
"album": "$t(entity.album_one)",
"album": "$t(entity.album, {\"count\": 1})",
"duration": "lengde",
"favorited": "merket som favoritt",
"comment": "kommentar",
@@ -222,22 +274,26 @@
"isCompilation": "er samling",
"isFavorited": "er merket som favoritt",
"recentlyAdded": "nylig lagt til",
"channels": "$t(common.channel_other)",
"genre": "$t(entity.genre_one)",
"channels": "$t(common.channel, {\"count\": 2})",
"genre": "$t(entity.genre, {\"count\": 1})",
"trackNumber": "spor",
"albumCount": "$t(entity.album_other) opptelling"
"albumCount": "$t(entity.album, {\"count\": 2}) opptelling",
"matchAnd": "og",
"matchOr": "eller",
"sortName": "sorter navn",
"explicitStatus": "$t(common.explicitStatus)"
},
"form": {
"createPlaylist": {
"input_description": "$t(common.description)",
"input_owner": "$t(common.owner)",
"input_public": "offentlig",
"title": "opprett $t(entity.playlist_one)",
"title": "opprett $t(entity.playlist, {\"count\": 1})",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist_one) opprettet"
"success": "$t(entity.playlist, {\"count\": 1}) opprettet"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"input_name": "$t(common.name)",
"title": "sangtekstsøk"
},
@@ -252,22 +308,27 @@
"input_legacyAuthentication": "aktiver tradisjonell autentisering",
"input_name": "servernavn",
"title": "legg til server",
"input_password": "passord"
"input_password": "passord",
"input_preferInstantMix": "foretrekk øyeblikkelig miks",
"input_preferInstantMixDescription": "bruk bare øyeblikkelig miks for innhenting av lignende sanger. nyttig hvis du har tilleggsmoduler som endrer funksjonaliteten",
"input_preferRemoteUrl": "foretrekk offentlig url",
"input_remoteUrl": "offentlig url",
"input_remoteUrlPlaceholder": "valgfritt: offentlig nettadresse for eksterne funksjoner"
},
"addToPlaylist": {
"success": "la $t(entity.trackWithCount, {\"count\": {{message}} }) til $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "legg til i $t(entity.playlist_one)",
"title": "legg til i $t(entity.playlist, {\"count\": 1})",
"input_skipDuplicates": "hopp over duplikater",
"input_playlists": "$t(entity.playlist_other)"
"input_playlists": "$t(entity.playlist, {\"count\": 2})"
},
"deletePlaylist": {
"title": "slett $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) er slettet",
"input_confirm": "skrive inn navnet på $t(entity.playlist_one) for å bekrefte"
"title": "slett $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) er slettet",
"input_confirm": "skrive inn navnet på $t(entity.playlist, {\"count\": 1}) for å bekrefte"
},
"editPlaylist": {
"title": "rediger $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) er oppdatert"
"title": "rediger $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) er oppdatert"
},
"shareItem": {
"allowDownloading": "tillat nedlasting",
@@ -284,7 +345,29 @@
"queryEditor": {
"input_optionMatchAll": "match alle",
"input_optionMatchAny": "matche hvilken som helst",
"title": "redigeringsverktøy for spørringer"
"title": "redigeringsverktøy for spørringer",
"addRuleGroup": "legg til regelgruppe",
"removeRuleGroup": "fjern regelgruppe",
"resetToDefault": "tilbakestill til standard",
"clearFilters": "tøm filter"
},
"largeFetchConfirmation": {
"title": "legg til elementer i køen",
"description": "Denne handlingen vil legge alle elementene til den gjeldende filtervisningen"
},
"createRadioStation": {
"success": "vellykket opprettelse av radiostasjon",
"title": "opprett radiostasjon",
"input_homepageUrl": "hjemmesidelenke",
"input_name": "navn",
"input_streamUrl": "strømmelenke"
},
"saveQueue": {
"success": "lagre spillekø på tjener"
},
"lyricsExport": {
"export": "eksporter sangtekster",
"input_synced": "eksporter sunkroniserte sangtekster"
}
},
"page": {
@@ -296,7 +379,7 @@
"manageServers": "administrere servere",
"goBack": "gå tilbake",
"openBrowserDevtools": "åpne utviklingsverktøy i nettleser",
"settings": "$t(common.setting_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"expandSidebar": "utvid sidefelt",
"goForward": "gå fremover"
},
@@ -329,22 +412,22 @@
"viewDiscography": "se diskografi",
"recentReleases": "nylige utgivelser",
"topSongsFrom": "beste sanger fra {{title}}",
"viewAllTracks": "se alle $t(entity.track_other)",
"viewAllTracks": "se alle $t(entity.track, {\"count\": 2})",
"viewAll": "se alle",
"about": "Om {{artist}}",
"appearsOn": "opptrer på",
"relatedArtists": "relatert $t(entity.artist_other)"
"relatedArtists": "relatert $t(entity.artist, {\"count\": 2})"
},
"albumList": {
"artistAlbums": "album av {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"title": "$t(entity.album_other)"
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
"title": "$t(entity.album, {\"count\": 2})"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
"title": "$t(entity.albumArtist, {\"count\": 2})"
},
"albumDetail": {
"moreFromArtist": "mer fra denne $t(entity.artist_one)",
"moreFromArtist": "mer fra denne $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "mer fra {{item}}",
"released": "utgitt"
},
@@ -372,9 +455,9 @@
"related": "relatert"
},
"genreList": {
"title": "$t(entity.genre_other)",
"showAlbums": "vis $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "vis $t(entity.genre_one) $t(entity.track_other)"
"title": "$t(entity.genre, {\"count\": 2})",
"showAlbums": "vis $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
"showTracks": "vis $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
},
"globalSearch": {
"title": "kommandoer",
@@ -405,23 +488,23 @@
"copyPath": "kopier stien til utklippstavlen"
},
"trackList": {
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track_other)",
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
"title": "$t(entity.track, {\"count\": 2})",
"artistTracks": "spor fra {{artist}}"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
"tracks": "$t(entity.track_other)",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"tracks": "$t(entity.track, {\"count\": 2})",
"nowPlaying": "spilles nå",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"folders": "$t(entity.folder, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"home": "$t(common.home)",
"albums": "$t(entity.album_other)",
"playlists": "$t(entity.playlist_other)",
"albums": "$t(entity.album, {\"count\": 2})",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"shared": "delt $t(entity.playlist_other)",
"artists": "$t(entity.artist_other)",
"settings": "$t(common.setting, {\"count\": 2})",
"shared": "delt $t(entity.playlist, {\"count\": 2})",
"artists": "$t(entity.artist, {\"count\": 2})",
"myLibrary": "mitt bibliotek"
},
"setting": {
@@ -432,7 +515,7 @@
"windowTab": "vindu"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
"title": "$t(entity.playlist, {\"count\": 2})"
},
"playlist": {
"reorder": "omorganisering kun mulig ved sortering på id"
@@ -494,15 +577,21 @@
},
"view": {
"table": "tabell",
"card": "kort",
"grid": "rutenett",
"list": "liste",
"poster": "plakat"
"list": "liste"
},
"general": {
"autoFitColumns": "automatisk kolonnetilpasning",
"displayType": "visningstype",
"followCurrentSong": "følg gjeldende sang"
"followCurrentSong": "følg gjeldende sang",
"advancedSettings": "avanserte innstillinger",
"moveUp": "flytt opp",
"moveDown": "flytt ned",
"pinToLeft": "fest til venstre",
"pinToRight": "fest til høyre",
"alignLeft": "venstrejuster",
"alignCenter": "midtjuster",
"alignRight": "høyrejuster"
}
},
"column": {
@@ -520,7 +609,46 @@
"rating": "vurdering",
"releaseDate": "utgivelsesdato",
"title": "tittel",
"trackNumber": "spor"
"trackNumber": "spor",
"owner": "eier"
}
},
"filterOperator": {
"after": "er etter",
"afterDate": "er etter (date)",
"before": "er før",
"beforeDate": "er før (date)",
"contains": "inneholder",
"endsWith": "ender med",
"inPlaylist": "er inne i",
"inTheLast": "er inne i de siste",
"inTheRange": "er innenfor området",
"isGreaterThan": "er større enn",
"isLessThan": "er mindre enn",
"matchesRegex": "samsvarer med regex",
"notContains": "inneholder ikke",
"notInPlaylist": "er ikke med i",
"notInTheLast": "er ikke med i de siste",
"startsWith": "starter med",
"inTheRangeDate": "er innenfor området (date)",
"is": "er",
"isNot": "er ikke"
},
"datetime": {
"minuteShort": "m",
"secondShort": "s",
"hourShort": "h",
"dayShort": "d"
},
"visualizer": {
"options": {
"weightingFilter": {
"a": "A",
"b": "B",
"c": "C",
"d": "D",
"z": "Z"
}
}
}
}
+983 -68
View File
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More