Compare commits

...

861 Commits

Author SHA1 Message Date
jeffvli dde48335cd fix word-break overflow for CJK characters on lyrics 2025-06-30 00:47:13 -07:00
jeffvli 8611f08f54 right-align is-updated dialog buttons 2025-06-30 00:43:59 -07:00
Kendall Garner cd18e683bf yesnofilter null when not provided 2025-06-29 22:34:39 -07:00
Kendall Garner 286441c1b1 Merge branch 'development' of github.com:jeffvli/feishin into development 2025-06-29 22:30:36 -07:00
Kendall Garner 5456c2c2b8 Improve Jellyfin/Navidrome Album/Song filter, Navidrome artist recent release
- Use `compilation=false` for Navidrome recent releases with artist credit
- Add `YesNoSelect` (yes, no, undefined) for `favorite` for Navidrome/Jellyfin `album`/`track`, and Navidrome `compilation`
- Fix folderButton translation
2025-06-29 22:14:06 -07:00
jeffvli 5cd4fc227e update to v0.17.0 2025-06-29 21:36:36 -07:00
Hosted Weblate 737d672918 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-06-30 05:35:41 +02:00
Hosted Weblate a6ac4c8f67 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 76.9% (523 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-06-30 05:35:41 +02:00
Hosted Weblate c9217827ab Translated using Weblate (Serbian)
Currently translated at 75.8% (516 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sr/
Translation: feishin/Translation
2025-06-30 05:35:40 +02:00
Hosted Weblate 0ff8fad071 Translated using Weblate (Finnish)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (680 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-30 05:35:39 +02:00
Hosted Weblate f3cb15eae2 Translated using Weblate (French)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (French)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (French)

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.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/fr/
Translation: feishin/Translation
2025-06-30 05:35:39 +02:00
Hosted Weblate 5b34b287e2 Translated using Weblate (Spanish)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-30 05:35:38 +02:00
Hosted Weblate dc461a253f Translated using Weblate (Indonesian)
Currently translated at 96.6% (657 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/id/
Translation: feishin/Translation
2025-06-30 05:35:37 +02:00
Hosted Weblate 958416af4c Translated using Weblate (Italian)
Currently translated at 75.7% (515 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translation: feishin/Translation
2025-06-30 05:35:37 +02:00
Hosted Weblate 1dd8eec4a5 Translated using Weblate (Polish)
Currently translated at 96.6% (657 of 680 strings)

Translated using Weblate (Polish)

Currently translated at 96.6% (657 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2025-06-30 05:35:36 +02:00
Hosted Weblate b263db5483 Translated using Weblate (Hungarian)
Currently translated at 30.5% (208 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translation: feishin/Translation
2025-06-30 05:35:35 +02:00
Hosted Weblate 528f60c5f3 Translated using Weblate (Czech)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-06-30 05:35:35 +02:00
Hosted Weblate 007b0166ab Translated using Weblate (Japanese)
Currently translated at 75.7% (515 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translation: feishin/Translation
2025-06-30 05:35:34 +02:00
Hosted Weblate d3fb2374ff Translated using Weblate (Russian)
Currently translated at 92.5% (629 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translation: feishin/Translation
2025-06-30 05:35:34 +02:00
Hosted Weblate 676c091d28 Translated using Weblate (English)
Currently translated at 100.0% (680 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2025-06-30 05:35:33 +02:00
Hosted Weblate 58b7572a8b Translated using Weblate (German)
Currently translated at 86.0% (585 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2025-06-30 05:35:32 +02:00
Hosted Weblate fc77c32a0e Translated using Weblate (Tamil)
Currently translated at 96.6% (657 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ta/
Translation: feishin/Translation
2025-06-30 05:35:32 +02:00
Kendall Garner b5bdea1845 actually fix subsonic album count 2025-06-29 20:35:06 -07:00
jeffvli 8eb591bd08 properly handle overflow on sidebar items (#971) 2025-06-29 18:56:46 -07:00
jeffvli 88be98f703 cleanup unneeded div wrapper on lyric lines 2025-06-29 18:31:43 -07:00
jeffvli df6b6d514d update netease translation lyric line handling (#979)
- lyric should be appended to the original lyric line with a custom splitter
- the custom splitter is now handled in LyricLine
2025-06-29 18:29:59 -07:00
Lyall b6d902e425 fix: discord presence not clearing after pausing player (#973)
* add show rich presence when paused option
2025-06-28 13:46:12 -07:00
jeffvli d922d8b034 fix sidebar height when using custom window bar 2025-06-28 13:42:33 -07:00
jeffvli f4db8fdb84 fix background color of collapsed sidebar 2025-06-28 13:34:16 -07:00
Lyall 81ca6937bc add preserve pitch option (#972) 2025-06-28 13:18:08 -07:00
Kendall Garner c382e01f64 fix regex in proxy 2025-06-28 07:29:42 -07:00
Kendall Garner fb80b66310 update remote regex 2025-06-28 06:48:04 -07:00
Kendall Garner 63e3b97bca log -> error, remove unnecesary logs 2025-06-26 21:17:59 -07:00
Kendall Garner fb584b35a9 handle Navidrome login loop error 2025-06-26 21:14:20 -07:00
jeffvli bdc372636b update issue templates 2025-06-26 09:52:11 -07:00
jeffvli 2c5671cf38 update to v0.16.0 2025-06-26 01:39:47 -07:00
Hosted Weblate bd12fbecac Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (674 of 674 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate c1d88ada91 Translated using Weblate (Finnish)
Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate d6a3e1d90b Translated using Weblate (French)
Currently translated at 100.0% (674 of 674 strings)

Translated using Weblate (French)

Currently translated at 99.2% (669 of 674 strings)

Translated using Weblate (French)

Currently translated at 99.2% (669 of 674 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@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/fr/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate 789c7f3d81 Translated using Weblate (Spanish)
Currently translated at 100.0% (674 of 674 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate f3c785d0fa Translated using Weblate (German)
Currently translated at 86.7% (585 of 674 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Slincess <kisacikdevran0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2025-06-26 10:37:10 +02:00
jeffvli 062c1c2b61 decrease brightness of header overlay on dark 2025-06-26 01:36:54 -07:00
jeffvli eb078d62cd more adjustments to styles on the fullscreen player 2025-06-26 01:36:42 -07:00
jeffvli c429ac9223 move fonts to assets folder 2025-06-26 01:36:16 -07:00
jeffvli bd26967ff2 fix word breaks on lyrics (#969) 2025-06-26 01:11:46 -07:00
jeffvli 620b810191 add option to set local lyric priority 2025-06-25 21:25:29 -07:00
jeffvli 64866c59bd adjust styles on fullscreen player image section
- fix image transition
- fix image aspect ratio
- adjust text sizes and shadow
2025-06-25 20:40:45 -07:00
jeffvli 0afbe4c0a2 improve visibility of fullscreen player buttons 2025-06-25 19:53:49 -07:00
jeffvli 6782cd0dcc re-add presence animation when collapsing sidebar image 2025-06-25 19:48:59 -07:00
jeffvli 8f585a5be9 adjust styles to better support light theme 2025-06-25 19:44:28 -07:00
jeffvli ac0c396712 fix sidebar image height when using Windows or macOS window bar 2025-06-25 09:02:22 -07:00
Kendall Garner b989a66991 only show owned playlists on playlist sidebar 2025-06-25 08:19:22 -07:00
Kendall Garner 2814b623e7 fix player button light theme and tooltip 2025-06-25 08:05:57 -07:00
jeffvli 7d29a692ef remove unused import 2025-06-24 22:34:06 -07:00
jeffvli 3f9eb446f7 update to v0.15.1 2025-06-24 22:27:12 -07:00
jeffvli d8f7b49ab6 increase size of play button icon 2025-06-24 22:22:15 -07:00
jeffvli 35e70a3eff fix synchronized lyric styles not applying 2025-06-24 22:20:26 -07:00
jeffvli ef9c16e940 attempt fix on docker build 2025-06-24 22:16:16 -07:00
Kendall Garner 0b39c35132 make item modal links have heavier font width 2025-06-24 21:39:47 -07:00
Kendall Garner 9f5b4e5410 remove unused length in visualizer 2025-06-24 21:20:41 -07:00
jeffvli dbf840b185 fix actionbar not growing to width of container 2025-06-24 20:33:50 -07:00
jeffvli e0f0524eb9 adjust button styles on playerbar 2025-06-24 20:31:33 -07:00
jeffvli 8598313d12 fix styling on web titlebar style 2025-06-24 20:14:15 -07:00
jeffvli c84dd648ea various clean up and fixes 2025-06-24 18:43:37 -07:00
jeffvli 01885c1a9b decrease spacing on playerbar details 2025-06-24 18:38:10 -07:00
jeffvli 5121f57171 use native img for sidebar image 2025-06-24 18:38:10 -07:00
jeffvli 3d7ee10328 add standalone fast-average-color function 2025-06-24 18:38:10 -07:00
jeffvli 4db47b4d37 switch image loading to lazy by default 2025-06-24 18:38:10 -07:00
jeffvli 786a693526 add animation presets 2025-06-24 18:38:10 -07:00
jeffvli 1faef6a1a7 fix unused var on visualizer 2025-06-24 18:38:10 -07:00
jeffvli 1598642389 re-add page fade in 2025-06-24 18:38:10 -07:00
Kendall Garner 8c4a7f4f91 only show lastfm/listenbrainz if configured 2025-06-24 17:58:43 -07:00
jeffvli 5878f89339 set sidebar items open by default 2025-06-24 15:04:22 -07:00
jeffvli 4acbb1820d set fullscreen player badges to transparent 2025-06-24 14:52:40 -07:00
jeffvli 01f5745629 update visualizer sizing and z-index 2025-06-24 14:52:27 -07:00
jeffvli 73dd781a88 fix regression on image blur in fullscreen player 2025-06-24 14:47:50 -07:00
jeffvli d777be6251 increase minRows on custom css input 2025-06-24 14:42:16 -07:00
jeffvli 6689e84f67 fix and update remote design 2025-06-24 14:36:14 -07:00
jeffvli ad533a1d9c update to v0.15.0 2025-06-24 00:07:51 -07:00
Hosted Weblate b691891e62 Translated using Weblate (Finnish)
Currently translated at 100.0% (668 of 668 strings)

Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-24 09:06:37 +02:00
Hosted Weblate 53fa265af9 Translated using Weblate (Spanish)
Currently translated at 100.0% (668 of 668 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-24 09:06:36 +02:00
Hosted Weblate 55f6a382d4 Translated using Weblate (Czech)
Currently translated at 100.0% (668 of 668 strings)

Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-06-24 09:06:36 +02:00
Hosted Weblate 9c30acdd56 Translated using Weblate (Portuguese (Brazil))
Currently translated at 62.1% (414 of 666 strings)

Co-authored-by: Brunno Hofmann <brunno.hofmann@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2025-06-24 09:06:35 +02:00
jeffvli b29d3e7f78 disable netease translation by default 2025-06-24 00:06:19 -07:00
Jeff c1330d92b2 Migrate to Mantine v8 and Design Changes (#961)
* mantine v8 migration

* various design changes and improvements
2025-06-24 00:04:36 -07:00
Benjamin bea55d48a8 discord rpc changes (#958) 2025-06-21 12:38:06 -07:00
et21ff ae41fe99bb lyrics: add translation lyrics for netease.ts (#951)
* lyrics: add translation lyrics for netease.ts
2025-06-21 12:19:23 -07:00
Pyx e3751229b6 update readme because subsonic is supported now (#960)
* Update README.md
2025-06-20 18:53:44 -07:00
Kendall Garner 87c9963354 fix subsonic album artist and album list count 2025-06-20 18:35:11 -07:00
Kendall Garner b7fb7c7f94 improve library header loading 2025-06-20 17:57:15 -07:00
Hosted Weblate b8ceb174b3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate 48f085b0ac Translated using Weblate (Finnish)
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate dfc0639f95 Translated using Weblate (French)
Currently translated at 100.0% (666 of 666 strings)

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/fr/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate 80ffd1a925 Translated using Weblate (Spanish)
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate c87bb65023 Translated using Weblate (Czech)
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
jeffvli 5ae21bd224 fix icon alignment for context menu items 2025-06-10 17:37:43 -07:00
jeffvli 12d293a74c remove trailing space 2025-06-10 17:34:00 -07:00
et21ff 62f4bb0d7b fix(player): Improve MPV stability and seek performance (#953) 2025-06-10 17:22:40 -07:00
Pyx 9f11061433 disable visualizer background (#949)
* disable visualizer background
2025-06-09 18:14:59 -07:00
Hans Yulian aba64b10d0 Feature: Shuffle Button (#941) 2025-06-09 02:02:03 -07:00
jeffvli c20e30e387 include sourcemap in vite build 2025-06-09 01:28:27 -07:00
jeffvli c4b4300845 fix lyrics offset type conversion (#948) 2025-06-09 01:28:27 -07:00
Kendall Garner f1e5ed41bc also gate by external link 2025-06-07 20:54:23 -07:00
Kendall Garner 9b79502022 config option for listenbrainz/lastfm links 2025-06-07 20:36:41 -07:00
jeffvli 636c227a83 replace and fix position of current track play icon 2025-06-03 01:05:19 -07:00
jeffvli e8a94a0b1c bump to node 23 image 2025-06-02 21:39:12 -07:00
jeffvli fa93dfd771 add pnpm install to alpine image 2025-06-02 21:37:27 -07:00
jeffvli 8629994eb6 fix docker build issues
- pnpm-lock instead of package-lock
- fix build out directory
2025-06-02 21:32:00 -07:00
jeffvli c54423a667 fix wrong lockfile copy 2025-06-02 21:30:57 -07:00
jeffvli d28fc9f630 allow workflow_dispath on docker deploy 2025-06-02 21:23:07 -07:00
jeffvli bd2b39fdfb re-add ng.conf.template file 2025-06-02 21:20:57 -07:00
jeffvli 2912cd72ef fix build artifactName to include arch 2025-06-02 20:49:55 -07:00
jeffvli 9d31d952b7 update to v0.14.0 2025-06-02 20:34:30 -07:00
jeffvli 8f692b6f4d call remote shutdown on app quit 2025-06-02 20:32:05 -07:00
jeffvli 7562c619d2 fix mpv path save dialog (#930) (#940) 2025-06-02 20:17:55 -07:00
Kendall Garner 6b91ee4a25 fix album genre filter 2025-06-02 19:38:39 -07:00
Kendall Garner 9e689468f9 info for playlists, show id, fix playlist duration 2025-06-02 00:26:36 -07:00
Kendall Garner 1cda4363ef add lockfile 2025-05-28 22:00:26 -07:00
Kendall Garner b6941df7a7 fix editorconfig and downgrade react player back to lazy 2025-05-28 21:57:47 -07:00
jeffvli 608b322f9e remove maintenance notice 2025-05-28 14:49:32 -07:00
jeffvli daee582e92 fix web player playback
- add missing forwardRef on AudioPlayer component
- bump react-player to latest
2025-05-28 10:39:25 -07:00
jeffvli 6525a8a725 fix remote dev path 2025-05-27 18:28:52 -07:00
jeffvli ee1896c345 fix version number 2025-05-27 01:47:18 -07:00
Jeff ec625c2c65 Merge pull request #933 from jeffvli/experimental/vite
Migrate from Webpack to Vite
2025-05-26 18:10:48 -07:00
jeffvli 52e4423cf1 update readme with new pnpm scripts 2025-05-26 17:20:45 -07:00
jeffvli a9f7e808cb update the docker build for pnpm 2025-05-26 17:20:45 -07:00
jeffvli 9c26187b45 fixes for pnpm v10 2025-05-26 17:20:45 -07:00
jeffvli 90afa11f20 set custom userData path for dev 2025-05-26 17:20:45 -07:00
jeffvli 6463ea937b add vite build for web 2025-05-26 17:20:45 -07:00
jeffvli ac682428e6 various cleanup 2025-05-26 17:20:45 -07:00
jeffvli 48917547b2 add vite build for remote 2025-05-26 17:20:45 -07:00
jeffvli 74554d9725 use lowercase in package productName 2025-05-26 17:20:45 -07:00
jeffvli 0d42a6ea49 update workflows for new build 2025-05-26 17:20:45 -07:00
jeffvli faadff0211 migrate to pnpm 2025-05-26 17:20:44 -07:00
jeffvli 91715ebf7d change build dir 2025-05-26 17:20:28 -07:00
jeffvli 1808f160b4 clean up dependencies 2025-05-26 17:20:28 -07:00
jeffvli e10a92a5c2 add legacy-peer-deps default 2025-05-26 17:20:02 -07:00
jeffvli 930165d006 fix all imports for new structure 2025-05-26 17:20:02 -07:00
jeffvli 249eaf89f8 update linter rules 2025-05-26 17:18:56 -07:00
jeffvli bf1cddae9d remove unusued paths from tsconfig node 2025-05-26 17:18:56 -07:00
jeffvli 9db2e51d2d reorganize global types to shared directory 2025-05-26 17:18:56 -07:00
jeffvli 26c02e03c5 update package.json and electron builder 2025-05-26 17:18:56 -07:00
jeffvli 1cf587bc8f restructure files onto electron-vite boilerplate 2025-05-26 17:18:55 -07:00
Hosted Weblate 91ce2cd8a1 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (662 of 662 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-05-26 11:11:24 +02:00
Hosted Weblate 4f61e82068 Translated using Weblate (Finnish)
Currently translated at 100.0% (659 of 659 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-05-26 11:11:24 +02:00
Hosted Weblate 1e6673fabd Translated using Weblate (French)
Currently translated at 100.0% (662 of 662 strings)

Co-authored-by: KosmoMoustache <hosted.weblate.org@kosmo.ovh>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2025-05-26 11:11:24 +02:00
Hosted Weblate 02951c92af Translated using Weblate (Spanish)
Currently translated at 100.0% (662 of 662 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (659 of 659 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-05-26 11:11:24 +02:00
Hosted Weblate 05f8fb3114 Translated using Weblate (Czech)
Currently translated at 100.0% (662 of 662 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (659 of 659 strings)

Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-05-26 11:11:24 +02:00
jeffvli 169da10c1b fix release version 2025-05-26 02:11:14 -07:00
jeffvli 5a79fee77e use missing UTC transform on navidrome dates (#928) 2025-05-26 02:08:08 -07:00
jeffvli 7ef80f14b0 fix casing on filtered list route titels (#929) 2025-05-26 01:58:16 -07:00
jeffvli 36cc37e39f update to v0.13.0 2025-05-26 01:47:13 -07:00
Kendall Garner d4e7c6bd18 fix copypasta 2025-05-20 08:40:24 -07:00
Kendall Garner 90f79b4ae7 add multiselect with invalid data handling to jellyfin album 2025-05-18 18:27:17 -07:00
Kendall Garner cf74625bfc warn if a value in select no longer exists 2025-05-18 10:59:45 -07:00
Kendall Garner f068d6e4b8 actually add type to query key 2025-05-18 09:29:13 -07:00
Kendall Garner e1aa8d74f3 Tag filter support
- Jellyfin: Uses `/items/filters` to get list of boolean tags. Notably, does not use this same filter for genres. Separate filter for song/album
- Navidrome: Uses `/api/tags`, which appears to be album-level as multiple independent selects. Same filter for song/album
2025-05-18 09:23:52 -07:00
Kendall Garner b0d86ee5c9 Support tags, and better participants for servers
- Parses `tags` for Navidrome (mapping string: string[])
- Parses `Tags` (and fetches for it) for Jellyfin (map a string to empty, and display as a bool)
- Clean parsing of participants for Navidrome/Subsonic
- Only show `People` for Jellyfin, not clickable
2025-05-17 21:35:58 -07:00
Kendall Garner 89e27ec6ff remove console.log 2025-05-16 11:50:26 -07:00
Kendall Garner 39c714a137 navidrome cover art workaround 2025-05-15 19:10:15 -07:00
Kendall Garner a8fb7ff11e fullscreen header image on click 2025-05-14 08:25:02 -07:00
jeffvli 9b95f47a91 update to v0.12.7 2025-05-12 18:27:37 -07:00
Hosted Weblate 2267e9bc9d Translated using Weblate (Czech)
Currently translated at 100.0% (657 of 657 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-05-13 03:24:48 +02:00
Kendall Garner 089311c673 add migrate from v8 (#925) 2025-05-12 18:24:42 -07:00
Kendall Garner 773f349b66 don't show song count if not present for home carousel 2025-05-09 19:08:36 -07:00
Kendall Garner 3980c8ea97 save the package-logk.json changes as well 2025-05-08 08:23:58 -07:00
Kendall Garner 257a5ceef0 force xmljs to 0.5.0 2025-05-08 08:08:31 -07:00
jeffvli fb022891fe update to v0.12.6 2025-05-08 00:44:13 -07:00
Kendall Garner 5d9906b8f2 include album artist song/album count for jellyfin, and disable playing/adding playinsts for artists with no albums 2025-05-07 21:16:47 -07:00
jeffvli 6f7cb468b2 fix regression on subsonic album artist play 2025-05-07 20:59:16 -07:00
Kendall Garner 076693e969 Merge branch 'development' of github.com:jeffvli/feishin into development 2025-05-07 20:01:04 -07:00
Kendall Garner 781d8055b5 minor artist count fixes 2025-05-07 19:53:23 -07:00
jeffvli 960bb5c660 fix navigation to detail page on artist list 2025-05-07 19:40:54 -07:00
jeffvli 42bb2bf66f fix regression on album artist play button 2025-05-07 19:25:25 -07:00
jeffvli f03d88cd8c batch jellyfin song list requests when fetching by albumId (#922) 2025-05-07 01:42:32 -07:00
jeffvli 58f6535ba6 revert electron to gtk 3 (#923) 2025-05-07 01:28:54 -07:00
jeffvli 9a59ce3613 fix casing on artist albums title 2025-05-07 01:15:00 -07:00
jeffvli 6f37e13611 additional fix to sticky table header to account for native 2025-05-06 18:54:10 -07:00
jeffvli 3c494f1c72 update to v0.12.5 2025-05-06 18:27:02 -07:00
jeffvli ec0e7256cb fix set rating click on context menu (#900)
- star rating icon overriddes the pointer click event
2025-05-06 18:23:14 -07:00
jeffvli 262203b62d handle arrow keys in global hotkey (#913) 2025-05-06 15:19:34 -07:00
jeffvli 41bdc1a7b7 disable toast overlay blocking playerbar (#888) 2025-05-06 15:00:43 -07:00
jeffvli d35e73792f fix item playback buttons on search list (#885) 2025-05-06 14:50:59 -07:00
jeffvli 4a3604b1a8 handle playback on new artist list 2025-05-06 14:43:42 -07:00
jeffvli b9611589ba fix casing on some translation strings 2025-05-06 13:23:29 -07:00
jeffvli 12c517f0ff update to v0.12.4 2025-05-06 03:40:42 -07:00
Hosted Weblate 01884ab656 Translated using Weblate (Finnish)
Currently translated at 100.0% (657 of 657 strings)

Translated using Weblate (Finnish)

Currently translated at 77.3% (508 of 657 strings)

Translated using Weblate (Finnish)

Currently translated at 69.2% (455 of 657 strings)

Translated using Weblate (Finnish)

Currently translated at 64.9% (427 of 657 strings)

Translated using Weblate (Finnish)

Currently translated at 64.9% (427 of 657 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Lunya <Lunya2@protonmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-05-06 12:28:46 +02:00
Hosted Weblate 0ba830d5d7 Translated using Weblate (Persian)
Currently translated at 74.8% (492 of 657 strings)

Co-authored-by: Hadi <xhopeter@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fa/
Translation: feishin/Translation
2025-05-06 12:28:46 +02:00
Hosted Weblate b08a0d178c Translated using Weblate (Spanish)
Currently translated at 100.0% (657 of 657 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-05-06 12:28:46 +02:00
Hosted Weblate 9afa64b537 Translated using Weblate (Polish)
Currently translated at 100.0% (657 of 657 strings)

Translated using Weblate (Polish)

Currently translated at 93.4% (614 of 657 strings)

Translated using Weblate (Polish)

Currently translated at 92.2% (606 of 657 strings)

Co-authored-by: Adam Perkowski <adas1per@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2025-05-06 12:28:46 +02:00
Hosted Weblate be8bc74ab5 Translated using Weblate (Russian)
Currently translated at 95.7% (629 of 657 strings)

Translated using Weblate (Russian)

Currently translated at 95.2% (626 of 657 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rachel Podya <homicide@disroot.org>
Co-authored-by: zv0r <mount.dev.brain@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translation: feishin/Translation
2025-05-06 12:28:46 +02:00
Hosted Weblate 2f4e228fa1 Translated using Weblate (Portuguese (Brazil))
Currently translated at 61.1% (402 of 657 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Joao <joaohirasawaa@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2025-05-06 12:28:46 +02:00
jeffvli 35ee7e4606 fix position of sticky table header when titlebar present 2025-05-06 03:27:30 -07:00
jeffvli b265f2817b bump to electron 36 (#921) 2025-05-06 02:58:22 -07:00
Kendall Garner 48af447838 fix entities version 2025-04-25 10:35:52 -07:00
Kendall Garner 397df0c9c6 npm update 2025-04-25 09:53:15 -07:00
Kendall Garner 68759a2613 artists fixes 2025-04-25 09:30:17 -07:00
Kendall Garner c376293f2f always add all artists to subsonic 2025-04-23 23:33:58 -07:00
Kendall Garner e84a4b20bc add artist list 2025-04-23 23:27:06 -07:00
Kendall Garner 14e9f6ac41 bump electronVersion 2025-04-22 07:41:56 -07:00
Kendall Garner 0115ecb59b fix repeat one/repeat all scrobble 2025-04-20 10:54:44 -07:00
Kendall Garner 1555b827ee fix: normalize artists with no album count 2025-03-10 14:20:19 -07:00
Kendall Garner 41c2a7da69 make artist stats for navidrome api sane 2025-03-09 19:21:16 -07:00
jeffvli 592376316f Update to v0.12.3 2025-03-09 17:06:40 -07:00
Kendall Garner c6d7dc0b32 prepare bfr changes (#882)
* prepare bfr changes

* contributors to subsonic/navidrome

* show performer roles

* Add BFR smart playlist fields

* Fix upload-artifact action to handle v4

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-03-09 16:55:27 -07:00
Kendall Garner 571aacbaa0 Merge branch 'development' of github.com:jeffvli/feishin into development 2025-02-27 16:43:21 -08:00
Kendall Garner ef194424e3 support css variables in sanitize 2025-02-27 16:42:02 -08:00
jeffvli 233c24cea6 Update to v0.12.2 2025-01-24 23:19:55 -08:00
jeffvli b48b0b0d11 Fix page header overlay on fullscreen player (#867) 2025-01-24 17:37:58 -08:00
jeffvli 65fe42d30c Add new languages to config 2025-01-24 16:47:49 -08:00
jeffvli 90ae7130f6 Fix invalid args on nd normalize 2025-01-24 16:44:02 -08:00
jeffvli d866dd211a Bump electron from v31 -> v33 2025-01-24 16:44:02 -08:00
Hosted Weblate 81446561e0 Translated using Weblate (Norwegian Bokmål)
Currently translated at 47.4% (312 of 657 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 41.0% (270 of 657 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 30.2% (199 of 657 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 20.2% (133 of 657 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: klodrik <klodrik@zoominn.no>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/
Translation: feishin/Translation
2025-01-15 22:35:53 +01:00
Hosted Weblate 4ef7213cf5 Translated using Weblate (Finnish)
Currently translated at 59.8% (393 of 657 strings)

Translated using Weblate (Finnish)

Currently translated at 31.6% (208 of 657 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Lauri Koo <late91@gmail.com>
Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-01-15 22:35:53 +01:00
Hosted Weblate b639d7bfab Translated using Weblate (Persian)
Currently translated at 64.6% (425 of 657 strings)

Translated using Weblate (Persian)

Currently translated at 62.7% (412 of 657 strings)

Translated using Weblate (Persian)

Currently translated at 39.2% (258 of 657 strings)

Co-authored-by: Hadi <xhopeter@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fa/
Translation: feishin/Translation
2025-01-15 22:35:53 +01:00
Hosted Weblate 35e0af5164 Translated using Weblate (French)
Currently translated at 100.0% (657 of 657 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2025-01-15 22:35:53 +01:00
Hosted Weblate 86cca7fca5 Translated using Weblate (Indonesian)
Currently translated at 100.0% (657 of 657 strings)

Translated using Weblate (Indonesian)

Currently translated at 6.0% (40 of 657 strings)

Added translation using Weblate (Indonesian)

Co-authored-by: Fadilah Riczky <friczky@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/id/
Translation: feishin/Translation
2025-01-15 22:35:53 +01:00
Hosted Weblate 132ebb6b52 Translated using Weblate (Hungarian)
Currently translated at 31.6% (208 of 657 strings)

Added translation using Weblate (Hungarian)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: WilliamNT <hwbendeguz@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translation: feishin/Translation
2025-01-15 22:35:53 +01:00
Hosted Weblate e23906582a Translated using Weblate (Tamil)
Currently translated at 100.0% (657 of 657 strings)

Added translation using Weblate (Tamil)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ta/
Translation: feishin/Translation
2025-01-15 22:35:53 +01:00
jeffvli e57232f89c fix array parameter parsing for subsonic client 2024-12-31 05:56:34 -08:00
ももぴ f0978365d4 fix: fetch album art via Last.fm should use album artist name (#855) 2024-12-19 20:31:44 -08:00
Penelope Gwen / Pogmommy ae65922253 decoded plaintext credentials before params get re-encoded in ssApiClient (#862) 2024-12-19 20:31:07 -08:00
jeffvli ca58551b94 Make client param on SS/ND queries consistent 2024-12-19 17:15:07 -08:00
jeffvli be0ebac362 Update to v0.12.1 2024-11-20 10:50:04 -08:00
Mitja Ševerkar 8eb8290fc4 Fix URL encoding on Subsonic (#850)
* Revert "Encode credential for subsonic stream/coverart (#841)"

This reverts commit 8ec4551b46.

* Properly URL encode credentials on Subsonic

Previous commit (8ec4551b46) has been reverted, as it has encoded even equal signs (=), and and signs (&), which should not have been encoded. Nextcloud Music has subsequently failed to receive separate username and password and has therefore failed whilst authenticating the user.

Example of URL beforehand:
https://cloud.example.com/index.php/apps/music/subsonic/rest/stream.view?id=track-4936&v=1.13.0&c=feishin_&u%3Dtest-test%40example.com%26p%3Dpassword

Example of URL now:
https://cloud.example.com/index.php/apps/music/subsonic/rest/stream.view?id=track-4936&v=1.13.0&c=feishin_&u=test-test%40example.com&p=password
2024-11-19 19:00:53 -08:00
jeffvli fac1d3fb62 Update to v0.12.0 2024-11-18 20:43:41 -08:00
Hosted Weblate 93fbe1f49a Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (657 of 657 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-11-19 04:37:48 +00:00
Hosted Weblate 59f17a4faa Translated using Weblate (Korean)
Currently translated at 35.0% (230 of 657 strings)

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Korean)

Currently translated at 26.5% (174 of 655 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: tgp0625 <tgp0625@naver.com>
Co-authored-by: ᄒᄋ <prohack1109@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ko/
Translation: feishin/Translation
2024-11-19 04:37:47 +00:00
Hosted Weblate d9e41720c8 Translated using Weblate (Spanish)
Currently translated at 100.0% (657 of 657 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-11-19 04:37:46 +00:00
Hosted Weblate 8452780602 Translated using Weblate (Czech)
Currently translated at 100.0% (657 of 657 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/cs/
Translation: feishin/Translation
2024-11-19 04:37:46 +00:00
jeffvli 96b5b660fb Add maintenance notice 2024-11-18 20:37:33 -08:00
Martin 610138c05c README.md: Colorize YAML block, fix macOS capitalization and remove deprecated compose version (#847) 2024-11-18 20:22:13 -08:00
jeffvli 6a619240fa Handle potential undefined value on CardRows (#834) 2024-11-18 20:17:33 -08:00
jeffvli b65c972da1 Handle negative values on gain calculation (#834) 2024-11-18 20:16:20 -08:00
jeffvli 8ec4551b46 Encode credential for subsonic stream/coverart (#841) 2024-11-13 17:54:54 -08:00
Jack Merrill 21f4a78dd7 feat: Discord Rich Presence album art via Last.fm (#341) (#817)
* feat: Discord Rich Presence album art via Last.fm

* fix: securely fetch album art
2024-10-31 12:09:17 -07:00
sel10ut 61d7e7c390 fix(jellyfin): return "Appears On" section to artist page (#812)
Exclude 'AlbumArtistIds' when querying "Appears On" items, which,
if put together with 'ContributingArtistIds', returns an empty list.
2024-10-31 11:33:10 -07:00
astrid 993841ddbf fix devEngines (#801) 2024-10-31 11:31:58 -07:00
jeffvli 98b8409592 Update description to include subsonic servers 2024-10-15 03:22:21 -07:00
jeffvli d3480a86c3 Fix release date parsing to use UTC (#794) 2024-10-15 03:15:59 -07:00
jeffvli 3a63ee4b95 Include all playlist types in Jellyfin playlist fetch 2024-10-15 03:04:38 -07:00
jeffvli 876376d65f Update to v0.11.1 2024-10-14 20:26:21 -07:00
Hosted Weblate 215abf615d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (655 of 655 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-10-15 04:37:52 +02:00
Hosted Weblate afad2843c6 Translated using Weblate (Spanish)
Currently translated at 100.0% (655 of 655 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-10-15 04:37:52 +02:00
Hosted Weblate 958ab1f31f Translated using Weblate (Czech)
Currently translated at 100.0% (655 of 655 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/cs/
Translation: feishin/Translation
2024-10-15 04:37:51 +02:00
Hosted Weblate 0ca325aac2 Translated using Weblate (Portuguese (Brazil))
Currently translated at 31.1% (204 of 655 strings)

Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2024-10-15 04:37:50 +02:00
jeffvli 12b66e5fa0 Convert subsonic coverart property to string (#795) 2024-10-14 19:36:51 -07:00
jeffvli 7e78478fbe Fix combined title cell controls blocking links 2024-10-14 00:38:28 -07:00
jeffvli f783a6360e Update to v0.11.0 2024-10-09 20:04:42 -07:00
Hosted Weblate 8eb6c6a213 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (653 of 653 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
Hosted Weblate ea5f0268cb Translated using Weblate (Serbian)
Currently translated at 79.0% (516 of 653 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Reportiv <reportiv@gmx.de>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sr/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
Hosted Weblate 427272f8c8 Translated using Weblate (French)
Currently translated at 100.0% (653 of 653 strings)

Translated using Weblate (French)

Currently translated at 100.0% (653 of 653 strings)

Co-authored-by: Benjamin <iipython@proton.me>
Co-authored-by: D.M <dylan.montigaud@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
Hosted Weblate 40d09404b3 Translated using Weblate (Spanish)
Currently translated at 100.0% (653 of 653 strings)

Co-authored-by: Benjamin <iipython@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
Hosted Weblate f3ee198833 Translated using Weblate (Czech)
Currently translated at 100.0% (653 of 653 strings)

Co-authored-by: Benjamin <iipython@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
Hosted Weblate 5416d6e596 Translated using Weblate (Russian)
Currently translated at 95.7% (625 of 653 strings)

Co-authored-by: Benjamin <iipython@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
Hosted Weblate a0639cbd27 Translated using Weblate (English)
Currently translated at 100.0% (653 of 653 strings)

Co-authored-by: Benjamin <iipython@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
Hosted Weblate 790961f29a Translated using Weblate (German)
Currently translated at 87.2% (570 of 653 strings)

Co-authored-by: Achim Walz <achim@aalso-walz.de>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2024-10-10 03:28:31 +02:00
jeffvli 18027d4292 Remove current song list index animation (#783) 2024-10-09 18:27:48 -07:00
jeffvli a8b3944c66 Set row play button to switch to song on queue lists 2024-10-09 18:20:04 -07:00
Trevor a00385e78f Add "Move to next" button to queue (#781) 2024-10-09 18:00:25 -07:00
Egor 5e628d96c7 Some fixes to #772 (Add play button to song table) (#784)
* Add play button to song table album cover, like it is in grid

* Fix: play button caused error for albums and artists tables

* Fix: play button caused error for some other tables
2024-10-09 17:40:30 -07:00
Egor ad34d8553e Add play button to song table album cover, like it is in grid (#772)
* Add play button to song table album cover, like it is in grid

* Fix: play button caused error for albums and artists tables
2024-10-03 19:22:51 -07:00
Kendall Garner a89b6640a9 horizontal scroll 2024-10-01 18:15:18 -07:00
Kendall Garner b3b810c62c funkwhale bodge 2024-10-01 17:21:28 -07:00
Kendall Garner ecef9bea5e fix speed state 2024-09-29 16:16:33 -07:00
Hosted Weblate c7214fc7ce Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 99.8% (652 of 653 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
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/zh_Hans/
Translation: feishin/Translation
2024-09-29 06:44:18 +02:00
Hosted Weblate 84bcfb6eb9 Translated using Weblate (Spanish)
Currently translated at 99.8% (652 of 653 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-09-29 06:44:17 +02:00
Hosted Weblate 0ca7a0efc9 Translated using Weblate (Czech)
Currently translated at 100.0% (653 of 653 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/cs/
Translation: feishin/Translation
2024-09-29 06:44:17 +02:00
Torsten Curdt cb76436a2a point help menu items to feishin instead of just electron (#767) 2024-09-28 21:44:13 -07:00
jeffvli 88a951e2e7 Update to v0.10.1 2024-09-28 21:39:30 -07:00
jeffvli 6f1b78c2d6 Fix Subsonic servertype lock from docker configuration 2024-09-28 21:37:09 -07:00
jeffvli 107074b240 Fix subsonic album list sort options 2024-09-28 21:35:32 -07:00
Kendall Garner 6e8ca7e035 fix navidrome getPlaylistSOngList end 2024-09-28 21:22:14 -07:00
jeffvli 3c99a662e8 Fix album detail header track count 2024-09-26 21:23:48 -07:00
jeffvli fc8110ca79 Fix layout shift on lyrics container hover 2024-09-26 21:21:54 -07:00
jeffvli 715f800788 Add getStructuredLyrics to navidrome controller 2024-09-26 12:13:29 -07:00
jeffvli 244aee45cd Handle potential null response on genre results from Navidrome 2024-09-26 12:13:03 -07:00
jeffvli c96f5b207d Handle subsonic endpoints that potentially return optional response when no items 2024-09-26 11:14:06 -07:00
Hosted Weblate 0e8b2aed72 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (642 of 642 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-09-26 06:57:33 +02:00
Hosted Weblate f2accd63fd Translated using Weblate (French)
Currently translated at 96.5% (620 of 642 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jucgshu <brewal.bouvet@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2024-09-26 06:57:33 +02:00
Hosted Weblate c024e975fb Translated using Weblate (Spanish)
Currently translated at 100.0% (642 of 642 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-09-26 06:57:33 +02:00
Hosted Weblate a3f725b0ef Translated using Weblate (Czech)
Currently translated at 100.0% (642 of 642 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (642 of 642 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/cs/
Translation: feishin/Translation
2024-09-26 06:57:33 +02:00
Hosted Weblate f137f487aa Translated using Weblate (English)
Currently translated at 98.1% (641 of 653 strings)

Co-authored-by: Anonymous <noreply@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2024-09-26 06:57:33 +02:00
jeffvli 8e59514524 Update to v.10.0 2024-09-25 21:57:19 -07:00
Mikhail Tsarev 7bcfe30a8e Improved translations for English and Russian versions. (#760)
* First version of Russian translation

* Improvements

---------

Co-authored-by: Suoslex <mtsarev06@gmail.com>
2024-09-25 21:42:41 -07:00
Kendall Garner 8cddbef701 Subsonic 2, general rework (#758) 2024-09-25 21:23:08 -07:00
Xudong Zhou 31492fa9ef Lyrics Translation and Romaji (Fulfill #732) [Translation Part] (#747) 2024-09-23 20:25:17 -07:00
Jeff e3946a9413 Update Navidrome list sort mappings for ND v0.53.2 (#754)
* Update navidrome list sort mappings

* Rename ownerName to owner_name

* Remove deprecated client-side sort
2024-09-22 18:37:13 -07:00
Jamie King 28c12496f1 Removed references to "ElectronReact" in MacOS menu bar (#756) 2024-09-20 13:26:28 +00:00
jeffvli f8c2ff735b Replace "SortName" for "Name" in Jellyfin song sort 2024-09-19 20:39:47 -07:00
Kendall Garner 22e4974191 refactor navidrome-types 2024-09-18 20:43:35 -07:00
Kendall Garner 6eecc3c0fd handle sanitized sort and filter post-fact 2024-09-18 18:00:25 -07:00
Kendall Garner b628b684ae require limit to specified (nonzero) for shuffle all 2024-09-18 07:31:58 -07:00
Kendall Garner 4c49e403ab make headers optional? 2024-09-16 19:57:59 -07:00
Kendall Garner 730683fe25 different date formats based off of metadata 2024-09-16 17:33:06 -07:00
Kendall Garner 96b4f8dd89 update album play count 2024-09-15 21:48:32 -07:00
Kendall Garner f82889e5ec npm audit fix 2024-09-15 20:05:48 -07:00
Benjamin 8d8826a9b7 use utc for absolute date formatting (#743)
* use utc for date formatting

* add seperate utc function and call that instead

* swap date format to be a constant

* make dateadded use non-utc
2024-09-13 01:35:57 +00:00
Kendall Garner 660c9744bf clear queue when shuffle now 2024-09-11 20:36:46 -07:00
Kendall Garner 8221af9a8f break by newline for comment 2024-09-11 07:41:15 -07:00
jeffvli 93f2573847 Update to v0.9.0 2024-09-10 22:37:48 -07:00
Kendall Garner 03d97c6b1e use unique id for paginated playlist 2024-09-10 22:37:24 -07:00
Hosted Weblate 0b86cb51d3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (634 of 634 strings)

Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-09-10 04:01:31 +02:00
Hosted Weblate ee54b8219b Translated using Weblate (French)
Currently translated at 96.8% (610 of 630 strings)

Co-authored-by: Evan <evan_g@orange.fr>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2024-09-10 04:01:31 +02:00
Hosted Weblate 25b593aadd Translated using Weblate (Spanish)
Currently translated at 100.0% (634 of 634 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (632 of 632 strings)

Translated using Weblate (Spanish)

Currently translated at 99.8% (631 of 632 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-09-10 04:01:31 +02:00
Hosted Weblate 5253e32b67 Translated using Weblate (Czech)
Currently translated at 100.0% (634 of 634 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (632 of 632 strings)

Translated using Weblate (Czech)

Currently translated at 99.6% (630 of 632 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/cs/
Translation: feishin/Translation
2024-09-10 04:01:31 +02:00
Hosted Weblate b0b558c90a Translated using Weblate (German)
Currently translated at 85.0% (536 of 630 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Schroti <schrotihd@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2024-09-10 04:01:31 +02:00
Kendall Garner f11a53c1a4 fix suspense 2024-09-09 19:01:07 -07:00
Kendall Garner e2a05f4204 add track normalization for jellyfin as well 2024-09-09 07:15:26 -07:00
Kendall Garner fcc010eb54 move transcoding placeholder 2024-09-08 22:05:44 -07:00
Kendall Garner 1b41a5a674 enable disabling tray 2024-09-08 20:55:07 -07:00
Kendall Garner 74aa88e082 add web visualizer (#314)
* add web visualizer

* fallback to simple model

* less samples, hopefully more efficient

* Use audiomotion analyzer

- Note: fixed to 4.1.1 because 4.2.0 uses esm which breaks in the current workflow...

* revert publish changes

* r2

* don't massively change package.json

* lazy
2024-09-09 01:25:01 +00:00
Kendall Garner fbac33ceba add shuffle context menu item 2024-09-07 21:31:01 -07:00
Kendall Garner 42ba5a531c use feishin switch instead of default 2024-09-05 18:08:37 -07:00
Kendall Garner 257e1e2cd9 ... 2024-09-05 07:06:37 -07:00
Kendall Garner 3025e84c58 remove height everywhere for jellyfin images 2024-09-04 22:30:50 -07:00
Kendall Garner 4a111d9cf2 don't make artist clickable if no id 2024-09-04 20:01:45 -07:00
Kendall Garner e6bd8deb0c use unique id for places that may have duplicates 2024-09-04 19:34:07 -07:00
jeffvli 6b0c57998b Update to v0.8.1 2024-09-03 21:53:19 -07:00
jeffvli 6587e9cac8 Fix invalid DOM prop on playerbar 2024-09-03 21:51:50 -07:00
jeffvli 2e3c69e61c Fix song index skip when viewing synchronized lyrics 2024-09-03 21:51:18 -07:00
jeffvli 4a8cd63046 Update to v0.8.0 2024-09-02 22:48:52 -07:00
Hosted Weblate 549b53b4a4 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (630 of 630 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (630 of 630 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (630 of 630 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (610 of 610 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (595 of 595 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-09-03 05:31:30 +00:00
Hosted Weblate f33d13f574 Translated using Weblate (French)
Currently translated at 100.0% (593 of 593 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2024-09-03 05:31:29 +00:00
Hosted Weblate 4da51a16c9 Translated using Weblate (Spanish)
Currently translated at 100.0% (630 of 630 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (622 of 622 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (612 of 612 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (610 of 610 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (604 of 604 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (602 of 602 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (602 of 602 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (602 of 602 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (599 of 599 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (597 of 597 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (595 of 595 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-09-03 05:31:29 +00:00
Hosted Weblate 8d138ff974 Translated using Weblate (Dutch)
Currently translated at 40.1% (245 of 610 strings)

Translated using Weblate (Dutch)

Currently translated at 40.1% (245 of 610 strings)

Translated using Weblate (Dutch)

Currently translated at 40.0% (244 of 610 strings)

Translated using Weblate (Dutch)

Currently translated at 40.7% (244 of 599 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Idris Saklou <idrissaklou@hotmail.com>
Co-authored-by: Joren Vansteenkiste <vansteenkiste.joren@telenet.be>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translation: feishin/Translation
2024-09-03 05:31:28 +00:00
Hosted Weblate 9373937436 Translated using Weblate (Czech)
Currently translated at 100.0% (630 of 630 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (621 of 621 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (612 of 612 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (610 of 610 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (604 of 604 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (599 of 599 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (595 of 595 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/cs/
Translation: feishin/Translation
2024-09-03 05:31:27 +00:00
Hosted Weblate 46bbe6b95f Translated using Weblate (German)
Currently translated at 88.2% (525 of 595 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: elia <me@elia.li>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2024-09-03 05:31:26 +00:00
Kendall Garner 56c229a5e0 [slightly less scuffed bugfix]: Update table rating/favorite when updated anywhere … (#707)
* [scuffed bugfix]: Update table rating/favorite when updated anywhere else

Modify player store to have temporary state for favorite/rating update
Add effect handler for `virtual-table` to update rating/favorite for players

Note that this does not handle song grid view.
Using a similar handler for gird view did not work, as it appeared to result in inconsistent state.

Finally, this is probably not the optimal solution.
Performance appears fine for ~20k items, but no guarantees.

* restore should update song

* update song rating/favorite/played everywhere except playlist

* special rule for playlists

* use iterator instead
2024-09-02 22:31:20 -07:00
Kendall Garner 9d44f0fc08 [bugfix]: don't be loading if top songs disabled 2024-09-02 19:26:47 -07:00
Benjamin 903d1479a4 adjust rules for user selection (#723) 2024-09-03 00:48:52 +00:00
Kendall Garner 7299bcefb2 Merge branch 'development' of github.com:jeffvli/feishin into development 2024-09-02 10:57:21 -07:00
Kendall Garner 6b7c69e90a fix seeking between 0-1 seconds 2024-09-02 10:56:46 -07:00
dependabot[bot] 4601838afe Bump electron-updater in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [electron-updater](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-updater).


Updates `electron-updater` from 6.3.0 to 6.3.1
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-updater/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-updater@6.3.1/packages/electron-updater)

---
updated-dependencies:
- dependency-name: electron-updater
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-01 17:09:50 -07:00
Kendall Garner f7dd634f67 reorder album artist page 2024-09-01 16:48:43 -07:00
Pyx eb50c69a35 Album blur, allow clicking the playerbar to toggle the player, misc changes (#717)
* Album blur, allow clicking the playerbar to toggle the player

* Fix stopProporagion, sync package with upsteam, update translation

* recommit my existing changes

* Update default albumBackgroundBlur to 6

* according to git this commit resets the package files

* merge with our fork because pyx forgot to add it

* try adding a setting

* change the playerbar animation

* make the animation quicker bc its choppy

* change playerbar to use a bool instead

* requested opacity fix

* Refactor classes to use clsx

---------

Co-authored-by: iiPython <ben@iipython.dev>
Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2024-09-01 23:42:01 +00:00
Kendall Garner b93ad40571 Merge pull request #720 from pyxfluff/patch-1
Add play count to albums
2024-09-01 12:50:19 -07:00
Kendall Garner 748db032c7 add translation 2024-09-01 12:48:11 -07:00
Kendall Garner 80931d1b19 jellyfin random play filter 2024-09-01 12:25:50 -07:00
Kendall Garner 93377dcc4f fix jellyfin playlists, add is public 2024-09-01 09:37:37 -07:00
Kendall Garner 528bef01f0 provide transcoding support 2024-09-01 08:26:30 -07:00
Kendall Garner da95a644c8 upgrade webpack 2024-08-29 21:42:44 -07:00
Pyx f5a04980a4 Add play count to albums 2024-08-29 23:03:00 -04:00
Kendall Garner 93055b3bf1 allow disabling web audio 2024-08-29 19:44:24 -07:00
Kendall Garner e68847f50a slightly better error handling 2024-08-27 21:27:49 -07:00
Kendall Garner 43fe1a235e fix context menu original item 2024-08-27 21:21:44 -07:00
Kendall Garner 62c372d0c7 dont't move to 0 when removing current item from queue 2024-08-27 21:14:08 -07:00
Kendall Garner 279842b894 bump node mpv 2024-08-27 20:11:08 -07:00
Kendall Garner 6125901023 [enhancement]: custom css 2024-08-27 08:26:34 -07:00
Kendall Garner 004c9a8d06 allow hiding context menu items 2024-08-26 21:35:12 -07:00
Kendall Garner f746114041 increase metadata size of library header 2024-08-26 20:26:37 -07:00
Kendall Garner 9f4861a78a use context menu instead of button 2024-08-25 22:17:11 -07:00
Kendall Garner 32b984a18b add playlist context menu button to sidebar 2024-08-25 22:08:07 -07:00
Kendall Garner 8a8542ddb1 simplify disc/subtitle for album list 2024-08-25 21:34:43 -07:00
Kendall Garner b41a1a8b15 [bugfix]: properly update song when restoring queue 2024-08-25 20:02:44 -07:00
Kendall Garner 9923c021fa better album dates 2024-08-25 19:52:44 -07:00
Kendall Garner 8c929d0dc3 fixed size for different sizes 2024-08-25 18:07:51 -07:00
Kendall Garner fb1e33fad5 autosize library item text 2024-08-25 17:50:46 -07:00
Kendall Garner c4677a63f6 [enhancement]: allow downloading individual tracks for external use 2024-08-25 17:11:24 -07:00
Kendall Garner 10fca2dc12 enable reordering non-smart playlists 2024-08-25 15:21:56 -07:00
Kendall Garner 0b383b758e support collapsing shared playlists 2024-08-24 21:09:44 -07:00
Kendall Garner ccb6f2c8b0 very niche error handling for no audio device id but still have error checking 2024-08-24 20:36:04 -07:00
Kendall Garner a44071fedd add error checking for set sink id (case of no devices at all) 2024-08-24 20:13:30 -07:00
Kendall Garner b527d579fd Revert upgrade of discord-rpc
Some horrible magic can result in this upgrade causing compiler errors.
No idea why.
2024-08-24 15:22:55 -07:00
Kendall Garner 5b2977e5e8 [enhancement]: support viewing current/setting current time in remote 2024-08-24 13:26:45 -07:00
Kendall Garner b347b794b9 fix micromatch 2024-08-23 19:54:39 -07:00
Kendall Garner ad81790c90 add more places for share in context menu 2024-08-23 19:53:40 -07:00
Kendall Garner 906ffee8bc thanks discord [support changing listen type] 2024-08-23 10:34:18 -07:00
Kendall Garner 284db988c9 [enhancement]: use discord activity type listening 2024-08-23 08:27:40 -07:00
Kendall Garner 271be93a96 fix prettier/lint 2024-08-23 08:19:27 -07:00
Kendall Garner 121b036aaf bump i18next-parser 2024-08-23 08:00:59 -07:00
Kendall Garner 028ccfb1cd fix album art res 0 and allow resizing volume bar 2024-08-22 21:57:58 -07:00
Kendall Garner 37b0407188 simplify webaudio replaygain to reduce pop-in 2024-08-21 23:04:37 -07:00
Kendall Garner 616fd45734 add minimum duration check for crossfade 2024-08-21 22:47:35 -07:00
Kendall Garner a537642990 [bugfix]: set index to current track when unshuffling 2024-08-20 19:10:05 -07:00
Kendall Garner 9c6abcb32c Use break-word over break-all 2024-08-20 16:35:08 +00:00
Kendall Garner af69a58418 [bugfix]: use chrome-specific implementation for web audio sink 2024-08-19 22:38:51 -07:00
Kendall Garner ebebdc1e03 forcefully break long lines 2024-08-19 22:12:32 -07:00
Kendall Garner 7d185f6563 clarify text 2024-08-19 22:02:54 -07:00
Kendall Garner 88741a8616 add ability to configure double click behavior 2024-08-19 21:56:55 -07:00
Kendall Garner 94edda1856 better handling of grid refresh 2024-08-19 21:36:56 -07:00
Kendall Garner 886786d428 [enhancement]: add background opacity to buttons in full screen player 2024-08-19 19:03:19 -07:00
Kendall Garner e4ca0164fa [bugfix]: Jellyfin do not force width = height for images 2024-08-15 23:35:29 -07:00
Jeff 08db18359a Merge pull request #687 from jeffvli/dependabot/npm_and_yarn/npm_and_yarn-bb2c7e2e3f
Bump electron-updater from 4.6.5 to 6.3.0 in the npm_and_yarn group across 1 directory
2024-07-30 11:53:25 -07:00
jeffvli f2beeef0e9 Bump to v0.7.3 2024-07-30 03:26:21 -07:00
dependabot[bot] 6daba77bae Bump electron-updater in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [electron-updater](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-updater).


Updates `electron-updater` from 4.6.5 to 6.3.0
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-updater/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-updater@6.3.0/packages/electron-updater)

---
updated-dependencies:
- dependency-name: electron-updater
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-30 10:19:42 +00:00
jeffvli fd893224b3 Bump electronVersion in build configuration (#686) 2024-07-30 03:17:32 -07:00
Hosted Weblate 8815246221 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (593 of 593 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-07-25 19:36:24 +00:00
Hosted Weblate 5e353649a4 Translated using Weblate (Korean)
Currently translated at 1.6% (10 of 593 strings)

Co-authored-by: 박용현 <pyh5523@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ko/
Translation: feishin/Translation
2024-07-25 19:36:24 +00:00
Jeff 4ca7b4221c Merge pull request #680 from dragonish/metadata
Fix full screen player metadata may not change when switching queue
2024-07-25 12:36:19 -07:00
dragonish 6c61ea898f Fix full screen player metadata may not change when switching queue 2024-07-26 01:52:40 +08:00
Kendall Garner 0b786b025f Merge pull request #676 from dragonish/lyrics
Fix synchronized lyrics that may become unaligned during playback after re-rendering
2024-07-23 04:09:11 +00:00
dragonish e106fb324f Fix synchronized lyrics that may become unaligned during playback after re-rendering 2024-07-22 21:33:01 +08:00
Jeff 3edc6bab04 Merge pull request #668 from yuygfgg/patch-1
fix blank screen when reopening window on macos
2024-07-21 04:16:17 -07:00
yuygfgg 0113ef2582 restore comments 2024-07-14 21:15:58 +08:00
yuygfgg 493b81875a fix blank screen when reopening window on macos 2024-07-14 20:46:04 +08:00
Jeff ed8e5e69ba Merge pull request #664 from sel10ut/bugfix/fix-minimize-setting
Fix minimize to tray setting toggle
2024-07-14 02:53:48 -07:00
jeffvli d27a656568 Bump electron to v31 (again) 2024-07-13 01:30:18 -07:00
sel10ut 582739a091 fix(settings): set proper default minimize to tray check 2024-07-04 13:29:47 +03:00
Jeff fb930f1197 Merge pull request #654 from minicoz/feat/docker-compose-readme
Adding in docker compose instructions to README
2024-07-03 16:30:45 -07:00
Jeff 849aa97e63 Merge pull request #663 from jeffvli/dependabot/npm_and_yarn/release/app/npm_and_yarn-99150a289a
Bump ws from 8.17.1 to 8.18.0 in /release/app in the npm_and_yarn group across 1 directory
2024-07-03 16:29:51 -07:00
dependabot[bot] bc5abe3ec1 Bump ws in /release/app in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the /release/app directory: [ws](https://github.com/websockets/ws).


Updates `ws` from 8.17.1 to 8.18.0
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.17.1...8.18.0)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-03 23:21:13 +00:00
Jeff 46cd783fa3 Merge pull request #662 from jeffvli/dependabot/npm_and_yarn/npm_and_yarn-8fcff2be61
Bump the npm_and_yarn group across 2 directories with 2 updates
2024-07-03 16:20:05 -07:00
jeffvli a93173f55a Bump to v0.7.2 2024-07-03 15:57:57 -07:00
jeffvli bd04168209 Add languages 2024-07-03 15:56:48 -07:00
dependabot[bot] 76ffdb6627 Bump the npm_and_yarn group across 2 directories with 2 updates
Bumps the npm_and_yarn group with 2 updates in the / directory: [ws](https://github.com/websockets/ws) and [braces](https://github.com/micromatch/braces).
Bumps the npm_and_yarn group with 1 update in the /release/app directory: [ws](https://github.com/websockets/ws).


Updates `ws` from 7.5.7 to 7.5.10
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.5.7...7.5.10)

Updates `braces` from 3.0.2 to 3.0.3
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

Updates `ws` from 8.13.0 to 8.17.1
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.5.7...7.5.10)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: braces
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ws
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-03 22:31:09 +00:00
Hosted Weblate f674260df3 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (591 of 591 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.4% (588 of 591 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SunSpring <yearnsun@gmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-07-03 22:29:28 +00:00
Hosted Weblate e9315886b7 Translated using Weblate (Korean)
Currently translated at 1.1% (7 of 591 strings)

Added translation using Weblate (Korean)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: hubag <pyosy17@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ko/
Translation: feishin/Translation
2024-07-03 22:29:28 +00:00
Hosted Weblate 4741dd0d77 Translated using Weblate (Finnish)
Currently translated at 19.6% (116 of 591 strings)

Added translation using Weblate (Finnish)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jonne Saloranta <saloranta.jonne@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2024-07-03 22:29:27 +00:00
Hosted Weblate 7a1c4f5082 Translated using Weblate (Spanish)
Currently translated at 100.0% (593 of 593 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (591 of 591 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (586 of 586 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (586 of 586 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-07-03 22:29:27 +00:00
Hosted Weblate abf339bb58 Translated using Weblate (Polish)
Currently translated at 100.0% (586 of 586 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2024-07-03 22:29:26 +00:00
Hosted Weblate bb8f67c4c1 Translated using Weblate (Czech)
Currently translated at 100.0% (593 of 593 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (591 of 591 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (586 of 586 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/cs/
Translation: feishin/Translation
2024-07-03 22:29:26 +00:00
Hosted Weblate e416c2a3b6 Translated using Weblate (Russian)
Currently translated at 97.2% (575 of 591 strings)

Translated using Weblate (Russian)

Currently translated at 97.2% (575 of 591 strings)

Translated using Weblate (Russian)

Currently translated at 95.0% (562 of 591 strings)

Translated using Weblate (Russian)

Currently translated at 95.0% (562 of 591 strings)

Translated using Weblate (Russian)

Currently translated at 70.7% (418 of 591 strings)

Translated using Weblate (Russian)

Currently translated at 70.7% (418 of 591 strings)

Co-authored-by: Blueberry <igory.ygr200@gmail.com>
Co-authored-by: Eugeniy <zamelane@vk.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ShaDream <mogilnikovshadream@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translation: feishin/Translation
2024-07-03 22:29:25 +00:00
Hosted Weblate 5af4344168 Translated using Weblate (English)
Currently translated at 100.0% (586 of 586 strings)

Co-authored-by: Benjamin <iipython@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2024-07-03 22:29:25 +00:00
Hosted Weblate 55e958b5da Translated using Weblate (Portuguese (Brazil))
Currently translated at 34.3% (201 of 586 strings)

Co-authored-by: Cyber Hippie <neves.j@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2024-07-03 22:29:24 +00:00
Jeff 2a231ed7af Merge pull request #659 from kgarner7/fix-electron-31-build
[bugfix]: use tsx instead of ts-node, update @electron/rebuild
2024-07-03 15:29:17 -07:00
jeffvli a26f7feb31 Readd transpile-only on dev 2024-07-03 15:13:54 -07:00
jeffvli 90e267d9c7 Bump node version from 16 -> 18 in builders 2024-07-03 15:08:14 -07:00
jeffvli 1ab09c5488 Move tsx and electron/rebuild to devDependencies 2024-07-03 15:05:01 -07:00
jeffvli eadbf3ad7b Readd ts-node 2024-07-03 15:00:56 -07:00
Jeff 42bcc4190c Merge pull request #660 from sel10ut/bugfix/jellyfin-multiple-sessions
(Jellyfin) Allow multiple sessions from the same user with different instances
2024-07-03 14:49:41 -07:00
jeffvli 3c44db377b Revert "Bump electron to v31 (#643)"
This reverts commit 0c14427bdb.
2024-07-03 14:40:09 -07:00
sel10ut ba64f4c467 refactor(jellyfin): migrate auth method 2024-07-03 22:41:35 +03:00
sel10ut 596bf3a378 fix(jellyfin): allow multiple sessions from the same client type
Allow multiple sessions from the same user with different instances.
Instead of sending a hard-coded string, send a randomly generated
string `deviceId`, which already exists and is created for each
new installation.
2024-07-03 22:12:15 +03:00
Kendall Garner 91e6119afa use tsx instead of ts-node, update @electron/rebuild 2024-07-03 11:53:59 -07:00
mlnl b053538f94 Update README.md
removed unused volume
2024-07-03 18:51:46 +00:00
jeffvli 0c14427bdb Bump electron to v31 (#643) 2024-07-03 02:10:13 -07:00
Kendall Garner 110a1a63f0 simplify remote/media session (#632) 2024-07-03 01:47:26 -07:00
Kendall Garner d57b4b4b68 [bugfix]: properly clean up MPV on quit, use pid for socket (#627)
* fix cleanup

* don't delete file if windows
2024-07-03 01:36:01 -07:00
Benjamin 4191edb88c fix cache settings not being sentence cased (#657) 2024-07-03 01:29:53 -07:00
sel10ut b38930a277 tweak(jellyfin): fetch actual recent album releases (#629) 2024-07-03 01:29:34 -07:00
Gelaechter ea865f44b1 Allow jumping to lyrics (#656) 2024-07-03 01:24:31 -07:00
isaiahfuller 0768ce80a7 Add option to play similar tracks from the context menu (#650)
* Add option to play similar songs from context menu

* remove console.log
2024-07-03 01:17:56 -07:00
minicoz c960cc44b7 adding env options 2024-06-28 09:10:47 -07:00
minicoz a84276579b adding in docker compose instructions 2024-06-28 09:08:09 -07:00
Kendall Garner b30fadd149 navidrome album artist covoer art bodge 2024-05-29 02:53:41 -07:00
Kendall Garner aa89c5e80e [enhancement]: apply formatting to card values 2024-05-26 12:20:01 -07:00
Kendall Garner 38ed083693 [enhancement]: support using native image aspect ratio 2024-05-25 11:15:30 -07:00
Kendall Garner 961d1838c0 reopen window if exit to tray 2024-05-25 08:14:01 -07:00
Kendall Garner 67deb3e3d8 [bugfix]: only restart time when now for web 2024-05-23 20:41:01 -07:00
Kendall Garner 79384fa4ed add songCount to table localization 2024-05-17 23:17:31 -07:00
Kendall Garner bb2f8461ed [enhancement]: support toggling feature carousel 2024-05-15 21:48:20 -07:00
Kendall Garner 168153b211 [bugfix]: restart timestamp when adding to queue 2024-05-10 12:27:33 -07:00
Kendall Garner c5e8472746 [bugfix]: handle song grid sparse array 2024-05-09 00:14:59 -07:00
Kendall Garner a9e0689619 activate tray on single click 2024-05-08 19:10:46 -07:00
jeffvli 69acbc9a28 Bump to v0.7.1 2024-05-06 22:52:16 -07:00
jeffvli 58484b87f4 Split macOs and Windows builders 2024-05-06 22:31:22 -07:00
jeffvli 6858485e41 Add new languages 2024-05-06 19:56:16 -07:00
Hosted Weblate ebd97c253b Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (586 of 586 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: HanaO00 <lwin24452@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <KosmoMoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Leonardo Pizio <pizio.leonardo@gmail.com>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: 無情天 <kofzhanganguo@126.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/it/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-05-07 04:22:27 +02:00
Hosted Weblate 2c834cd3a8 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: HanaO00 <lwin24452@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <KosmoMoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Leonardo Pizio <pizio.leonardo@gmail.com>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: 無情天 <kofzhanganguo@126.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/it/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-05-07 04:22:27 +02:00
Hosted Weblate dff6d27c23 Translated using Weblate (Spanish)
Currently translated at 100.0% (586 of 586 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: HanaO00 <lwin24452@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <KosmoMoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Leonardo Pizio <pizio.leonardo@gmail.com>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: 無情天 <kofzhanganguo@126.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/it/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-05-07 04:22:27 +02:00
Hosted Weblate 3aed97c139 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: HanaO00 <lwin24452@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <KosmoMoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Leonardo Pizio <pizio.leonardo@gmail.com>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: 無情天 <kofzhanganguo@126.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/it/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-05-07 04:22:27 +02:00
Hosted Weblate 8fe93b4b2e Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: HanaO00 <lwin24452@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <KosmoMoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Leonardo Pizio <pizio.leonardo@gmail.com>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: 無情天 <kofzhanganguo@126.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/it/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-05-07 04:22:27 +02:00
Hosted Weblate c634a07c5d Translated using Weblate (Czech)
Currently translated at 100.0% (586 of 586 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (525 of 585 strings)

Translated using Weblate (French)

Currently translated at 100.0% (570 of 570 strings)

Translated using Weblate (French)

Currently translated at 100.0% (559 of 559 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (585 of 585 strings)

Translated using Weblate (Italian)

Currently translated at 98.6% (576 of 584 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (565 of 566 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (585 of 585 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: HanaO00 <lwin24452@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <KosmoMoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Leonardo Pizio <pizio.leonardo@gmail.com>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: 無情天 <kofzhanganguo@126.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/it/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-05-07 04:22:27 +02:00
Hosted Weblate 0235a569a0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.0% (188 of 586 strings)

Co-authored-by: Cyber Hippie <neves.j@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2024-05-07 04:22:27 +02:00
jeffvli cbe1c878e7 Bump to v0.7.0 2024-05-06 19:21:48 -07:00
Kendall Garner 4afb893ce5 remove stray log 2024-05-05 19:56:35 -07:00
Kendall Garner 645697367d [enhancement]: support serach on settings page 2024-05-05 13:25:05 -07:00
jeffvli 683bb0222c Filter out current playlist on playlist operators 2024-05-02 23:04:57 -07:00
jeffvli ce0c07ebdb Add JSON preview for smart playlist query 2024-05-02 23:04:57 -07:00
jeffvli 785f0ef77f Add inPlaylist and notInPlaylist operators 2024-05-02 23:04:57 -07:00
jeffvli 7bfdbb5d92 Reduce min grid size on remaining list pages 2024-05-02 23:04:31 -07:00
Dylan Lathrum abdb2fee85 Allow smaller album covers in card/poster display 2024-05-02 23:04:31 -07:00
Kendall Garner d1bcd2b2fb [bugfix]: fix jellyfin add to playlist 2024-05-02 18:42:49 -07:00
Vukanović Stefan 297d6f0d2e LrcLib.net expects durations in seconds, not ms (#603) 2024-05-02 14:14:10 +00:00
dependabot[bot] 78ac5af178 Bump ejs in the npm_and_yarn group across 1 directory (#602)
Bumps the npm_and_yarn group with 1 update in the / directory: [ejs](https://github.com/mde/ejs).


Updates `ejs` from 3.1.9 to 3.1.10
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  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>
2024-05-02 14:03:29 +00:00
Kendall Garner 9cd8807a75 [bugfix]: Handle top-level songs for Jellyfin (#553)
* [bugfix]: Handle top-level songs for Jellyfin

If a song is at the top level of a music folder, Jellyfin will not
group that into an album (See https://jellyfin.org/docs/general/server/media/music/).

This PR introduces a few changes:
- Gives tracks with no album ID a special route (`/dummy/${id}`)
- Gives a new route for dummy albums, warning about the error. This is designed to look _like_ the album detail page

* `are are` > `are`

* revert name changes
2024-04-30 03:18:43 +00:00
Kendall Garner 620cca9ce3 Revert "Upgrade dependencies"
This reverts commit 89688455e0.
2024-04-28 21:03:31 -07:00
Kendall Garner 89688455e0 Upgrade dependencies
- mpris-service: migrate to @jellybrick/mpris-service, which has upgraded dependencies and uses class
- i18next-parser: 6 -> 8. This requires a small change to i18next-parser.config.js
2024-04-28 20:50:52 -07:00
Kendall Garner 5259f2401b upgrade framer-motion to 11 2024-04-28 18:59:05 -07:00
Kendall Garner c36f0a055d [enhancement]: parse replaygain from subsonic endpoints where available 2024-04-27 22:20:42 -07:00
Kendall Garner ef87a8c2a7 remove security from config 2024-04-24 07:38:59 -07:00
Kendall Garner 5da68d4243 Use issue templates 2024-04-24 07:37:38 -07:00
Kendall Garner dc95a3c66b [bugfix]: use persistent columns def instead of default merge behavior 2024-04-23 23:25:32 -07:00
Kendall Garner 087ea44737 [enhancement]: use jellyfin 10.9.0 lyrics 2024-04-22 19:44:10 -07:00
Benjamin cb2597d2c8 Implement Navidrome sharing (#575)
* add share item feature

* take care of (mostly) everything

* bugfixes

* allow clicking on notification to open url

* readd the missing modal after router migration

* remove unnecessary extension

---------

Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
2024-04-22 03:03:22 +00:00
Kendall Garner 0d03b66fe5 prevent change of media state with empty queue 2024-04-20 22:01:29 -07:00
Kendall Garner ba531505af [enhancement]: Support toggling Album/Track view for gneres (#591)
* [enhancement]: Support toggling Album/Track view for gneres

The _primary_ purpose of this PR is to enable viewing tracks OR albums for genres.
This has a few requirements:
1. Ability to set default route for genres, **except** when already on song/album page
2. Ability to toggle between album and genre view
3. Fixed refresh for genre ID

Additionally, there was some refactoring:
- Since the *-list-headers had very similar functions for search, export that as a hook instead

* also use hook for album artist

* support switching albumartist tracks/albums

* remove toggle on song/album list, simplify logic
2024-04-20 06:14:31 +00:00
Kendall Garner 595eba152a [jellyfin]: prefer sort name over name 2024-04-19 23:11:26 -07:00
Kendall Garner ebd2f07447 show macOS warning one, don't show artist link if invalid 2024-04-17 22:44:35 -07:00
Kendall Garner 5d6503c1f4 [bugfix]: do not show now playing for duplicate item in play queue 2024-04-17 21:51:39 -07:00
Kendall Garner d03a3a11eb [enhancement]: Support react-router links in Modal (#586) 2024-04-17 14:29:46 +00:00
Kaydax 04b4d92f69 Fix portrait mode detection (#582)
* Fix portrait mode detection

* Revert changes done on playbar
2024-04-17 06:21:49 +00:00
Kendall Garner ec69cc22f9 use clearer separator character 2024-04-14 21:58:25 -07:00
Kendall Garner 19a88fea86 [bodge]: deal with Jellyfin returning dupliate tracks for album query 2024-04-13 16:28:36 -07:00
Kendall Garner 729538d885 [bugfix]: restart synchronized lyrics on repeat one (or track queued multiple times) 2024-04-12 20:52:10 -07:00
Kendall Garner 9f86a8179f fix clipping description, update docker compose sample 2024-04-12 19:44:52 -07:00
Kendall Garner 3976f5e5bf don't assume ref exists 2024-04-12 09:33:48 -07:00
Kendall Garner 90d3fb219d [bugfix]: restart track in queue for web player 2024-04-12 09:29:36 -07:00
Kendall Garner cabd69772e [bugfix]: mantine bodge 2024-04-11 08:25:53 -07:00
Kendall Garner 9339c08777 [bugfix]: handle unclean MPV exit with existing content 2024-04-10 21:18:47 -07:00
Kendall Garner f5e047c7f5 update readme 2024-04-10 20:03:59 -07:00
Kendall Garner f79f9cc79e [bugfix]: deal with broken jellyfin 2024-04-09 22:49:44 -07:00
Kendall Garner c3fcb7487c [bugfix]: fix album artist order and mild race protection 2024-04-09 22:11:29 -07:00
Kendall Garner 15c6ef382a [bugfix]: fix combined title for artist, favoriting on grid pages 2024-04-08 23:15:59 -07:00
Kendall Garner 14086ebc9c improve similar items fallback, make ND album artist for song actually album artist, fix full screen race 2024-04-08 08:49:55 -07:00
Kendall Garner 2257e439a4 [navidrome]: prefer gerArtistInfo higher quality image 2024-04-06 21:36:30 -07:00
Kendall Garner 6824a5db7a [enhancement]: also save fullscreen/maximize 2024-04-06 21:14:05 -07:00
Kendall Garner c0110eff82 [enhancement]: save/restore screen position 2024-04-06 19:05:20 -07:00
Kendall Garner 2c17458fdf [enhancement]: allow copying/opening path in song modal 2024-04-06 16:13:09 -07:00
Kendall Garner c1345802aa bump size cell size 2024-04-03 21:28:27 -07:00
Kendall Garner 197497df05 [enhancement]: Show item details (#573)
* start

* More details, don't show manage server when other modal
2024-04-04 04:19:46 +00:00
Kendall Garner 7bebe286d5 sanitize album artist biography 2024-04-03 07:36:13 -07:00
Kendall Garner 24394fa858 Merge pull request #571 from iiPythonx/dynamicbg
[bugfix]: Add a fallback image to the dynamic background url
2024-04-03 01:54:15 +00:00
iiPython f7c6088cca add a fallback image to the dynamic background url 2024-04-02 12:58:26 -05:00
Kendall Garner 65eca32de3 [bugfix]: do not update mpris status unnecessarily 2024-04-02 08:46:38 -07:00
Kendall Garner ae167e63fd [bugfix]: shared only if owner exists 2024-04-01 22:31:59 -07:00
Kendall Garner ab17ba8add [bugfix]: fix scrobble race conditions 2024-04-01 22:13:06 -07:00
Kendall Garner 2854a91700 [bugfix]: actually implement size column 2024-04-01 20:53:00 -07:00
Kendall Garner 6bc778fa53 [bugfix]: fix smart playlist, do not error when trying to edit playlist as non-admin 2024-03-31 19:34:33 -07:00
Kendall Garner 44fcc33825 [enhancement]: add server menu on Navidrome error page 2024-03-31 17:47:17 -07:00
Kendall Garner e0e967385f Merge pull request #566 from kgarner7/fix-mpv-race-and-make-consistent
[bugfix]: Resolve MPV next/prev race condition
2024-03-31 23:12:03 +00:00
Kendall Garner 8900d8126c [bugfix]: queue all songs on search, consistent sort, clearing
- Previously, the search page would render initial page in one order, but search itself would be different order
This is resolved by having both virtual-table and search-header using listStoreKey
- When double clicking, now enqueue all the songs using the same sort
- Reset the search when clearing
2024-03-31 13:20:01 -07:00
Kendall Garner 65b045df03 [bugfix]: Resolve MPV next/prev race condition
Resolves #536.

With the previous implementation, next/previous would first update
the current queue and then call next/previous. However, since these were
asynchronous calls it was very likely that the second calls would fail
(and a test of adding delay showed that it actually caused a double skip).
This PR resolves this by just removing the prev/next.

Small other fixes:
- setQueue + pause -> setQueue(..., true)
- make MPV and web player have the same behavior for (pause/stop) where appropriate
2024-03-30 21:48:09 -07:00
Kendall Garner 918842e3a5 [bugfix]: use proper check for OS lyric existence 2024-03-30 20:36:49 -07:00
Kendall Garner a3573d4f9a add light theme for non-native titlebar 2024-03-30 14:11:57 -07:00
Kendall Garner 46fdacad81 Make home page modal play button use default behavior 2024-03-27 21:15:23 -07:00
Kendall Garner 67b8c7f1c0 Merge pull request #561 from jeffvli/dependabot/npm_and_yarn/npm_and_yarn-security-group-e0cd778f82
Bump the npm_and_yarn group across 1 directory with 1 update
2024-03-27 06:14:49 +00:00
dependabot[bot] 43f28317f6 Bump the npm_and_yarn group across 1 directory with 1 update
Bumps the npm_and_yarn group with 1 update in the / directory: [express](https://github.com/expressjs/express).


Updates `express` from 4.18.0 to 4.19.2
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.0...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-27 02:11:54 +00:00
dependabot[bot] f61cf8c331 Bump the npm_and_yarn group across 1 directory with 1 update (#557)
Bumps the npm_and_yarn group with 1 update in the / directory: [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware).


Updates `webpack-dev-middleware` from 5.3.1 to 5.3.4
- [Release notes](https://github.com/webpack/webpack-dev-middleware/releases)
- [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v5.3.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.1...v5.3.4)

---
updated-dependencies:
- dependency-name: webpack-dev-middleware
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-27 02:10:24 +00:00
dependabot[bot] 340344b791 Bump the npm_and_yarn group across 1 directory with 1 update (#551)
Bumps the npm_and_yarn group with 1 update in the / directory: [follow-redirects](https://github.com/follow-redirects/follow-redirects).


Updates `follow-redirects` from 1.15.5 to 1.15.6
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-19 06:08:14 +00:00
dependabot[bot] ba1a2d5495 Bump the npm_and_yarn group across 1 directory with 2 updates (#542)
Bumps the npm_and_yarn group with 2 updates in the / directory: [app-builder-lib](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/app-builder-lib) and [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder).


Updates `app-builder-lib` from 24.9.0 to 24.13.3
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/app-builder-lib/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v24.13.3/packages/app-builder-lib)

Updates `electron-builder` from 24.9.0 to 24.13.3
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v24.13.3/packages/electron-builder)

---
updated-dependencies:
- dependency-name: app-builder-lib
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
- dependency-name: electron-builder
  dependency-type: direct:development
  dependency-group: npm_and_yarn-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-19 06:00:54 +00:00
jeffvli a177061f18 Bump to v0.6.1 2024-03-13 00:02:46 -07:00
jeffvli d806ade84c Potentially fix application stuck when Navidrome credential expires (#538) 2024-03-12 23:59:35 -07:00
jeffvli 854b76702b Downgrade to electron v26 (#534) 2024-03-12 23:33:33 -07:00
Hosted Weblate 1b08dfc5a5 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (549 of 549 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (543 of 543 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (519 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: TianMiao <tianmiao.work@foxmail.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/zh_Hans/
Translation: feishin/Translation
2024-03-06 00:55:52 +01:00
Hosted Weblate 60fc552088 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (549 of 549 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (543 of 543 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: TianMiao <tianmiao.work@foxmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2024-03-06 00:55:52 +01:00
Hosted Weblate 86438fdb3d 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
2024-03-06 00:55:51 +01:00
Hosted Weblate 92beae6665 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Persian)

Currently translated at 50.0% (260 of 519 strings)

Added translation using Weblate (Persian)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kaambiz <kambizx@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fa/
Translation: feishin/Translation
2024-03-06 00:55:51 +01:00
Hosted Weblate b110cfb94b 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
2024-03-06 00:55:50 +01:00
Hosted Weblate 08d4e80777 Translated using Weblate (Spanish)
Currently translated at 100.0% (549 of 549 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Spanish)

Currently translated at 100.0% (519 of 519 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
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/es/
Translation: feishin/Translation
2024-03-06 00:55:49 +01:00
Hosted Weblate ba03c19439 Translated using Weblate (Dutch)
Currently translated at 46.6% (242 of 519 strings)

Translated using Weblate (Dutch)

Currently translated at 39.4% (205 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Idris Saklou <idrissaklou@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translation: feishin/Translation
2024-03-06 00:55:49 +01:00
Hosted Weblate 1c6346572b 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
2024-03-06 00:55:48 +01:00
Hosted Weblate b91c715b13 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Polish)

Currently translated at 99.8% (518 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2024-03-06 00:55:48 +01:00
Hosted Weblate f22434a50c Translated using Weblate (Czech)
Currently translated at 100.0% (549 of 549 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (Czech)

Currently translated at 100.0% (519 of 519 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (519 of 519 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (519 of 519 strings)

Co-authored-by: Fjuro <ifjuro@proton.me>
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
2024-03-06 00:55:47 +01:00
Hosted Weblate 2086b57fb2 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
2024-03-06 00:55:47 +01:00
Hosted Weblate 2247ba08ea Translated using Weblate (German)
Currently translated at 98.5% (548 of 556 strings)

Translated using Weblate (German)

Currently translated at 98.5% (548 of 556 strings)

Translated using Weblate (German)

Currently translated at 98.5% (548 of 556 strings)

Translated using Weblate (German)

Currently translated at 93.3% (519 of 556 strings)

Translated using Weblate (German)

Currently translated at 93.3% (519 of 556 strings)

Translated using Weblate (German)

Currently translated at 92.2% (513 of 556 strings)

Translated using Weblate (German)

Currently translated at 92.2% (513 of 556 strings)

Translated using Weblate (German)

Currently translated at 91.5% (509 of 556 strings)

Translated using Weblate (German)

Currently translated at 91.5% (509 of 556 strings)

Translated using Weblate (German)

Currently translated at 91.1% (507 of 556 strings)

Translated using Weblate (German)

Currently translated at 91.1% (507 of 556 strings)

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate (German)

Currently translated at 89.9% (467 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Lokke <accounts.lokke@googlemail.com>
Co-authored-by: Maik <maikguenes2003@gmail.com>
Co-authored-by: Rudi Mentaire <stoertebecker@byom.de>
Co-authored-by: full name <hosted-weblate.5w160@dralias.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2024-03-06 00:55:46 +01:00
jeffvli 5601613c3d Bump to v0.6.0 2024-03-05 15:55:28 -08:00
jeffvli d04d786951 Center auth loading spinner 2024-03-05 15:52:14 -08:00
jeffvli 613bfa7ae6 Various cleanup/fixes 2024-03-05 14:15:32 -08:00
jeffvli a7a5b92011 Adjust server feature naming convention 2024-03-05 14:12:37 -08:00
jeffvli a9315be259 Rename features types file 2024-03-05 14:05:01 -08:00
jeffvli e7b2f30718 Replace songId with albumId on dynamic image check 2024-03-05 00:45:45 -08:00
Kendall Garner 73845a9432 [enhancement]: better version checks for lyrics, Navidrome (#529)
- Actually make serverfeatures partial
- Navidrome: only set multiple structured lyrics if extension exists
- Navidrome/Subsonic: minor type checking of OS extension (Navidrome implementation detail)
- Jellyfin: add separate knob for lyrics. Note, this should also probably be behind some version check...
2024-03-05 00:31:51 -08:00
Benjamin d52d9136b8 [feat] Add a dynamic image option to the fullscreen player (#526)
* Add an option for a dynamic background image in the fullscreen player

* Center the background image and fix some more bugs

* More cleaning up the background image

* Add option for customizable blur amount

* Fix missing translation key for image blur

* Fix dynamic image shifting when player is opened

* Hide image blur size config if dynamic background is disabled

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2024-03-05 00:30:37 -08:00
Kendall Garner a45e7f24e4 [enhancements]: fix carousel, full screen metadata improvements (#524)
* fix carousel, full screen metadata improvements

* Add missing mapped keys on multiple artist

* Remove bg opacity on metadata section

* Improve visibility of currently playing song

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2024-03-04 18:53:00 -08:00
Jeff 742cef3d81 Merge pull request #519 from kgarner7/related-similar-songs
[enhancement]: Make related tab on full screen player useful
2024-03-04 05:29:27 -08:00
Jeff 132b0e173f Merge branch 'development' into related-similar-songs 2024-03-04 05:04:54 -08:00
Jeff f7f3c5fe30 Merge pull request #517 from kgarner7/navidrome-shared-playlists
[enhancement]: Differentiate shared and owner playlists for Navidrome
2024-03-04 02:41:40 -08:00
jeffvli 83b5afb187 Remove ServerType check on shared playlist display 2024-03-04 02:37:37 -08:00
Kendall Garner 237fb91a60 [enhancement]: Differentiate shared and owner playlists for Navidrome
Resolves #368. If Navidrome, post-process the playlist list and separate
into owned and shared (in that order).
2024-03-04 02:29:35 -08:00
Jeff 8265ce48c4 Merge pull request #510 from kgarner7/improve-navidrome-auth
[bugfix]: Check for Navidrome authentication on startup
2024-03-04 02:27:10 -08:00
Jeff bf3431cbc6 Merge pull request #514 from kgarner7/navidrome-version
[enhancement]: Better version checks
2024-03-04 01:49:33 -08:00
Jeff cc6cad1d70 Merge branch 'development' into navidrome-version 2024-03-04 01:49:13 -08:00
jeffvli c8b1e2312a Change smart playlist feature check 2024-03-04 01:44:11 -08:00
jeffvli 84837a6887 Prevent version check from running on every query in Navidrome 2024-03-03 22:16:25 -08:00
jeffvli f1f6ccfd02 Normalize server feature set 2024-03-03 22:15:49 -08:00
Kendall Garner f50d1e0a8c support opacity 0, spellcheck 2024-03-01 19:54:30 -08:00
Kendall Garner 753ca01d41 [bugfix]: fix update rating for items with no data node 2024-02-29 17:28:46 -08:00
jeffvli 960c126283 Fix incorrect album artist sidebar icon 2024-02-28 21:07:50 -08:00
Kendall Garner 94b649fefe don't transform artist/album for fullscreen player 2024-02-26 22:47:17 -08:00
Alberto Rodríguez 28bb699024 Add a pre-defined server for the docker version (#413)
* Moved build to docker stage.

* Do not copy node_modules to the docker image

* Optimize Docker builds

* Lock a predefined server with enviroment variables

* Added a example docker compose file

* Removed useless layer

* Fix error with empty server type

* pass process via preload, use file, strict server check

* remove duplicate content-type

* update readme, docker compose

* bugfix: server lock false, not jellyfin

* fix preload type definition

* fix docker, web server lock check

---------

Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
2024-02-24 06:55:23 +00:00
Kendall Garner 5caf0d439f [enhancement]: Start minimized (#522)
* [enhancement]: support starting minimized

* show window when dock clicked macos
2024-02-23 16:31:17 +00:00
dependabot[bot] 77fa723cf8 Bump the npm_and_yarn group across 2 directories with 1 update (#521)
Bumps the npm_and_yarn group with 1 update in the /. directory: [ip](https://github.com/indutny/node-ip).


Updates `ip` from 1.1.5 to 1.1.9
- [Commits](https://github.com/indutny/node-ip/compare/v1.1.5...v1.1.9)

---
updated-dependencies:
- dependency-name: ip
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-22 03:49:44 +00:00
Kendall Garner 77e220c873 [enhancement]: add codec column for tracks 2024-02-19 23:04:41 -08:00
Kendall Garner 860dd8b499 [enhancement]: add codec column for tracks 2024-02-19 20:34:36 -08:00
Kendall Garner 9113c6cc2e [bugfix]: carousel fixes 2024-02-19 13:55:11 -08:00
Kendall Garner 12d0eca2dd remember that current song can be an object 2024-02-19 10:27:00 -08:00
Kendall Garner 3a116e938e omit song from similar list, handle subsonic error 2024-02-19 10:09:05 -08:00
Kendall Garner f81bea339b don't pass song all the way down 2024-02-19 09:55:37 -08:00
Kendall Garner c947d09615 show nothing if no song exists 2024-02-19 09:01:44 -08:00
Kendall Garner af90d07414 bugfix 2024-02-19 08:56:06 -08:00
Kendall Garner 025124c379 [enhancement]: Make related tab on full screen player useful
Resolves #50. Adds a new set of components for fetching similar songs
from the current playing song. For Jellyfin, use the `/items/{itemId}/similar`
endpoint (may not work well for small libraries), and for Navidrome/Subsonic
use `getSimilarSongs`. _In theory_, this component can be used to get similar
songs anywhere.
2024-02-19 08:53:50 -08:00
Kendall Garner 74075fc374 [bugfix]: remove window clear cache handler in main for MacOS 2024-02-18 17:05:45 -08:00
Kendall Garner dae2f9bd0a [feat]: actually include version checks 2024-02-17 00:57:10 -08:00
jeffvli 9a43ea0e4a Attempt to fix player unresponsive on first start 2024-02-16 22:12:28 -08:00
Kendall Garner 2f105956b9 Improve grid size, language 2024-02-16 21:42:15 -08:00
Kendall Garner ce9c03b0e1 [bugfix]: Macos trusted accessibility (#512)
* [bugfix]: macos trusted accessibility

* update readme
2024-02-17 03:55:57 +00:00
Kendall Garner 1e5d446ced [bugfix]: song list play count -> genre 2024-02-16 13:53:42 -08:00
Kendall Garner b2fce071a9 [bugfix]: Check for Navidrome authentication on startup
Resolves #403.
This PR introduces a startup check for Navidrome that tries a simple API request (/songs) before loading homepage.
If the check fails, Navidrome API will fallback to trying saved password (if available).

Notes:
- It might also be worthwhile to do a periodic poll?
2024-02-16 13:37:49 -08:00
Kendall Garner 20b161ee86 [enhancement]: prreserve current song position when shuffling queue 2024-02-14 22:59:44 -08:00
darkpixlz 6e677d7454 Image Resolution Setting (#492)
* Add customizable resolution for the fullscreen player image

---------

Co-authored-by: iiPython <ben@iipython.dev>
Co-authored-by: Benjamin <iipython@proton.me>
2024-02-13 18:00:59 -08:00
Kendall Garner f796a35f5c [enhancement]: support reordering homepage (#494)
* [enhancement]: support reordering homepage

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2024-02-13 17:56:08 -08:00
Jeff 83d5fee442 Merge pull request #484 from kgarner7/fix-structured-lyrics
[bugfix/enhancement]: Support Navidrome structured lyrics
2024-02-13 16:17:24 -08:00
Jeff eab11658bb Merge pull request #501 from kgarner7/allow-no-mpv
- OOBE default to web player
- Allow mpv to run using PATH env
- Add improved mpv error logging
- Add web player fallback on mpv error
2024-02-13 16:16:01 -08:00
jeffvli b4092c394a Set playback type to WEB by default 2024-02-13 05:50:38 -08:00
jeffvli 9b0c9ba3ac Fallback to web player if mpv fails to run 2024-02-13 02:05:59 -08:00
Kendall Garner e6b01d4e2b [bugfix]: set MPV queue when now or queue is empty 2024-02-13 00:04:28 -08:00
jeffvli fb08502e51 Add mpv path reload and clear functionality 2024-02-12 21:21:17 -08:00
jeffvli 8f4ff9286a Allow deletion on local settings keys 2024-02-12 20:50:50 -08:00
jeffvli dcd130fb6c Refactor mpv log to allow for custom toast 2024-02-12 20:50:09 -08:00
jeffvli 60105103f3 Improve mpv error logging 2024-02-12 20:11:55 -08:00
jeffvli ff4ce89bc9 Remove "disable mpv" setting and desktop requirement 2024-02-12 14:14:08 -08:00
jeffvli eb4d099804 Increase toast duration defaults 2024-02-12 14:04:19 -08:00
jeffvli b69290f9f2 Add listeners and preload for log/toast from main 2024-02-12 14:02:59 -08:00
jeffvli 69f82a9427 Add logger functions and move player functions to feature 2024-02-12 13:58:50 -08:00
jeffvli adf5fc348a Bump electron-log 2024-02-12 13:50:02 -08:00
Kendall Garner f82da2e76b [enhancement]: Support disabling MPV entirely
Supports running Feishin solely using web audio (useful for clients with problems with MPV).
Also moves save/restore queue to utils, as MPV object is now optional
2024-02-11 13:56:29 -08:00
Kendall Garner 8de21a707c Merge pull request #500 from jeffvli/dependabot/npm_and_yarn/npm_and_yarn-security-group-593a984358
Bump the npm_and_yarn group across 2 directories with 2 updates
2024-02-10 09:23:52 +00:00
dependabot[bot] 1f1916f005 Bump the npm_and_yarn group across 2 directories with 2 updates
Bumps the npm_and_yarn group with 2 updates in the /. directory: [semver](https://github.com/npm/node-semver) and [eslint-plugin-compat](https://github.com/amilajack/eslint-plugin-compat).
Bumps the npm_and_yarn group with 1 update in the /release/app directory: [semver](https://github.com/npm/node-semver).


Updates `semver` from 7.3.8 to 7.6.0
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.3.8...v7.6.0)

Updates `eslint-plugin-compat` from 4.1.4 to 4.2.0
- [Release notes](https://github.com/amilajack/eslint-plugin-compat/releases)
- [Changelog](https://github.com/amilajack/eslint-plugin-compat/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amilajack/eslint-plugin-compat/compare/v4.1.4...v4.2.0)

Updates `semver` from 6.3.0 to 6.3.1
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.3.8...v7.6.0)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
- dependency-name: eslint-plugin-compat
  dependency-type: direct:development
  dependency-group: npm_and_yarn-security-group
- dependency-name: semver
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-10 08:43:06 +00:00
Kendall Garner ae8fc6df13 [bugfix]: improve play behavior
- when adding songs to queue, only `play()` if the queue was empty
- when adding next/last to empty queue, behavior should be same as now
2024-02-10 00:38:21 -08:00
Kendall Garner 0a658e3a22 [bugfix]: default go libsecret, support changing secret store (#493)
* [bugfix]: default go libsecret, support changing secret store

* update readme and rename libsecret
2024-02-09 23:20:01 +00:00
Kendall Garner 92478b5ca5 [bugfix]: update mpris volume when set by mpris 2024-02-07 20:51:07 -08:00
Kendall Garner 49cbef729b encode uri component for authorization header 2024-02-07 20:29:29 -08:00
Kendall Garner 73c6ddd116 Merge branch 'development' of github.com:jeffvli/feishin into development 2024-02-04 10:24:24 -08:00
Kendall Garner e3553074a3 [bugfix]: use accent color for cache clearing 2024-02-04 10:23:45 -08:00
lymnyx 29df2a6215 [bugfix/enhancement] Fixes german translations being sentence-case (#491)
* Fixes german translations' case (#490).

* Smaller improvements to german translations.

* Changes to sentenceCasePostProcessor.
2024-02-04 06:47:52 -08:00
Kendall Garner aba7cb302f add navidrome version check for smart playlists 2024-02-03 22:47:57 -08:00
Kendall Garner 46cc1a635f address changes 2024-02-03 21:22:03 -08:00
Kendall Garner 6520a105d2 Merge pull request #489 from lymnyx/mostplayed-bugfix
[bugfix] Fixes route of most played songs on home page
2024-02-04 02:29:16 +00:00
lymnyx 69cb63a8b0 Fixes route of most played songs in home (#434). 2024-02-04 02:27:26 +01:00
Benjamin 1fb7290603 [bugfix] Fix global hotkeys not working on startup (#488)
* Simple one line fix for global hotkeys

* Clean up codebase via default values
2024-02-04 00:37:53 +00:00
Kendall Garner 24bf7ae31f [enhancement/localization]: sort navidrome albums by year, add more language keys 2024-02-03 15:05:33 -08:00
Benjamin 86a93866d0 [enhancement] Add a button size setting (#486)
* Add a button size setting

* Reduce setting size and add px suffix

* Looks like I don't need || inside of control-settings

* Update translation

* Bump settings version to 7
2024-02-03 21:22:26 +00:00
lymnyx 933573b57f Order artist's Top Songs by play count (#410). (#487) 2024-02-03 21:21:15 +00:00
Jeff ccb0e14e48 Merge pull request #450 from kgarner7/more-metadata
[feature]: Show album comment, Last.fm/MusicBrainz links
2024-02-02 14:56:46 -08:00
jeffvli aca6826221 Refactor artist biography to use spoiler 2024-02-02 01:39:19 -08:00
jeffvli 095edfd49f Add custom spoiler component 2024-02-02 01:38:58 -08:00
Kendall Garner 73cd647486 os lyrics 2024-02-01 23:53:10 -08:00
Kendall Garner 9e4664a54c Merge branch 'development' into fix-structured-lyrics 2024-02-01 22:13:41 -08:00
Kendall Garner efa0d9ec35 [enhancement]: larger player buttons, clearer random icon 2024-02-01 20:59:00 -08:00
Kendall Garner 9720fcc202 add server info query 2024-02-01 08:17:31 -08:00
jeffvli 7c25d12639 Enable external links by default 2024-02-01 04:14:02 -08:00
jeffvli 3daa1aef4b Normalize section spacing on album/artist detail pages 2024-02-01 04:06:56 -08:00
jeffvli 6aba41c3d9 Add spoiler UI component 2024-02-01 03:58:36 -08:00
Kendall Garner eff1cee6a3 [bugfix]: Fix repeated track scrobbling (#480)
* [bugfix]: Fix repeated track scrobbling

This commit fixes scrobbling tracks that are repeated in the queue (either due
to a REPEAT_ONE or just enqueued multiple times). There are two extra cases:

1. The current player changes. The player alternates from 1 -> 2 -> 1 whenever playback
finishes normally, so this is a sort of epoch that can be used to detect both repeat one
and track being enqueued multiple times.
2. The current index changes. The player gets set back to 1 in a variety of cases (most often
previous/next), so the check in (1) is not enough. However, the index changing will help identify
that this is a new song.

* use unique id instead
2024-02-01 04:12:39 +00:00
Kendall Garner 9995b2e774 [enhancement]: support clearing query and http cache (#475)
* [enhancement]: support clearing query and http cache

  - Adds the ability to invalidate all queries (useful for forcing refresh, and clearing lyrics which are cached forever)
  - [Desktop only] adds the ability to clear the Electron HTTP cache (e.g. cached images)

* use clearer language

* move cache settings to general
2024-01-31 06:27:56 +00:00
Kendall Garner 04a468f8c9 [bugfix]: fetch higher resolution artist images from Navidrome 2024-01-28 20:01:57 -08:00
Kendall Garner afb8510cd7 [enhancement]: increase padding for synchronizer lyric container 2024-01-28 19:42:23 -08:00
Kendall Garner 8287347f91 expose more mpris metadata 2024-01-28 14:26:02 -08:00
Kendall Garner 5cc2276781 [bugfix]: web player edge cases
Two bugs addressed in response to Safari changes:
1. Only handle `onEnded` for real streams, preventing `autoNext()` spam when the last track finishes
2. `.play()` is not necessarily a safe operation (if empty wave was started, can cause exception later). Catch this exception and discard it. This also only occurred when playing the last track
2024-01-28 01:50:51 -08:00
Kendall Garner 47ce0ed47b [bugfix]: fix repeat one with shuffle and one track 2024-01-28 00:49:17 -08:00
Kendall Garner f467a85a86 [bugfix]: use proper language key for lyrics size 2024-01-27 10:07:10 -08:00
Kendall Garner 097211954c [enhancement]: default to space for play/pause toggle 2024-01-27 08:15:13 -08:00
Kendall Garner 0cdfc64023 [bugfix]: allow Jellyfin to have empty password on edit 2024-01-26 22:54:50 -08:00
Kendall Garner bc7f4a5722 [bugfix]: Fix safari audio context (#471)
* test 3

* comments

* [bugfix]: SAFARI WHY. Use GainNode volume instead for volume control

* force vercel refresh?

* Revert "force vercel refresh?"

This reverts commit af31f38e03.

* move volume scaling calculation to setGain
2024-01-27 01:10:34 +00:00
Kendall Garner 8e7356fa7b Merge pull request #473 from kgarner7/fix-playlist-add-message
[bugfix]: Fix add to playlist success message
2024-01-27 00:51:00 +00:00
Kendall Garner bbf59a4942 [bugfix]: Fix add to playlist success message
The prior code used `form.addToPlaylist`, not `.success`. Also fixes English pluralization and
uses the correct `entity.track` as opposed to `entity.song` for other languages (I am not sure
if the en syntax could be applied to other languages, so I will just leave pluralization as-is
for now).
2024-01-25 23:58:21 -08:00
Kendall Garner 45e589fbb1 [enhancement]: use ColorInput for text rgb selection 2024-01-24 23:39:50 -08:00
Kendall Garner 527e6a76b5 [bugfix]: disable play button when queue is empty 2024-01-24 21:35:58 -08:00
Kendall Garner 362a88b6bc [bugfix]: fix race condition for opening play queue/playlist details 2024-01-24 21:15:11 -08:00
Kendall Garner 26102bd70a [bugfix]: do not change scroll position when focus changes 2024-01-24 21:05:26 -08:00
Kendall Garner 5f1d0a3b5e [bugfix]: Validate audio sample range, catch AudioContext error (#470) 2024-01-24 20:36:20 -08:00
Kendall Garner 3bca85b3a8 Merge pull request #435 from kgarner7/fix-init-timing
[bugfix]: defer restore queue until mpv exists
2024-01-23 05:18:20 +00:00
Kendall Garner 61ecd3253e Merge pull request #209 from jeffvli/fix/#202
Add frame to macOS native window bar
2024-01-23 05:07:10 +00:00
Kendall Garner 5e9ef9f23f use type, remove console 2024-01-22 18:52:14 -08:00
David Rappo c8701d1da4 Fixed incorrect label for album sort by release date (#458) 2024-01-22 10:09:15 -08:00
Kendall Garner b3a9e7ccba default theme dark 2024-01-21 22:58:10 -08:00
Kendall Garner 33972c2a83 titlebar switching 2024-01-21 22:47:59 -08:00
Kendall Garner f0f2f54e5a Merge remote-tracking branch 'upstream/development' into origin/fix/#202 2024-01-21 22:22:04 -08:00
Kendall Garner 99a188a62d Merge pull request #461 from jeffvli/dependabot/npm_and_yarn/follow-redirects-1.15.5
Bump follow-redirects from 1.15.2 to 1.15.5
2024-01-22 05:29:51 +00:00
Kendall Garner 1760e14ac5 Merge pull request #464 from jeffvli/dependabot/npm_and_yarn/release/app/electron-25.8.4
Bump electron from 25.3.0 to 25.8.4 in /release/app
2024-01-22 05:28:54 +00:00
Kendall Garner 888b5f9e90 Merge pull request #463 from jeffvli/dependabot/npm_and_yarn/postcss-8.4.33
Bump postcss from 8.4.27 to 8.4.33
2024-01-22 05:28:46 +00:00
Kendall Garner 5f099bedc2 Merge pull request #462 from jeffvli/dependabot/npm_and_yarn/babel/traverse-7.23.7
Bump @babel/traverse from 7.22.19 to 7.23.7
2024-01-22 05:28:39 +00:00
Kendall Garner b2bb2f33a9 Merge pull request #460 from jeffvli/dependabot/npm_and_yarn/zod-3.22.3
Bump zod from 3.21.4 to 3.22.3
2024-01-22 05:28:30 +00:00
dependabot[bot] f169fc7f3b Bump follow-redirects from 1.15.2 to 1.15.5
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.2 to 1.15.5.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.2...v1.15.5)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 04:41:16 +00:00
Kendall Garner a970f967bc Merge pull request #459 from jeffvli/dependabot/npm_and_yarn/axios-1.6.0
Bump axios from 1.5.1 to 1.6.0
2024-01-22 04:40:18 +00:00
dependabot[bot] 7c0320d69a Bump electron from 25.3.0 to 25.8.4 in /release/app
Bumps [electron](https://github.com/electron/electron) from 25.3.0 to 25.8.4.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v25.3.0...v25.8.4)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 04:33:28 +00:00
dependabot[bot] 8fcfbce0d5 Bump postcss from 8.4.27 to 8.4.33
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.27 to 8.4.33.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.27...8.4.33)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 04:33:15 +00:00
dependabot[bot] 432a128b85 Bump @babel/traverse from 7.22.19 to 7.23.7
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.19 to 7.23.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.7/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 04:33:13 +00:00
dependabot[bot] 85e889a414 Bump zod from 3.21.4 to 3.22.3
Bumps [zod](https://github.com/colinhacks/zod) from 3.21.4 to 3.22.3.
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Changelog](https://github.com/colinhacks/zod/blob/master/CHANGELOG.md)
- [Commits](https://github.com/colinhacks/zod/compare/v3.21.4...v3.22.3)

---
updated-dependencies:
- dependency-name: zod
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 04:33:07 +00:00
dependabot[bot] 4df5c555b0 Bump axios from 1.5.1 to 1.6.0
Bumps [axios](https://github.com/axios/axios) from 1.5.1 to 1.6.0.
- [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.5.1...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 04:33:03 +00:00
marksdestiny 372b96a349 Improve the playback speed control (#437)
* Change playback speed selector to slider

* Improve playback speed bar

Display BPM
Improve style
Add markers

* Improve playback speed slider style
2024-01-21 20:06:46 -08:00
SlyFabi dcccccea2f Use startIndex in Jellyfin getPlaylistSongList (#449) 2024-01-21 19:46:34 -08:00
Leonardo Salgueiro 2095ff6ab9 Update scrobble-settings.tsx (#440) 2024-01-21 19:43:09 -08:00
Tarulia a0b761c9ac AppImage: Set proper categories on desktop entry (#430) 2024-01-21 19:41:23 -08:00
Kendall Garner ea67a18962 include lastfm/mbz links 2024-01-15 22:10:50 -08:00
Kendall Garner 5516daab6e enable comments, safer note 2024-01-15 20:46:06 -08:00
jeffvli 2f28cb07bc Reverse workflow changes 2024-01-14 08:32:33 -08:00
jeffvli 21cd657f0c Temporarily set releaseType to release 2024-01-14 08:18:49 -08:00
jeffvli 1ef7968834 Test electron builder action 2024-01-14 08:11:09 -08:00
jeffvli 925b1b4f68 Add release publish builds 2024-01-14 07:51:53 -08:00
jeffvli e7c665b0a0 Fix arm64 build command 2024-01-14 07:42:37 -08:00
jeffvli 245213d08a Remove unused rpm build target 2024-01-14 07:35:32 -08:00
Kendall Garner c5e08b643d [bugfix]: defer restore queue until mpv exists 2024-01-06 19:24:29 -08:00
jeffvli 960427fce8 Remove deb 2023-12-13 20:33:44 -08:00
jeffvli 118a9f3257 Separate regular and arm64 build 2023-12-13 20:32:03 -08:00
jeffvli 971bfe3823 Bump to v0.5.3 2023-12-13 19:40:51 -08:00
jeffvli 7765f14110 Add rpm and deb build targets 2023-12-13 19:39:06 -08:00
jeffvli 36b465504f Add arm64 linux build 2023-12-13 19:38:36 -08:00
jeffvli 7b639b45f7 Add new translations 2023-12-13 18:19:24 -08:00
Hosted Weblate 85d9162b12 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (519 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate 36670b330f Translated using Weblate (Swedish)
Currently translated at 52.6% (273 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mattias <mattiasghodsian@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sv/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate 9c380a8241 Translated using Weblate (French)
Currently translated at 99.4% (516 of 519 strings)

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/fr/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate c26820ee82 Translated using Weblate (Dutch)
Currently translated at 35.8% (186 of 519 strings)

Translated using Weblate (Dutch)

Currently translated at 32.3% (168 of 519 strings)

Translated using Weblate (Dutch)

Currently translated at 15.2% (79 of 519 strings)

Added translation using Weblate (Dutch)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Idris Saklou <idrissaklou@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate dccd6afc3d Translated using Weblate (Italian)
Currently translated at 99.0% (514 of 519 strings)

Translated using Weblate (Italian)

Currently translated at 96.5% (501 of 519 strings)

Co-authored-by: Aurora <arci@anche.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: NicKoehler <grillinicola@proton.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate c6a520b0d7 Translated using Weblate (Polish)
Currently translated at 99.8% (518 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate 1f4f3a5497 Translated using Weblate (Czech)
Currently translated at 100.0% (519 of 519 strings)

Co-authored-by: Fjuro <ifjuro@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate 58d04b3126 Translated using Weblate (German)
Currently translated at 88.8% (461 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Maik <maikguenes2003@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Hosted Weblate fcac4a5547 Translated using Weblate (Portuguese (Brazil))
Currently translated at 28.3% (147 of 519 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2023-12-13 09:28:56 +01:00
Kendall Garner c05b474827 fix navi null date (#408) 2023-12-13 00:28:53 -08:00
mcneb10 a8814d3e8a Fix 'undefined' in window title when song has no artist name (#402) 2023-12-05 19:05:08 -08:00
Kendall Garner 3f9cdab450 convert value to number on set (#390) 2023-12-04 20:20:19 -08:00
jeffvli 1d2e9484d8 Bump node-abi version 2023-11-18 01:49:00 -08:00
jeffvli f5ec294e0c Add new languages 2023-11-18 01:32:59 -08:00
jeffvli 0beef2a0b7 Bump electron builder version 2023-11-18 01:30:19 -08:00
Hosted Weblate 86209b6272 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (518 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (518 of 518 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kaiyang Wu <self@origincode.me>
Co-authored-by: kare-Udon <laoliu735@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate b32afc0e49 Translated using Weblate (Serbian)
Currently translated at 100.0% (518 of 518 strings)

Added translation using Weblate (Serbian)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ilija <zojka2g@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sr/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate 58c4ab4a67 Translated using Weblate (Swedish)
Currently translated at 43.4% (225 of 518 strings)

Added translation using Weblate (Swedish)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mattias <mattiasghodsian@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sv/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate bcbd169507 Translated using Weblate (French)
Currently translated at 94.9% (492 of 518 strings)

Translated using Weblate (French)

Currently translated at 94.2% (488 of 518 strings)

Translated using Weblate (French)

Currently translated at 94.2% (488 of 518 strings)

Translated using Weblate (French)

Currently translated at 90.3% (468 of 518 strings)

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/fr/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate 55a4e74118 Translated using Weblate (Spanish)
Currently translated at 100.0% (518 of 518 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate e4c449d6de Translated using Weblate (Italian)
Currently translated at 96.1% (498 of 518 strings)

Translated using Weblate (Italian)

Currently translated at 96.1% (498 of 518 strings)

Co-authored-by: Aurora <arci@anche.no>
Co-authored-by: CraftWorks <thelonegamer87@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate aa5004c866 Translated using Weblate (Polish)
Currently translated at 98.6% (511 of 518 strings)

Translated using Weblate (Polish)

Currently translated at 98.6% (511 of 518 strings)

Co-authored-by: 7Adrian <7adrian.mail@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate a1aa5f323c Translated using Weblate (Czech)
Currently translated at 100.0% (518 of 518 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (518 of 518 strings)

Added translation using Weblate (Czech)

Co-authored-by: Fjuro <ifjuro@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate 92f91be650 Translated using Weblate (Japanese)
Currently translated at 100.0% (518 of 518 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: aorinngoDo <aorinngo@email.cz>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate 419462b22b Translated using Weblate (Russian)
Currently translated at 72.2% (374 of 518 strings)

Translated using Weblate (Russian)

Currently translated at 72.0% (373 of 518 strings)

Translated using Weblate (Russian)

Currently translated at 72.0% (373 of 518 strings)

Co-authored-by: Arseniy <_senyaa@tutanota.com>
Co-authored-by: Gitized <s.v.lazarev.89@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate 22e31a7b09 Translated using Weblate (German)
Currently translated at 87.0% (451 of 518 strings)

Translated using Weblate (German)

Currently translated at 87.0% (451 of 518 strings)

Translated using Weblate (German)

Currently translated at 62.7% (325 of 518 strings)

Translated using Weblate (German)

Currently translated at 62.7% (325 of 518 strings)

Translated using Weblate (German)

Currently translated at 59.6% (309 of 518 strings)

Translated using Weblate (German)

Currently translated at 59.6% (309 of 518 strings)

Translated using Weblate (German)

Currently translated at 56.9% (295 of 518 strings)

Translated using Weblate (German)

Currently translated at 56.9% (295 of 518 strings)

Translated using Weblate (German)

Currently translated at 55.4% (287 of 518 strings)

Translated using Weblate (German)

Currently translated at 55.4% (287 of 518 strings)

Translated using Weblate (German)

Currently translated at 53.8% (279 of 518 strings)

Translated using Weblate (German)

Currently translated at 53.8% (279 of 518 strings)

Translated using Weblate (German)

Currently translated at 1.9% (10 of 518 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobayashi <kobayashi90@protonmail.ch>
Co-authored-by: Rudi Mentaire <stoertebecker@byom.de>
Co-authored-by: ThetaDev <t.testboy@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
Hosted Weblate dce0284e0b Translated using Weblate (Portuguese (Brazil))
Currently translated at 23.5% (122 of 518 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 22.5% (117 of 518 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 13.3% (69 of 518 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2023-11-18 10:18:08 +01:00
jeffvli 2afe7e8920 Bump to v0.5.2 2023-11-18 01:17:57 -08:00
jeffvli 9ca364dd0e Fix title case transformer 2023-11-17 02:03:01 -08:00
jeffvli ccd8d2b6b0 Add network error catch 2023-11-16 23:35:26 -08:00
jeffvli fdfbad68e2 Fix app single instance lock (#385) 2023-11-16 23:29:19 -08:00
jeffvli 48a529dd51 Bump electron to v27.1.0 (#383) 2023-11-16 10:17:39 -08:00
jeffvli bc40f93b59 Fix translation titlecase for accented characters (#357) 2023-11-12 03:46:12 -08:00
doggo cf544bea61 Fixed incorrect docker command argument (#365) 2023-11-12 03:40:38 -08:00
Samuli Piipponen f24cf5a928 Fix Discord status with no Artists (#359) 2023-11-12 03:40:28 -08:00
Kendall Garner 11af31c539 [bugfix]: correct text for albumDetail (#376) 2023-11-12 03:40:17 -08:00
jeffvli adc09e6bbf Bump to v0.5.1 2023-11-02 11:41:05 -07:00
jeffvli ba20dc0972 Add languages to config
- Spanish
- German
- French
- Italian
- Japanese
- Russian
- Portugese
- Polish
- Chinese (simplified)
2023-11-02 11:37:24 -07:00
Hosted Weblate 999b6afd0e Added translation using Weblate (Norwegian Bokmål)
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-11-02 19:33:32 +01:00
Hosted Weblate bf0cd0e76f Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (518 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (518 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (517 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (518 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 95.5% (495 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 92.8% (481 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 91.5% (474 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.7% (465 of 518 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kaiyang Wu <self@origincode.me>
Co-authored-by: kare-Udon <laoliu735@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2023-11-02 19:33:32 +01:00
Hosted Weblate f98950fe19 Added translation using Weblate (Chinese (Traditional))
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kaiyang Wu <self@origincode.me>
2023-11-02 19:33:32 +01:00
Hosted Weblate 4e58feedd0 Translated using Weblate (English)
Currently translated at 100.0% (518 of 518 strings)

Co-authored-by: 7Adrian <7adrian.mail@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2023-11-02 19:33:32 +01:00
Hosted Weblate 50aa3960e6 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Chinese (Simplified))

Currently translated at 89.5% (464 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 56.7% (294 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 51.9% (269 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 51.1% (265 of 518 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 52.0% (265 of 509 strings)

Co-authored-by: Darwin <daerwendeshu@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: kare-Udon <laoliu735@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 5a821bf5ce Translated using Weblate (French)
Currently translated at 77.2% (393 of 509 strings)

Translated using Weblate (French)

Currently translated at 77.0% (392 of 509 strings)

Translated using Weblate (French)

Currently translated at 68.7% (350 of 509 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <KosmoMoustache@users.noreply.hosted.weblate.org>
Co-authored-by: KosmoMoustache <hosted.weblate.org@kosmo.ovh>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 123c9795dc Translated using Weblate (Spanish)
Currently translated at 100.0% (518 of 518 strings)

Translated using Weblate (Spanish)

Currently translated at 99.8% (517 of 518 strings)

Translated using Weblate (Spanish)

Currently translated at 99.2% (514 of 518 strings)

Translated using Weblate (Spanish)

Currently translated at 88.6% (459 of 518 strings)

Translated using Weblate (Spanish)

Currently translated at 88.4% (458 of 518 strings)

Translated using Weblate (Spanish)

Currently translated at 88.4% (458 of 518 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff <jeffvictorli@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 6ac0b8734a Translated using Weblate (Italian)
Currently translated at 94.2% (488 of 518 strings)

Translated using Weblate (Italian)

Currently translated at 5.5% (29 of 518 strings)

Translated using Weblate (Italian)

Currently translated at 5.0% (26 of 518 strings)

Translated using Weblate (Italian)

Currently translated at 4.2% (22 of 518 strings)

Added translation using Weblate (Italian)

Co-authored-by: Aurora <arci@anche.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 8f45d01d00 Translated using Weblate (Polish)
Currently translated at 98.8% (512 of 518 strings)

Translated using Weblate (Polish)

Currently translated at 83.2% (431 of 518 strings)

Translated using Weblate (Polish)

Currently translated at 83.2% (431 of 518 strings)

Translated using Weblate (Polish)

Currently translated at 76.2% (395 of 518 strings)

Translated using Weblate (Polish)

Currently translated at 74.6% (380 of 509 strings)

Translated using Weblate (Polish)

Currently translated at 46.5% (237 of 509 strings)

Co-authored-by: 7Adrian <7adrian.mail@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff <jeffvictorli@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 809f2683a2 Translated using Weblate (Japanese)
Currently translated at 98.6% (511 of 518 strings)

Translated using Weblate (Japanese)

Currently translated at 97.6% (506 of 518 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff <jeffvictorli@gmail.com>
Co-authored-by: aorinngoDo <aorinngo@email.cz>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 8e0ef96596 Translated using Weblate (Russian)
Currently translated at 36.9% (188 of 509 strings)

Translated using Weblate (Russian)

Currently translated at 18.0% (92 of 509 strings)

Added translation using Weblate (Russian)

Co-authored-by: Arseniy <_senyaa@tutanota.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate f74c2bc4e2 Translated using Weblate (English)
Currently translated at 100.0% (518 of 518 strings)

Translated using Weblate (English)

Currently translated at 100.0% (509 of 509 strings)

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff <jeffvictorli@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 8e8380854e Translated using Weblate (German)
Currently translated at 1.3% (7 of 518 strings)

Added translation using Weblate (German)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobayashi <kobayashi90@protonmail.ch>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
Hosted Weblate 0a48add9f4 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Portuguese (Brazil))

Currently translated at 3.0% (16 of 518 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 2.5% (13 of 518 strings)

Added translation using Weblate (Portuguese (Brazil))

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2023-11-02 03:58:29 +01:00
jeffvli b05d532941 Add missing translation keys to sidebar 2023-11-01 05:40:42 -07:00
jeffvli d517afdfd3 Set fullscreen player text shadow to css var 2023-11-01 04:00:58 -07:00
jeffvli 63e441429e Set most played to display songs on Jellyfin (#324) 2023-11-01 03:57:30 -07:00
jeffvli c46fa75266 Add imageSize parameter to song list hook 2023-11-01 03:51:03 -07:00
jeffvli fd851714ae Add missing translation keys to list filters 2023-11-01 03:32:28 -07:00
jeffvli 364f53e124 Increase sidebar image scale from 300px -> 450px 2023-10-31 22:03:48 -07:00
jeffvli 9756ed2d27 Fix translation key 2023-10-31 22:03:48 -07:00
Kendall Garner 6bd836fad0 [bugfix]: Remove setting path in attempt to bypass bug (#344)
* Remove setting path in attempt to bypass bug
2023-10-31 22:02:34 -07:00
Hosted Weblate 327fa2b02f Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Chinese (Simplified))

Currently translated at 51.7% (263 of 508 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 51.7% (263 of 508 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 51.7% (263 of 508 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 15.7% (80 of 508 strings)

Added translation using Weblate (Chinese (Simplified))

Co-authored-by: Darwin <daerwendeshu@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ken <kenxu2022@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/zh_Hans/
Translation: feishin/Translation
2023-11-01 00:45:28 +01:00
Hosted Weblate 88922766db Translated using Weblate (French)
Currently translated at 67.9% (345 of 508 strings)

Translated using Weblate (French)

Currently translated at 66.9% (340 of 508 strings)

Translated using Weblate (French)

Currently translated at 50.0% (254 of 508 strings)

Translated using Weblate (French)

Currently translated at 49.6% (252 of 508 strings)

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (French)

Currently translated at 49.2% (250 of 508 strings)

Added translation using Weblate (French)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <hosted.weblate.org@kosmo.ovh>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2023-11-01 00:45:28 +01:00
Hosted Weblate f5b185f5f0 Translated using Weblate (Spanish)
Currently translated at 82.0% (417 of 508 strings)

Added translation using Weblate (Spanish)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2023-11-01 00:45:28 +01:00
Hosted Weblate ce08a70d89 Translated using Weblate (Polish)
Currently translated at 16.5% (84 of 508 strings)

Added translation using Weblate (Polish)

Co-authored-by: FaboThePlayer <fabianszafranski@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mistify <fabianszafranski@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2023-11-01 00:45:28 +01:00
Hosted Weblate b635eb20cf Translated using Weblate (Japanese)
Currently translated at 99.8% (507 of 508 strings)

Added translation using Weblate (Japanese)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: aorinngoDo <aorinngo@email.cz>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translation: feishin/Translation
2023-11-01 00:45:28 +01:00
Hosted Weblate 9b0fad6742 Translated using Weblate (English)
Currently translated at 100.0% (508 of 508 strings)

Translated using Weblate (English)

Currently translated at 100.0% (508 of 508 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff <jeffvictorli@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2023-11-01 00:45:28 +01:00
jeffvli 401912a70c Fix translation keys on full screen player 2023-10-31 04:17:15 -07:00
jeffvli cd3ec158d3 Fix opacity on fullscreen player queue 2023-10-31 04:16:46 -07:00
jeffvli d51ca37e1b Bump to v0.5.0 2023-10-31 03:10:51 -07:00
jeffvli 9d8dcc7ade Add weblate notice 2023-10-31 00:24:29 -07:00
Jeff 8430b1ec95 Add localization support (#333)
* Add updated i18n config and en locale
2023-10-30 19:22:45 -07:00
Martin Pauli 11863fd4c1 Fix clear rating hotkey (#338) 2023-10-30 18:50:48 -07:00
Nicholas Malcolm cf9c7e2640 Build docker container for arm (#336)
* Build all supported container platforms

* Remove less popular platforms
2023-10-30 18:50:21 -07:00
Kendall Garner 9d780e0342 [bugfix]: prevent default (#334)
* [bugfix]: prevent default on rating
2023-10-28 21:10:52 -07:00
Kendall Garner 4ec981df83 [bugfix/feature]: Improve ratings (#332)
* [bugfix/feature]: Improve ratings

Fix: add preventDefault/stopPropagation to prevent scrolling to top in queue
Feat: instead of double click for clear, click on same value
2023-10-28 20:00:01 -07:00
jeffvli e5564c2ac2 Add additional dependencies to linux build (#320) 2023-10-28 16:51:07 -07:00
Martin Pauli 7a580c2c65 Add favorite hotkey options (#326)
* Add favorite hotkey options

* Update wording

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2023-10-27 18:22:16 -07:00
jeffvli ac84088c69 Set owner field edit to Navidrome only (#327) 2023-10-26 16:42:21 -07:00
jeffvli 3c2e4d40ec Update play button for dynamic theme 2023-10-23 15:45:47 -07:00
jeffvli fdff79496a Set pause status on last track end (#291) 2023-10-23 09:02:48 -07:00
jeffvli ccfadda729 Add play count to jellyfin album sort (#324) 2023-10-23 08:37:04 -07:00
jeffvli f21b8d6bbd Update base button styles
- Use brightness filter for hover/focus styles
- Re-add default active style
2023-10-23 08:24:23 -07:00
jeffvli 244c00c4c6 Add discord rich presence (#72) 2023-10-23 06:58:39 -07:00
Kendall Garner 2664a80851 Support changing playback rate (#275)
* initial idea for playback rate

* Add transparency to dropdown

* Move playback speed component to right controls

* Set mpv speed on startup

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-10-22 17:47:44 -07:00
Kendall Garner 742b13d65e [Feature] Support changing accent/primary color (#282)
* [Feature] Support changing accent/primary color

- adds color picker to settings with five swatches (blue default, yellow green and red imported from sonixd, purple new)
- changing color will change the appropriate css variable

* Remove hover styles that use an alternate primary

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-10-22 17:46:28 -07:00
jeffvli 8dcd49d574 Fix add to playlist from artist page (#296) 2023-10-22 16:18:55 -07:00
jeffvli 02c8cbcad6 Revert jellyfin getPlaylistList implementation (#272) 2023-10-22 16:00:41 -07:00
jeffvli 86fb52f6d4 Fix current song row when queue is empty 2023-10-22 15:57:15 -07:00
Kendall Garner 452ef783f2 [bugfix/feat]: always fetch artist image for Navidrome (#317)
* [bugfix/feat]: always fetch artist image for Navidrome

* Add error fallback to library header image

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-10-22 15:46:48 -07:00
Kendall Garner 74cab01013 [feature]: Support using system fonts (#304)
* [feature]: Support using system fonts

Uses the **experimental** queryLocalFonts API, when prompted, to get the fonts and do CSS.
Resolves #270 and #288 (by proxy)

Caveats/notes:
- This is experimental, and is only supported by Chrome/Chromium/Edgeium (see https://caniuse.com/?search=querylocalfonts)
- As far as I can tell, the only way to dynamically change the font (shown in https://wicg.github.io/local-font-access/#example-style-with-local-fonts) was by DOM manipulation; css variables did not seem to work
- This shows **all** fonts, including their variants (bold/italic/etc); given that the style names could be localized, not sure of a way to parse this (on my system, for instance, I had 859 different combinations)
- I made fonts a separate top-level setting because it was easier to manipulate without causing as many rerenders; feel free to put that back

* add permission chec

* add electron magic to support custom font

* restrict content types
2023-10-22 15:25:17 -07:00
Kendall Garner e6ed9229c2 [bugfix]: fix queue offset when removing tracks (#301)
* [bugfix]: fix queue offset when removing tracks

* Fix song index numbers when removing songs

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-10-22 15:21:31 -07:00
jeffvli 3a144ab821 Fix query editor not scrolling (#322) 2023-10-22 15:09:48 -07:00
jeffvli 913e89b01b Set column defs on play queue to use correct row index 2023-10-19 04:33:09 -07:00
jeffvli 768a88de8f Fix row refresh on status change for current song 2023-10-19 03:37:17 -07:00
jeffvli 8e2a107d4a Fix className clash on current song 2023-10-19 03:36:16 -07:00
jeffvli e77efcf836 Add artist name to window title 2023-10-18 20:49:50 -07:00
jeffvli 818f155993 Hide playing icon if player is paused 2023-10-18 19:55:57 -07:00
jeffvli b28fe4cbc9 Convert play icon from base64 to svg 2023-10-18 19:51:55 -07:00
Kendall Garner 8a53fab751 add more emphasis to current song (#283)
* add more emphasis to current song

* add css indicator (rivolumelineup)

* don't use absolute position, support album track number

* Respect order of set-queue function (fix race condition)

* Fix table row actions button on album detail and play queue

* Fix album detail table customizations

* Bump to v0.4.1

* Fix opacity mask for unsynced lyrics container

* Separate sidebar icons to new component

- Fixes react render issue

* Add app focus hook

* Remove css play image

* Add player status as cell refresh condition for queue

* Add current song images

* Add current song styles for all song tables

* Revert row index cell width

* Remove animated svg on browser

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2023-10-18 18:32:11 -07:00
Kendall Garner 9964f95d5d [Remote] Full PWA support, misc bugfixes (#280)
- Fix setting remote port properly
- Add web worker support (so it can be installed as an "app")
- build fixes/removing stray console.log
2023-10-18 10:49:09 -07:00
Kendall Garner fe298d3232 Reset Carousel position on data refresh (#303)
* Reset Carousel position on data refresh

* add refresh for all carousels
2023-10-18 10:47:55 -07:00
Kendall Garner 03e582f301 [feature]: support running feishin on custom path (#307)
* [feature]: support running feishin on custom path

* add details in readme
2023-10-17 22:10:53 -07:00
Kendall Garner d7b3d5c0bd [bugfix]: do not duplicate tracks when adding to multiple playlists (#300) 2023-10-17 16:11:14 -07:00
Kendall Garner 5fdf4c06f9 properly implement Jellyfin getSongDetail (#298) 2023-10-17 16:05:44 -07:00
TacoCake c7aa5d09c9 In the fullscreen player use dynamic resolution for the main image (#290)
* In the fullscreen player use dynamic resolution for the main image

* Use ceil instead of round

* Add types and lint

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2023-10-17 06:47:50 -07:00
Kendall Garner f4f73289c9 [bugfix]: remove ignore CORS/SSL switches from web version (#305) 2023-10-17 06:21:36 -07:00
Lily Rose ac7ec133db Replace hardcoded Jellyfin authentication DeviceId to include hostname and username (#312) 2023-10-17 06:21:15 -07:00
Kendall Garner 1a948ab86b fix artist discography year filter (#299) 2023-10-17 06:05:36 -07:00
Kendall Garner f6667a39a0 fix toggle replay (#292) 2023-10-17 05:49:29 -07:00
jeffvli cbeb4ab7d8 Separate sidebar icons to new component
- Fixes react render issue
2023-10-17 05:46:42 -07:00
jeffvli 3675146f1f Fix opacity mask for unsynced lyrics container 2023-10-07 19:58:04 -07:00
jeffvli 946f4ff306 Bump to v0.4.1 2023-10-07 19:06:30 -07:00
jeffvli 277669c413 Fix album detail table customizations 2023-10-07 18:11:02 -07:00
jeffvli 49b6478b72 Fix table row actions button on album detail and play queue 2023-10-07 17:32:59 -07:00
jeffvli ca39409cc3 Respect order of set-queue function (fix race condition) 2023-10-07 16:46:23 -07:00
jeffvli cca6fa21db Adjust scrobble duration to check in ms 2023-10-05 22:11:48 -07:00
jeffvli 5e1059870c Fix second song on startup not playing 2023-10-05 21:54:11 -07:00
Kendall Garner 6bac172bbe fix scrobble durations (#269)
* fix scrobble durations

* Fix scrobble condition on last song in queue, normalize ms

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-10-05 21:45:47 -07:00
Kendall Garner 118a9f73d1 fix unsynced lyrics (#279) 2023-10-04 22:02:42 -07:00
jeffvli c464be8cea Fix quit functionality (#184) 2023-09-27 02:37:03 -07:00
jeffvli 3bbe696f4c Update react-router and add useTransition support 2023-09-25 16:13:27 -07:00
jeffvli f7cacd2b73 Remove page fade in transition 2023-09-25 16:12:51 -07:00
jeffvli 62794623a3 Fix tracks list refresh on search 2023-09-25 15:57:48 -07:00
Kendall Garner 9e3e038d42 [Remote] Actually fix auth (#260)
* fix favicon, basic auth

* actual fix......
2023-09-24 17:31:33 -07:00
jeffvli b375238baf Bump to v0.4.0 2023-09-24 17:23:39 -07:00
Kendall Garner 02b06a07be fix favicon, basic auth (#259) 2023-09-24 17:02:25 -07:00
Kendall Garner d7f21b3c6b special socket for dev; defer to default otherwise (#258)
* special socket for dev; defer to default otherwise

* Add write-all permissions to docker push

* special socket for dev; defer to default otherwise

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-09-24 16:56:45 -07:00
jeffvli 1113ef972f Remove docker push on pr 2023-09-24 16:54:43 -07:00
jeffvli 46a2c29b22 Add write-all permissions to docker push 2023-09-23 22:36:56 -07:00
jeffvli ebcb7bc4d1 Add path param for ND song list api 2023-09-23 15:37:16 -07:00
jeffvli 0b62bee3a6 Add grid view for tracks (#128) 2023-09-23 15:36:57 -07:00
jeffvli d3503af12c Add song count column to albums list 2023-09-23 04:05:15 -07:00
jeffvli 571ea3c653 Add rating hotkeys (#208) 2023-09-23 03:20:04 -07:00
jeffvli f0e518d3c8 Add quit button to menu (#184) 2023-09-22 18:04:15 -07:00
jeffvli 47dc83f360 Make collapsed sidebar navigation configurable 2023-09-22 17:55:03 -07:00
jeffvli 8cbc25a932 Add browser forward/back hotkeys (#155) 2023-09-22 17:52:00 -07:00
jeffvli 0cba405b45 Add navigation buttons to the collapsed sidebar (#203) 2023-09-22 15:33:28 -07:00
jeffvli 45b80ac395 Add discsubtitle for navidrome (#217) 2023-09-22 15:12:23 -07:00
jeffvli 8b0fe69e1c Fix alignment of button leftIcon 2023-09-22 15:11:27 -07:00
jeffvli 25e621372c Parse URLs from note field (#154) 2023-09-22 04:25:16 -07:00
jeffvli 14f4649b93 Move drag container to scrollarea component 2023-09-22 02:40:27 -07:00
jeffvli 1a87adb728 Fix transient props for styled-components v6 2023-09-22 02:34:57 -07:00
jeffvli bb9bf7ba6a Add docker run instructions 2023-09-22 00:31:56 -07:00
jeffvli fb7e7bfa3e Add latest tag 2023-09-21 21:44:03 -07:00
jeffvli a8a14a62c0 Separate auto and manual docker pushes 2023-09-21 21:13:49 -07:00
jeffvli cd836d54db Add docker publish workflow 2023-09-21 20:46:48 -07:00
jeffvli c90c43944d Fix logo path 2023-09-21 20:31:39 -07:00
jeffvli fd7468a4fe Add drag container for web library headers (#206) 2023-09-21 18:46:47 -07:00
jeffvli c4f9868a6b Revert library header line clamp to 2 lines (#215) 2023-09-21 17:52:14 -07:00
jeffvli fbb0907a70 Fix lyrics mask 2023-09-21 17:41:27 -07:00
jeffvli 201ee895f9 Allow css vendor-prefix 2023-09-21 17:41:19 -07:00
jeffvli 51be0153d3 Adjust fullscreen player styles
- Remove opacity on metadata section
- Add text shadow to metadata text
- Add padding under title
- Uppercase artists and album name
2023-09-21 17:35:22 -07:00
jeffvli 29a9a11085 Fix subsonic song duration 2023-09-21 17:35:22 -07:00
Kendall Garner 65f28bb9dc Replaygain support for Web Player (#243)
* replaygain!

* resume context

* don't fire both players

* replaygain for jellyfin

* actually remove console.log

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-09-21 17:06:13 -07:00
jeffvli fd264daffc Add new app icon (#232) 2023-09-21 11:24:20 -07:00
Alberto Rodríguez 18e35f2ba9 Added docker image build script (#245)
* Added docker image build script

* Changed to alpine docker and expose port 9180

* Use multi-stage build

---------

Co-authored-by: = <=>
Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2023-09-20 18:01:47 -07:00
Kendall Garner 487e9be8ec Invalidate playlist song list on update (#248) 2023-09-20 16:28:59 -07:00
Benjamin d9049ed066 Prevent MPV from loading user config/scripts (#247) 2023-09-20 16:27:36 -07:00
Kendall Garner 6e62448b88 fix other places of duration display (and other minor fixes) (#249)
* fix other places of duration display

* add back comma

* add max-width for image
2023-09-20 16:07:40 -07:00
jeffvli ec457d5125 Lint files based on updated rules 2023-09-15 20:42:38 -07:00
jeffvli d45b01625b Re-add linting for styled-components
- Update styled-components to v6
- Update stylelint to v15
- Add styled-components css plugin
2023-09-15 20:42:03 -07:00
jeffvli 2defa5cc13 Fix seek slider from duration normalizations 2023-09-15 19:31:34 -07:00
jeffvli 9cc9c3a87f Bump electron to v25.8.1 2023-09-15 16:54:17 -07:00
jeffvli 153d8ce6ce Fix nd/jf duration normalizations 2023-09-15 16:52:14 -07:00
jeffvli 5e33212112 Add dedicated refresh button to list views (#235) 2023-09-15 13:47:39 -07:00
jeffvli 7d6990eb90 Add notice regarding broken MPV version 2023-09-15 12:52:03 -07:00
jeffvli d75ea94161 Fix first launch mpv playback (#210) 2023-09-15 03:08:17 -07:00
Kendall Garner 1badecc20a always call autoNext, even if not used (#241) 2023-09-10 15:08:48 -07:00
Kendall Garner c90a56811d [bugfix]: support final lyric with no newline (#240) 2023-09-10 15:07:21 -07:00
nate contino 4e5e3bc9a1 Adjust quarantine bit warning wording to include all Macs running 12+ (#236) 2023-09-10 15:04:24 -07:00
Kendall Garner c8397bb5ef Add transparency/opacity for queue sidebar (#231)
* add opacity

* add background for song metadata

* Add padding and border radius to opacity elements

* Remove font-weight transition on active lyrics (#233)

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2023-09-10 15:03:46 -07:00
Alberto Rodríguez 0ae53b023c improved client detection (#229)
Co-authored-by: = <=>
2023-09-10 13:01:32 -07:00
Kendall Garner 1acfa93f1a Improve MPV initialization and restore (#222)
- set mpv settings only after it has successfully started (at least on linux, settings were not taken)
- change timing of restore queue to behave properly
2023-08-24 18:28:50 -07:00
jeffvli b60ba27892 Allow reuathentication for jellyfin (#214) 2023-08-24 18:17:20 -07:00
jeffvli 7ddba8ede7 Fix JF song filter import (#223) 2023-08-24 18:10:58 -07:00
jeffvli a8bd53b757 Adjust jellyfin playlist fetch 2023-08-24 18:04:01 -07:00
jeffvli 877b2e9f3b Fix normalized album duration values (#205) 2023-08-11 21:08:13 -07:00
jeffvli 6f969294b0 Set macos titlebarstyle to default 2023-08-10 01:54:15 -07:00
jeffvli 663893dccb Fix missing related artist images 2023-08-09 21:30:27 -07:00
jeffvli 3c278d5e17 Add frame to macOS native window bar 2023-08-09 21:07:27 -07:00
788 changed files with 61846 additions and 65726 deletions
+3
View File
@@ -0,0 +1,3 @@
node_modules
Dockerfile
docker-compose.*
+4 -7
View File
@@ -1,12 +1,9 @@
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
trim_trailing_whitespace = true
-7
View File
@@ -1,7 +0,0 @@
{
"rules": {
"no-console": "off",
"global-require": "off",
"import/no-dynamic-require": "off"
}
}
-59
View File
@@ -1,59 +0,0 @@
/**
* Base webpack config used across other specific configs
*/
import webpack from 'webpack';
import { dependencies as externals } from '../../release/app/package.json';
import webpackPaths from './webpack.paths';
import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin';
const configuration: webpack.Configuration = {
externals: [...Object.keys(externals || {})],
module: {
rules: [
{
exclude: /node_modules/,
test: /\.[jt]sx?$/,
use: {
loader: 'ts-loader',
options: {
// Remove this line to enable type checking in webpack builds
transpileOnly: true,
},
},
},
],
},
output: {
// https://github.com/webpack/webpack/issues/1114
library: {
type: 'commonjs2',
},
path: webpackPaths.srcPath,
},
plugins: [
new webpack.EnvironmentPlugin({
NODE_ENV: 'production',
}),
],
/**
* Determine the array of extensions that should be used to resolve modules.
*/
resolve: {
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
fallback: {
child_process: false,
},
plugins: [new TsconfigPathsPlugin({ baseUrl: webpackPaths.srcPath })],
modules: [webpackPaths.srcPath, 'node_modules'],
},
stats: 'errors-only',
};
export default configuration;
-3
View File
@@ -1,3 +0,0 @@
/* eslint import/no-unresolved: off, import/no-self-import: off */
module.exports = require('./webpack.config.renderer.dev').default;
-84
View File
@@ -1,84 +0,0 @@
/**
* Webpack config for production electron main process
*/
import path from 'path';
import TerserPlugin from 'terser-webpack-plugin';
import webpack from 'webpack';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import deleteSourceMaps from '../scripts/delete-source-maps';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
checkNodeEnv('production');
deleteSourceMaps();
const devtoolsConfig =
process.env.DEBUG_PROD === 'true'
? {
devtool: 'source-map',
}
: {};
const configuration: webpack.Configuration = {
...devtoolsConfig,
mode: 'production',
target: 'electron-main',
entry: {
main: path.join(webpackPaths.srcMainPath, 'main.ts'),
preload: path.join(webpackPaths.srcMainPath, 'preload.ts'),
},
output: {
path: webpackPaths.distMainPath,
filename: '[name].js',
},
optimization: {
minimizer: [
new TerserPlugin({
parallel: true,
}),
],
},
plugins: [
new BundleAnalyzerPlugin({
analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled',
}),
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'production',
DEBUG_PROD: false,
START_MINIMIZED: false,
}),
],
/**
* Disables webpack processing of __dirname and __filename.
* If you run the bundle in node.js it falls back to these values of node.js.
* https://github.com/webpack/webpack/issues/2010
*/
node: {
__dirname: false,
__filename: false,
},
};
export default merge(baseConfig, configuration);
@@ -1,70 +0,0 @@
import path from 'path';
import webpack from 'webpack';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's
// at the dev webpack config is not accidentally run in a production environment
if (process.env.NODE_ENV === 'production') {
checkNodeEnv('development');
}
const configuration: webpack.Configuration = {
devtool: 'inline-source-map',
mode: 'development',
target: 'electron-preload',
entry: path.join(webpackPaths.srcMainPath, 'preload.ts'),
output: {
path: webpackPaths.dllPath,
filename: 'preload.js',
},
plugins: [
new BundleAnalyzerPlugin({
analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled',
}),
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*
* By default, use 'development' as NODE_ENV. This can be overriden with
* 'staging', for example, by changing the ENV variables in the npm scripts
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'development',
}),
new webpack.LoaderOptionsPlugin({
debug: true,
}),
],
/**
* Disables webpack processing of __dirname and __filename.
* If you run the bundle in node.js it falls back to these values of node.js.
* https://github.com/webpack/webpack/issues/2010
*/
node: {
__dirname: false,
__filename: false,
},
watch: true,
};
export default merge(baseConfig, configuration);
-119
View File
@@ -1,119 +0,0 @@
import 'webpack-dev-server';
import path from 'path';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import webpack from 'webpack';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's
// at the dev webpack config is not accidentally run in a production environment
if (process.env.NODE_ENV === 'production') {
checkNodeEnv('development');
}
const port = process.env.PORT || 4343;
const configuration: webpack.Configuration = {
devtool: 'inline-source-map',
mode: 'development',
target: ['web'],
entry: [path.join(webpackPaths.srcRemotePath, 'index.tsx')],
output: {
path: webpackPaths.dllPath,
publicPath: '/',
filename: 'remote.js',
library: {
type: 'umd',
},
},
module: {
rules: [
{
test: /\.s?css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: true,
sourceMap: true,
importLoaders: 1,
},
},
'sass-loader',
],
include: /\.module\.s?(c|a)ss$/,
},
{
test: /\.s?css$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
exclude: /\.module\.s?(c|a)ss$/,
},
// Fonts
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
// Images
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
],
},
plugins: [
new webpack.NoEmitOnErrorsPlugin(),
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*
* By default, use 'development' as NODE_ENV. This can be overriden with
* 'staging', for example, by changing the ENV variables in the npm scripts
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'development',
}),
new webpack.LoaderOptionsPlugin({
debug: true,
}),
new HtmlWebpackPlugin({
filename: path.join('index.html'),
template: path.join(webpackPaths.srcRemotePath, 'index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
},
isBrowser: true,
env: process.env.NODE_ENV,
isDevelopment: process.env.NODE_ENV !== 'production',
nodeModules: webpackPaths.appNodeModulesPath,
}),
],
node: {
__dirname: false,
__filename: false,
},
watch: true,
};
export default merge(baseConfig, configuration);
-131
View File
@@ -1,131 +0,0 @@
/**
* Build config for electron renderer process
*/
import path from 'path';
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import TerserPlugin from 'terser-webpack-plugin';
import webpack from 'webpack';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import deleteSourceMaps from '../scripts/delete-source-maps';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
checkNodeEnv('production');
deleteSourceMaps();
const devtoolsConfig =
process.env.DEBUG_PROD === 'true'
? {
devtool: 'source-map',
}
: {};
const configuration: webpack.Configuration = {
...devtoolsConfig,
mode: 'production',
target: ['web'],
entry: [path.join(webpackPaths.srcRemotePath, 'index.tsx')],
output: {
path: webpackPaths.distRemotePath,
publicPath: './',
filename: 'remote.js',
library: {
type: 'umd',
},
},
module: {
rules: [
{
test: /\.s?(a|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
modules: true,
sourceMap: true,
importLoaders: 1,
},
},
'sass-loader',
],
include: /\.module\.s?(c|a)ss$/,
},
{
test: /\.s?(a|c)ss$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
exclude: /\.module\.s?(c|a)ss$/,
},
// Fonts
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
// Images
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
],
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
parallel: true,
}),
new CssMinimizerPlugin(),
],
},
plugins: [
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'production',
DEBUG_PROD: false,
}),
new MiniCssExtractPlugin({
filename: 'remote.css',
}),
new BundleAnalyzerPlugin({
analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled',
}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.join(webpackPaths.srcRendererPath, 'index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
},
isBrowser: false,
isDevelopment: process.env.NODE_ENV !== 'production',
}),
],
};
export default merge(baseConfig, configuration);
@@ -1,79 +0,0 @@
/**
* Builds the DLL for development electron renderer process
*/
import path from 'path';
import webpack from 'webpack';
import { merge } from 'webpack-merge';
import { dependencies } from '../../package.json';
import checkNodeEnv from '../scripts/check-node-env';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
checkNodeEnv('development');
const dist = webpackPaths.dllPath;
const configuration: webpack.Configuration = {
context: webpackPaths.rootPath,
devtool: 'eval',
mode: 'development',
target: 'electron-renderer',
externals: ['fsevents', 'crypto-browserify'],
/**
* Use `module` from `webpack.config.renderer.dev.js`
*/
module: require('./webpack.config.renderer.dev').default.module,
entry: {
renderer: Object.keys(dependencies || {}),
},
output: {
path: dist,
filename: '[name].dev.dll.js',
library: {
name: 'renderer',
type: 'var',
},
},
plugins: [
new webpack.DllPlugin({
path: path.join(dist, '[name].json'),
name: '[name]',
}),
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'development',
}),
new webpack.LoaderOptionsPlugin({
debug: true,
options: {
context: webpackPaths.srcPath,
output: {
path: webpackPaths.dllPath,
},
},
}),
],
};
export default merge(baseConfig, configuration);
-198
View File
@@ -1,198 +0,0 @@
import 'webpack-dev-server';
import { execSync, spawn } from 'child_process';
import fs from 'fs';
import path from 'path';
import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';
import chalk from 'chalk';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import webpack from 'webpack';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's
// at the dev webpack config is not accidentally run in a production environment
if (process.env.NODE_ENV === 'production') {
checkNodeEnv('development');
}
const port = process.env.PORT || 4343;
const manifest = path.resolve(webpackPaths.dllPath, 'renderer.json');
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const requiredByDLLConfig = module.parent!.filename.includes('webpack.config.renderer.dev.dll');
/**
* Warn if the DLL is not built
*/
if (!requiredByDLLConfig && !(fs.existsSync(webpackPaths.dllPath) && fs.existsSync(manifest))) {
console.log(
chalk.black.bgYellow.bold(
'The DLL files are missing. Sit back while we build them for you with "npm run build-dll"',
),
);
execSync('npm run postinstall');
}
const configuration: webpack.Configuration = {
devtool: 'inline-source-map',
mode: 'development',
target: ['web', 'electron-renderer'],
entry: [
`webpack-dev-server/client?http://localhost:${port}/dist`,
'webpack/hot/only-dev-server',
path.join(webpackPaths.srcRendererPath, 'index.tsx'),
],
output: {
path: webpackPaths.distRendererPath,
publicPath: '/',
filename: 'renderer.dev.js',
library: {
type: 'umd',
},
},
module: {
rules: [
{
test: /\.s?css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[name]__[local]--[hash:base64:5]',
exportLocalsConvention: 'camelCaseOnly',
},
sourceMap: true,
importLoaders: 1,
},
},
'sass-loader',
],
include: /\.module\.s?(c|a)ss$/,
},
{
test: /\.s?css$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
exclude: /\.module\.s?(c|a)ss$/,
},
// Fonts
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
// Images
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
],
},
plugins: [
...(requiredByDLLConfig
? []
: [
new webpack.DllReferencePlugin({
context: webpackPaths.dllPath,
manifest: require(manifest),
sourceType: 'var',
}),
]),
new webpack.NoEmitOnErrorsPlugin(),
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*
* By default, use 'development' as NODE_ENV. This can be overriden with
* 'staging', for example, by changing the ENV variables in the npm scripts
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'development',
}),
new webpack.LoaderOptionsPlugin({
debug: true,
}),
new ReactRefreshWebpackPlugin(),
new HtmlWebpackPlugin({
filename: path.join('index.html'),
template: path.join(webpackPaths.srcRendererPath, 'index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
},
isBrowser: false,
env: process.env.NODE_ENV,
isDevelopment: process.env.NODE_ENV !== 'production',
nodeModules: webpackPaths.appNodeModulesPath,
}),
],
node: {
__dirname: false,
__filename: false,
},
devServer: {
port,
compress: true,
hot: true,
headers: { 'Access-Control-Allow-Origin': '*' },
static: {
publicPath: '/',
},
historyApiFallback: {
verbose: true,
},
setupMiddlewares(middlewares) {
console.log('Starting preload.js builder...');
const preloadProcess = spawn('npm', ['run', 'start:preload'], {
shell: true,
stdio: 'inherit',
})
.on('close', (code: number) => process.exit(code!))
.on('error', (spawnError) => console.error(spawnError));
console.log('Starting remote.js builder...');
const remoteProcess = spawn('npm', ['run', 'start:remote'], {
shell: true,
stdio: 'inherit',
})
.on('close', (code: number) => process.exit(code!))
.on('error', (spawnError) => console.error(spawnError));
console.log('Starting Main Process...');
spawn('npm', ['run', 'start:main'], {
shell: true,
stdio: 'inherit',
})
.on('close', (code: number) => {
preloadProcess.kill();
remoteProcess.kill();
process.exit(code!);
})
.on('error', (spawnError) => console.error(spawnError));
return middlewares;
},
},
};
export default merge(baseConfig, configuration);
@@ -1,134 +0,0 @@
/**
* Build config for electron renderer process
*/
import path from 'path';
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import TerserPlugin from 'terser-webpack-plugin';
import webpack from 'webpack';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import deleteSourceMaps from '../scripts/delete-source-maps';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
checkNodeEnv('production');
deleteSourceMaps();
const devtoolsConfig =
process.env.DEBUG_PROD === 'true'
? {
devtool: 'source-map',
}
: {};
const configuration: webpack.Configuration = {
...devtoolsConfig,
mode: 'production',
target: ['web', 'electron-renderer'],
entry: [path.join(webpackPaths.srcRendererPath, 'index.tsx')],
output: {
path: webpackPaths.distRendererPath,
publicPath: './',
filename: 'renderer.js',
library: {
type: 'umd',
},
},
module: {
rules: [
{
test: /\.s?(a|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[name]__[local]--[hash:base64:5]',
exportLocalsConvention: 'camelCaseOnly',
},
sourceMap: true,
importLoaders: 1,
},
},
'sass-loader',
],
include: /\.module\.s?(c|a)ss$/,
},
{
test: /\.s?(a|c)ss$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
exclude: /\.module\.s?(c|a)ss$/,
},
// Fonts
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
// Images
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
],
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
parallel: true,
}),
new CssMinimizerPlugin(),
],
},
plugins: [
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'production',
DEBUG_PROD: false,
}),
new MiniCssExtractPlugin({
filename: 'style.css',
}),
new BundleAnalyzerPlugin({
analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled',
}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.join(webpackPaths.srcRendererPath, 'index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
},
isBrowser: false,
isDevelopment: process.env.NODE_ENV !== 'production',
}),
],
};
export default merge(baseConfig, configuration);
-143
View File
@@ -1,143 +0,0 @@
import 'webpack-dev-server';
import path from 'path';
import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import webpack from 'webpack';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
// When an ESLint server is running, we can't set the NODE_ENV so we'll check if it's
// at the dev webpack config is not accidentally run in a production environment
if (process.env.NODE_ENV === 'production') {
checkNodeEnv('development');
}
const port = process.env.PORT || 4343;
const configuration: webpack.Configuration = {
devtool: 'inline-source-map',
mode: 'development',
target: ['web', 'electron-renderer'],
entry: [
`webpack-dev-server/client?http://localhost:${port}/dist`,
'webpack/hot/only-dev-server',
path.join(webpackPaths.srcRendererPath, 'index.tsx'),
],
output: {
path: webpackPaths.distRendererPath,
publicPath: '/',
filename: 'renderer.dev.js',
library: {
type: 'umd',
},
},
module: {
rules: [
{
test: /\.s?css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[name]__[local]--[hash:base64:5]',
exportLocalsConvention: 'camelCaseOnly',
},
sourceMap: true,
importLoaders: 1,
},
},
'sass-loader',
],
include: /\.module\.s?(c|a)ss$/,
},
{
test: /\.s?css$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
exclude: /\.module\.s?(c|a)ss$/,
},
// Fonts
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
// Images
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
],
},
plugins: [
new webpack.NoEmitOnErrorsPlugin(),
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*
* By default, use 'development' as NODE_ENV. This can be overriden with
* 'staging', for example, by changing the ENV variables in the npm scripts
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'development',
}),
new webpack.LoaderOptionsPlugin({
debug: true,
}),
new ReactRefreshWebpackPlugin(),
new HtmlWebpackPlugin({
filename: path.join('index.html'),
template: path.join(webpackPaths.srcRendererPath, 'index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
},
isBrowser: false,
env: process.env.NODE_ENV,
isDevelopment: process.env.NODE_ENV !== 'production',
nodeModules: webpackPaths.appNodeModulesPath,
}),
],
node: {
__dirname: false,
__filename: false,
},
devServer: {
port,
compress: true,
hot: true,
headers: { 'Access-Control-Allow-Origin': '*' },
static: {
publicPath: '/',
},
historyApiFallback: {
verbose: true,
},
setupMiddlewares(middlewares) {
return middlewares;
},
},
};
export default merge(baseConfig, configuration);
-134
View File
@@ -1,134 +0,0 @@
/**
* Build config for electron renderer process
*/
import path from 'path';
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import TerserPlugin from 'terser-webpack-plugin';
import webpack from 'webpack';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
import { merge } from 'webpack-merge';
import checkNodeEnv from '../scripts/check-node-env';
import deleteSourceMaps from '../scripts/delete-source-maps';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
checkNodeEnv('production');
deleteSourceMaps();
const devtoolsConfig =
process.env.DEBUG_PROD === 'true'
? {
devtool: 'source-map',
}
: {};
const configuration: webpack.Configuration = {
...devtoolsConfig,
mode: 'production',
target: ['web'],
entry: [path.join(webpackPaths.srcRendererPath, 'index.tsx')],
output: {
path: webpackPaths.distWebPath,
publicPath: '/',
filename: 'renderer.js',
library: {
type: 'umd',
},
},
module: {
rules: [
{
test: /\.s?(a|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[name]__[local]--[hash:base64:5]',
exportLocalsConvention: 'camelCaseOnly',
},
sourceMap: true,
importLoaders: 1,
},
},
'sass-loader',
],
include: /\.module\.s?(c|a)ss$/,
},
{
test: /\.s?(a|c)ss$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
exclude: /\.module\.s?(c|a)ss$/,
},
// Fonts
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
// Images
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
],
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
parallel: true,
}),
new CssMinimizerPlugin(),
],
},
plugins: [
/**
* Create global constants which can be configured at compile time.
*
* Useful for allowing different behaviour between development builds and
* release builds
*
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
new webpack.EnvironmentPlugin({
NODE_ENV: 'production',
DEBUG_PROD: false,
}),
new MiniCssExtractPlugin({
filename: 'style.css',
}),
new BundleAnalyzerPlugin({
analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled',
}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.join(webpackPaths.srcRendererPath, 'index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
},
isBrowser: false,
isDevelopment: process.env.NODE_ENV !== 'production',
}),
],
};
export default merge(baseConfig, configuration);
-44
View File
@@ -1,44 +0,0 @@
const path = require('path');
const rootPath = path.join(__dirname, '../..');
const dllPath = path.join(__dirname, '../dll');
const srcPath = path.join(rootPath, 'src');
const srcMainPath = path.join(srcPath, 'main');
const srcRemotePath = path.join(srcPath, 'remote');
const srcRendererPath = path.join(srcPath, 'renderer');
const releasePath = path.join(rootPath, 'release');
const appPath = path.join(releasePath, 'app');
const appPackagePath = path.join(appPath, 'package.json');
const appNodeModulesPath = path.join(appPath, 'node_modules');
const srcNodeModulesPath = path.join(srcPath, 'node_modules');
const distPath = path.join(appPath, 'dist');
const distMainPath = path.join(distPath, 'main');
const distRemotePath = path.join(distPath, 'remote');
const distRendererPath = path.join(distPath, 'renderer');
const distWebPath = path.join(distPath, 'web');
const buildPath = path.join(releasePath, 'build');
export default {
rootPath,
dllPath,
srcPath,
srcMainPath,
srcRemotePath,
srcRendererPath,
releasePath,
appPath,
appPackagePath,
appNodeModulesPath,
srcNodeModulesPath,
distPath,
distMainPath,
distRemotePath,
distRendererPath,
distWebPath,
buildPath,
};
-1
View File
@@ -1 +0,0 @@
export default 'test-file-stub';
-8
View File
@@ -1,8 +0,0 @@
{
"rules": {
"no-console": "off",
"global-require": "off",
"import/no-dynamic-require": "off",
"import/no-extraneous-dependencies": "off"
}
}
-33
View File
@@ -1,33 +0,0 @@
// Check if the renderer and main bundles are built
import path from 'path';
import chalk from 'chalk';
import fs from 'fs';
import webpackPaths from '../configs/webpack.paths';
const mainPath = path.join(webpackPaths.distMainPath, 'main.js');
const remotePath = path.join(webpackPaths.distMainPath, 'remote.js');
const rendererPath = path.join(webpackPaths.distRendererPath, 'renderer.js');
if (!fs.existsSync(mainPath)) {
throw new Error(
chalk.whiteBright.bgRed.bold(
'The main process is not built yet. Build it by running "npm run build:main"',
),
);
}
if (!fs.existsSync(remotePath)) {
throw new Error(
chalk.whiteBright.bgRed.bold(
'The remote process is not built yet. Build it by running "npm run build:remote"',
),
);
}
if (!fs.existsSync(rendererPath)) {
throw new Error(
chalk.whiteBright.bgRed.bold(
'The renderer process is not built yet. Build it by running "npm run build:renderer"',
),
);
}
-54
View File
@@ -1,54 +0,0 @@
import fs from 'fs';
import chalk from 'chalk';
import { execSync } from 'child_process';
import { dependencies } from '../../package.json';
if (dependencies) {
const dependenciesKeys = Object.keys(dependencies);
const nativeDeps = fs
.readdirSync('node_modules')
.filter((folder) => fs.existsSync(`node_modules/${folder}/binding.gyp`));
if (nativeDeps.length === 0) {
process.exit(0);
}
try {
// Find the reason for why the dependency is installed. If it is installed
// because of a devDependency then that is okay. Warn when it is installed
// because of a dependency
const { dependencies: dependenciesObject } = JSON.parse(
execSync(`npm ls ${nativeDeps.join(' ')} --json`).toString()
);
const rootDependencies = Object.keys(dependenciesObject);
const filteredRootDependencies = rootDependencies.filter((rootDependency) =>
dependenciesKeys.includes(rootDependency)
);
if (filteredRootDependencies.length > 0) {
const plural = filteredRootDependencies.length > 1;
console.log(`
${chalk.whiteBright.bgYellow.bold(
'Webpack does not work with native dependencies.'
)}
${chalk.bold(filteredRootDependencies.join(', '))} ${
plural ? 'are native dependencies' : 'is a native dependency'
} and should be installed inside of the "./release/app" folder.
First, uninstall the packages from "./package.json":
${chalk.whiteBright.bgGreen.bold('npm uninstall your-package')}
${chalk.bold(
'Then, instead of installing the package to the root "./package.json":'
)}
${chalk.whiteBright.bgRed.bold('npm install your-package')}
${chalk.bold('Install the package to "./release/app/package.json"')}
${chalk.whiteBright.bgGreen.bold(
'cd ./release/app && npm install your-package'
)}
Read more about native dependencies at:
${chalk.bold(
'https://electron-react-boilerplate.js.org/docs/adding-dependencies/#module-structure'
)}
`);
process.exit(1);
}
} catch (e) {
console.log('Native dependencies could not be checked');
}
}
-16
View File
@@ -1,16 +0,0 @@
import chalk from 'chalk';
export default function checkNodeEnv(expectedEnv) {
if (!expectedEnv) {
throw new Error('"expectedEnv" not set');
}
if (process.env.NODE_ENV !== expectedEnv) {
console.log(
chalk.whiteBright.bgRed.bold(
`"process.env.NODE_ENV" must be "${expectedEnv}" to use this webpack config`
)
);
process.exit(2);
}
}
-16
View File
@@ -1,16 +0,0 @@
import chalk from 'chalk';
import detectPort from 'detect-port';
const port = process.env.PORT || '4343';
detectPort(port, (err, availablePort) => {
if (port !== String(availablePort)) {
throw new Error(
chalk.whiteBright.bgRed.bold(
`Port "${port}" on "localhost" is already in use. Please use another port. ex: PORT=4343 npm start`
)
);
} else {
process.exit(0);
}
});
-17
View File
@@ -1,17 +0,0 @@
import rimraf from 'rimraf';
import process from 'process';
import webpackPaths from '../configs/webpack.paths';
const args = process.argv.slice(2);
const commandMap = {
dist: webpackPaths.distPath,
release: webpackPaths.releasePath,
dll: webpackPaths.dllPath,
};
args.forEach((x) => {
const pathToRemove = commandMap[x];
if (pathToRemove !== undefined) {
rimraf.sync(pathToRemove);
}
});
-9
View File
@@ -1,9 +0,0 @@
import path from 'path';
import rimraf from 'rimraf';
import webpackPaths from '../configs/webpack.paths';
export default function deleteSourceMaps() {
rimraf.sync(path.join(webpackPaths.distMainPath, '*.js.map'));
rimraf.sync(path.join(webpackPaths.distRemotePath, '*.js.map'));
rimraf.sync(path.join(webpackPaths.distRendererPath, '*.js.map'));
}
-20
View File
@@ -1,20 +0,0 @@
import { execSync } from 'child_process';
import fs from 'fs';
import { dependencies } from '../../release/app/package.json';
import webpackPaths from '../configs/webpack.paths';
if (
Object.keys(dependencies || {}).length > 0 &&
fs.existsSync(webpackPaths.appNodeModulesPath)
) {
const electronRebuildCmd =
'../../node_modules/.bin/electron-rebuild --force --types prod,dev,optional --module-dir .';
const cmd =
process.platform === 'win32'
? electronRebuildCmd.replace(/\//g, '\\')
: electronRebuildCmd;
execSync(cmd, {
cwd: webpackPaths.appPath,
stdio: 'inherit',
});
}
-9
View File
@@ -1,9 +0,0 @@
import fs from 'fs';
import webpackPaths from '../configs/webpack.paths';
const { srcNodeModulesPath } = webpackPaths;
const { appNodeModulesPath } = webpackPaths;
if (!fs.existsSync(srcNodeModulesPath) && fs.existsSync(appNodeModulesPath)) {
fs.symlinkSync(appNodeModulesPath, srcNodeModulesPath, 'junction');
}
-30
View File
@@ -1,30 +0,0 @@
const { notarize } = require('electron-notarize');
const { build } = require('../../package.json');
exports.default = async function notarizeMacos(context) {
const { electronPlatformName, appOutDir } = context;
if (electronPlatformName !== 'darwin') {
return;
}
if (process.env.CI !== 'true') {
console.warn('Skipping notarizing step. Packaging is not running in CI');
return;
}
if (!('APPLE_ID' in process.env && 'APPLE_ID_PASS' in process.env)) {
console.warn(
'Skipping notarizing step. APPLE_ID and APPLE_ID_PASS env variables must be set'
);
return;
}
const appName = context.packager.appInfo.productFilename;
await notarize({
appBundleId: build.appId,
appPath: `${appOutDir}/${appName}.app`,
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_ID_PASS,
});
};
-34
View File
@@ -1,34 +0,0 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Coverage directory used by tools like istanbul
coverage
.eslintcache
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
# OSX
.DS_Store
src/i18n
release/app/dist
release/build
.erb/dll
.idea
npm-debug.log.*
*.css.d.ts
*.sass.d.ts
*.scss.d.ts
# eslint ignores hidden directories by default:
# https://github.com/eslint/eslint/issues/8429
!.erb
-97
View File
@@ -1,97 +0,0 @@
module.exports = {
extends: ['erb', 'plugin:typescript-sort-keys/recommended'],
ignorePatterns: ['.erb/*', 'server'],
parser: '@typescript-eslint/parser',
parserOptions: {
createDefaultProgram: true,
ecmaVersion: 12,
parser: '@typescript-eslint/parser',
project: './tsconfig.json',
sourceType: 'module',
tsconfigRootDir: './',
},
plugins: ['@typescript-eslint', 'import', 'sort-keys-fix'],
rules: {
'@typescript-eslint/naming-convention': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-shadow': ['off'],
'@typescript-eslint/no-unused-vars': ['error'],
'@typescript-eslint/no-use-before-define': ['error'],
'default-case': 'off',
'import/extensions': 'off',
'import/no-absolute-path': 'off',
// A temporary hack related to IDE not resolving correct package.json
'import/no-extraneous-dependencies': 'off',
'import/no-unresolved': 'error',
'import/order': [
'error',
{
alphabetize: {
caseInsensitive: true,
order: 'asc',
},
groups: ['builtin', 'external', 'internal', ['parent', 'sibling']],
'newlines-between': 'never',
pathGroups: [
{
group: 'external',
pattern: 'react',
position: 'before',
},
],
pathGroupsExcludedImportTypes: ['react'],
},
],
'import/prefer-default-export': 'off',
'jsx-a11y/click-events-have-key-events': 'off',
'jsx-a11y/interactive-supports-focus': 'off',
'jsx-a11y/media-has-caption': 'off',
'no-await-in-loop': 'off',
'no-console': 'off',
'no-nested-ternary': 'off',
'no-restricted-syntax': 'off',
'no-shadow': 'off',
'no-underscore-dangle': 'off',
'no-unused-vars': 'off',
'no-use-before-define': 'off',
'prefer-destructuring': 'off',
'react/function-component-definition': 'off',
'react/jsx-filename-extension': [2, { extensions: ['.js', '.jsx', '.ts', '.tsx'] }],
'react/jsx-no-useless-fragment': 'off',
'react/jsx-props-no-spreading': 'off',
'react/jsx-sort-props': [
'error',
{
callbacksLast: true,
ignoreCase: false,
noSortAlphabetically: false,
reservedFirst: true,
shorthandFirst: true,
shorthandLast: false,
},
],
'react/no-array-index-key': 'off',
'react/react-in-jsx-scope': 'off',
'react/require-default-props': 'off',
'sort-keys-fix/sort-keys-fix': 'warn',
},
settings: {
'import/parsers': {
'@typescript-eslint/parser': ['.ts', '.tsx'],
},
'import/resolver': {
// See https://github.com/benmosher/eslint-plugin-import/issues/1396#issuecomment-575727774 for line below
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
typescript: {
alwaysTryTypes: true,
project: './tsconfig.json',
},
webpack: {
config: require.resolve('./.erb/configs/webpack.config.eslint.ts'),
},
},
},
};
@@ -0,0 +1,33 @@
name: Feature request
description: Request a feature to be added to Feishin
title: '[Feature]: '
labels: ['enhancement']
body:
- type: checkboxes
id: check-duplicate
attributes:
label: I have already checked through the existing feature requests and found no duplicates
options:
- label: 'Yes'
required: true
- type: dropdown
id: server-specific
attributes:
label: Is this a server-specific feature?
options:
- Not server-specific
- OpenSubsonic
- Jellyfin
- Navidrome
default: 0
validations:
required: true
- type: textarea
id: solution
attributes:
label: What do you want to be added?
placeholder: I would like to see [...]
validations:
required: true
+74
View File
@@ -0,0 +1,74 @@
name: Bug report
description: You're having technical issues.
title: '[Bug]: '
labels: ['bug']
body:
- type: checkboxes
id: check-duplicate
attributes:
label: I have already checked through the existing bug reports and found no duplicates
options:
- label: 'Yes'
required: true
- type: input
id: version
attributes:
label: App Version
description: What version of the app are you running?
placeholder: ex. 1.0.0
validations:
required: true
- type: input
id: server-version
attributes:
label: Music Server and Version
description: What music server are you using?
placeholder: ex. Navidrome v0.55.0, LMS v3.67.0, Jellyfin v10.10.7, etc.
validations:
required: true
- type: dropdown
id: environments
attributes:
label: What local environments are you seeing the problem on?
multiple: true
options:
- Desktop Windows
- Desktop macOS
- Desktop Linux
- Web Firefox
- Web Chrome
- Web Safari
- Web Microsoft Edge
- Other (please specify in the next field)
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Include screenshots and error logs if possible. The browser devtools can be opened using CTRL + SHIFT + I (Windows/Linux) or CMD + SHIFT + I (macOS).
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: How can we reproduce this issue? Are there any specific settings that are enabled that could be the cause?
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code.
render: shell
-45
View File
@@ -1,45 +0,0 @@
---
name: Bug report
about: You're having technical issues. 🐞
labels: 'bug'
---
## Expected Behavior
<!--- What should have happened? -->
## Current Behavior
<!--- What went wrong? -->
<!-- Add screenshots to help explain your problem -->
<!-- (Open the browser dev tools in the menu or using CTRL + SHIFT + I) -->
## Steps to Reproduce
<!-- Add relevant code and/or a live example -->
<!-- Add stack traces -->
1.
2.
3.
4.
## Possible Solution (Not obligatory)
<!--- Suggest a reason for the bug or how to fix it. -->
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
## Your Environment
<!--- Include as many relevant details about the environment you experienced the bug in -->
- Application version (e.g. v0.1.0) :
- Operating System and version (e.g. Windows 10) :
- Server and version (e.g. Navidrome v0.48.0) :
- Node version (if developing locally) :
-9
View File
@@ -1,9 +0,0 @@
---
name: Question
about: Ask a question.❓
labels: 'question'
---
<!-- Question issues will be closed. -->
<!-- Ask questions in the discussions tab: Please use discussions https://github.com/jeffvli/feishin/discussions -->
<!-- Or join the Discord/Matrix servers: https://discord.gg/FVKpcMDy5f https://matrix.to/#/#sonixd:matrix.org -->
@@ -1,11 +0,0 @@
---
name: Feature request
about: Request a feature to be added to Feishin 🎉
labels: 'enhancement'
---
## What do you want to be added?
## Additional context
<!-- Is this a server-specific feature? (e.g. Jellyfin only). -->
+11
View File
@@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: Questions or help
url: https://github.com/jeffvli/feishin/discussions
about: Ask questions or get help in the discussions section
- name: Discord Community
url: https://discord.gg/FVKpcMDy5f
about: The discord/matrix servers are bridged so you can join whichever you prefer
- name: Matrix Community
url: https://matrix.to/#/#sonixd:matrix.org
about: The discord/matrix servers are bridged so you can join whichever you prefer
+55
View File
@@ -0,0 +1,55 @@
# Referenced from: https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#introduction
name: Publish Docker to GHCR
permissions: write-all
on:
workflow_dispatch:
push:
tags:
- 'v*.*.*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
linux/arm/v7
linux/arm64/v8
+44
View File
@@ -0,0 +1,44 @@
# Referenced from: https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#introduction
name: Publish Docker to GHCR (Manual)
on: workflow_dispatch
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
linux/arm/v7
linux/arm64/v8
+21 -11
View File
@@ -14,17 +14,15 @@ jobs:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Install Node and NPM
uses: actions/setup-node@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
with:
node-version: 16
cache: npm
version: 9
- name: Install dependencies
run: |
npm install --legacy-peer-deps
run: pnpm install
- name: Publish releases
- name: Build and Publish releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
@@ -33,7 +31,19 @@ jobs:
max_attempts: 3
retry_on: error
command: |
npm run postinstall
npm run build
npm exec electron-builder -- --publish always --linux
on_retry_command: npm cache clean --force
pnpm run package:linux
pnpm run publish:linux
on_retry_command: pnpm cache delete
- name: Build and Publish releases (arm64)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run package:linux-arm64
pnpm run publish:linux-arm64
on_retry_command: pnpm cache delete
+9 -12
View File
@@ -1,4 +1,4 @@
name: Publish Windows and macOS (Manual)
name: Publish macOS (Manual)
on: workflow_dispatch
@@ -14,17 +14,15 @@ jobs:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Install Node and NPM
uses: actions/setup-node@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
with:
node-version: 16
cache: npm
version: 9
- name: Install dependencies
run: |
npm install --legacy-peer-deps
run: pnpm install
- name: Publish releases
- name: Build and Publish releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
@@ -33,7 +31,6 @@ jobs:
max_attempts: 3
retry_on: error
command: |
npm run postinstall
npm run build
npm exec electron-builder -- --publish always --win --mac
on_retry_command: npm cache clean --force
pnpm run package:mac
pnpm run publish:mac
on_retry_command: pnpm cache delete
+56 -23
View File
@@ -11,50 +11,83 @@ jobs:
strategy:
matrix:
os: [macos-latest]
os: [macos-latest, ubuntu-latest, windows-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v3
- name: Install Node and NPM
uses: actions/setup-node@v3
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
with:
node-version: 16
cache: npm
version: 9
- name: Install dependencies
run: |
npm install --legacy-peer-deps
run: pnpm install
- name: Build releases
- name: Build for Windows
if: ${{ matrix.os == 'windows-latest' }}
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
npm run postinstall
npm run build
npm run package:pr
on_retry_command: npm cache clean --force
pnpm run package:win:pr
- uses: actions/upload-artifact@v3
- name: Build for 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 package:linux:pr
- name: Build for 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 package:mac:pr
- name: Zip Windows Binaries
if: ${{ matrix.os == 'windows-latest' }}
shell: pwsh
run: |
Compress-Archive -Path "dist/*.exe" -DestinationPath "dist/windows-binaries.zip" -Force
- name: Zip Linux Binaries
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
zip -r dist/linux-binaries.zip dist/*.{AppImage,deb,rpm}
- name: Zip MacOS Binaries
if: ${{ matrix.os == 'macos-latest' }}
run: |
zip -r dist/macos-binaries.zip dist/*.dmg
- name: Upload Windows Binaries
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/upload-artifact@v4
with:
name: windows-binaries
path: |
release/build/*.exe
path: dist/windows-binaries.zip
- uses: actions/upload-artifact@v3
- name: Upload Linux Binaries
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: actions/upload-artifact@v4
with:
name: linux-binaries
path: |
release/build/*.AppImage
release/build/*.deb
release/build/*.rpm
path: dist/linux-binaries.zip
- uses: actions/upload-artifact@v3
- name: Upload MacOS Binaries
if: ${{ matrix.os == 'macos-latest' }}
uses: actions/upload-artifact@v4
with:
name: macos-binaries
path: |
release/build/*.dmg
path: dist/macos-binaries.zip
+36
View File
@@ -0,0 +1,36 @@
name: Publish Windows (Manual)
on: workflow_dispatch
jobs:
publish:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
with:
version: 9
- name: Install dependencies
run: pnpm install
- name: Build and Publish releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run package:win
pnpm run publish:win
on_retry_command: pnpm cache delete
+7 -15
View File
@@ -14,21 +14,13 @@ jobs:
- name: Check out Git repository
uses: actions/checkout@v1
- name: Install Node.js and NPM
uses: actions/setup-node@v2
- name: Install Node.js and PNPM
uses: pnpm/action-setup@v4
with:
node-version: 16
cache: npm
version: 9
- name: npm install
run: |
npm install --legacy-peer-deps
- name: Install dependencies
run: pnpm install
- name: npm test
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
npm run lint
npm run package
npm exec tsc
npm test
- name: Lint Files
run: pnpm run lint
+5 -29
View File
@@ -1,31 +1,7 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Coverage directory used by tools like istanbul
coverage
.eslintcache
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
# OSX
dist
out
.DS_Store
release/app/dist
release/build
.erb/dll
.idea
npm-debug.log.*
*.css.d.ts
*.sass.d.ts
*.scss.d.ts
.env*
.eslintcache
*.log*
release
-4
View File
@@ -1,4 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
+2
View File
@@ -0,0 +1,2 @@
legacy-peer-deps=true
only-built-dependencies=electron,esbuild
+6
View File
@@ -0,0 +1,6 @@
out
dist
pnpm-lock.yaml
LICENSE.md
tsconfig.json
tsconfig.*.json
-22
View File
@@ -1,22 +0,0 @@
{
"printWidth": 100,
"semi": true,
"singleQuote": true,
"tabWidth": 4,
"useTabs": false,
"overrides": [
{
"files": ["**/*.css", "**/*.scss", "**/*.html"],
"options": {
"singleQuote": true
}
}
],
"trailingComma": "all",
"bracketSpacing": true,
"arrowParens": "always",
"proseWrap": "never",
"htmlWhitespaceSensitivity": "strict",
"endOfLine": "lf",
"singleAttributePerLine": true
}
+14
View File
@@ -0,0 +1,14 @@
singleQuote: true
semi: true
printWidth: 100
tabWidth: 4
trailingComma: all
useTabs: false
arrowParens: always
proseWrap: never
htmlWhitespaceSensitivity: strict
endOfLine: lf
singleAttributePerLine: true
bracketSpacing: true
plugins:
- prettier-plugin-packagejson
+10 -18
View File
@@ -1,27 +1,19 @@
{
"extends": [
"stylelint-config-standard-scss",
"stylelint-config-standard",
"stylelint-config-css-modules",
"stylelint-config-rational-order"
"stylelint-config-recess-order"
],
"rules": {
"indentation": 4,
"color-function-notation": ["legacy"],
"declaration-empty-line-before": null,
"order/properties-order": [],
"plugin/rational-order": [
true,
{
"border-in-box-model": false,
"empty-line-between-groups": false
}
],
"string-quotes": "single",
"declaration-block-no-redundant-longhand-properties": null,
"selector-class-pattern": null,
"block-no-empty": null,
"selector-type-case": ["lower", { "ignoreTypes": ["/^\\$\\w+/"] }],
"selector-type-no-unknown": [true, { "ignoreTypes": ["/-styled-mixin/", "/^\\$\\w+/"] }],
"value-keyword-case": ["lower", { "ignoreKeywords": ["dummyValue"] }],
"declaration-colon-newline-after": null
"declaration-block-no-shorthand-property-overrides": null,
"declaration-block-no-redundant-longhand-properties": null,
"at-rule-no-unknown": [true, { "ignoreAtRules": ["mixin", "value"] }],
"function-no-unknown": [true, { "ignoreFunctions": ["darken", "alpha", "lighten"] }],
"declaration-property-value-no-unknown": null,
"no-descending-specificity": null,
"no-empty-source": null
}
}
+1 -8
View File
@@ -1,10 +1,3 @@
{
"recommendations": [
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"stylelint.vscode-stylelint",
"esbenp.prettier-vscode",
"clinyong.vscode-css-modules",
"Huuums.vscode-fast-folder-structure"
]
"recommendations": ["dbaeumer.vscode-eslint"]
}
+37 -26
View File
@@ -1,28 +1,39 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Electron: Main",
"type": "node",
"request": "launch",
"protocol": "inspector",
"runtimeExecutable": "npm",
"runtimeArgs": ["run start:main --inspect=5858 --remote-debugging-port=9223"],
"preLaunchTask": "Start Webpack Dev"
},
{
"name": "Electron: Renderer",
"type": "chrome",
"request": "attach",
"port": 9223,
"webRoot": "${workspaceFolder}",
"timeout": 15000
}
],
"compounds": [
{
"name": "Electron: All",
"configurations": ["Electron: Main", "Electron: Renderer"]
}
]
"version": "0.2.0",
"configurations": [
{
"name": "Debug Main Process",
"type": "node",
"request": "launch",
"cwd": "${workspaceRoot}",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite.cmd"
},
"runtimeArgs": ["--sourcemap"],
"env": {
"REMOTE_DEBUGGING_PORT": "9222"
}
},
{
"name": "Debug Renderer Process",
"port": 9222,
"request": "attach",
"type": "chrome",
"webRoot": "${workspaceFolder}/src/renderer",
"timeout": 60000,
"presentation": {
"hidden": true
}
}
],
"compounds": [
{
"name": "Debug All",
"configurations": ["Debug Main Process", "Debug Renderer Process"],
"presentation": {
"order": 1
}
}
]
}
+26 -14
View File
@@ -1,4 +1,13 @@
{
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"files.associations": {
".eslintrc": "jsonc",
".prettierrc": "jsonc",
@@ -9,18 +18,14 @@
{ "directory": "./", "changeProcessCWD": true },
{ "directory": "./server", "changeProcessCWD": true }
],
"typescript.tsserver.experimental.enableProjectDiagnostics": true,
"typescript.tsserver.experimental.enableProjectDiagnostics": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.fixAll.stylelint": true,
"source.organizeImports": false,
"source.formatDocument": true
"source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": "explicit",
"source.organizeImports": "never",
"source.formatDocument": "explicit"
},
"css.validate": true,
"less.validate": false,
"scss.validate": true,
"scss.lint.unknownAtRules": "warning",
"scss.lint.unknownProperties": "warning",
"javascript.validate.enable": false,
"javascript.format.enable": false,
"typescript.format.enable": false,
@@ -33,14 +38,21 @@
"npm-debug.log.*": true,
"test/**/__snapshots__": true,
"package-lock.json": true,
"*.{css,sass,scss}.d.ts": true
"*.{css,sass,scss}.d.ts": true,
"out/**/*": true,
"dist/**/*": true
},
"i18n-ally.localesPaths": ["src/i18n", "src/i18n/locales"],
"typescript.tsdk": "node_modules\\typescript\\lib",
"typescript.preferences.importModuleSpecifier": "non-relative",
"stylelint.validate": ["css", "less", "postcss", "scss"],
"stylelint.config": null,
"stylelint.validate": ["css", "postcss"],
"typescript.updateImportsOnFileMove.enabled": "always",
"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"typescript.preferences.autoImportFileExcludePatterns": [
"@mantine/core",
"@mantine/modals",
"@mantine/dates"
],
"[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": true,
"folderTemplates.structures": [
@@ -53,14 +65,14 @@
"template": "Functional Component with CSS Modules"
},
{
"fileName": "<FTName | kebabcase>.module.scss"
"fileName": "<FTName | kebabcase>.module.css"
}
]
}
],
"folderTemplates.fileTemplates": {
"Functional Component with CSS Modules": [
"import styles from './<FTName | kebabcase>.module.scss';",
"import styles from './<FTName | kebabcase>.module.css';",
"",
"interface <FTName | pascalcase>Props {}",
"",
-25
View File
@@ -1,25 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"label": "Start Webpack Dev",
"script": "start:renderer",
"options": {
"cwd": "${workspaceFolder}"
},
"isBackground": true,
"problemMatcher": {
"owner": "custom",
"pattern": {
"regexp": "____________"
},
"background": {
"activeOnStart": true,
"beginsPattern": "Compiling\\.\\.\\.$",
"endsPattern": "(Compiled successfully|Failed to compile)\\.$"
}
}
}
]
}
+25
View File
@@ -0,0 +1,25 @@
# --- Builder stage
FROM node:23-alpine as builder
WORKDIR /app
# Copy package.json first to cache node_modules
COPY package.json pnpm-lock.yaml .
RUN npm install -g pnpm
RUN pnpm install
# Copy code and build with cached modules
COPY . .
RUN pnpm run build:web
# --- Production stage
FROM nginx:alpine-slim
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="/"
EXPOSE 9180
CMD ["nginx", "-g", "daemon off;"]
+110 -7
View File
@@ -1,3 +1,5 @@
<img src="assets/icons/icon.png" alt="logo" title="feishin" align="right" height="60px" />
# Feishin
<p align="center">
@@ -25,6 +27,8 @@
</a>
</p>
---
Rewrite of [Sonixd](https://github.com/jeffvli/sonixd).
## Features
@@ -43,9 +47,53 @@ Rewrite of [Sonixd](https://github.com/jeffvli/sonixd).
## Getting Started
Download the [latest desktop client](https://github.com/jeffvli/feishin/releases).
### Desktop (recommended)
If you're using an M1 macOS device, [check here](https://github.com/jeffvli/feishin/issues/104#issuecomment-1553914730) for instructions on how to remove the app from quarantine.
Download the [latest desktop client](https://github.com/jeffvli/feishin/releases). The desktop client is the recommended way to use Feishin. It supports both the MPV and web player backends, as well as includes built-in fetching for lyrics.
#### macOS Notes
If you're using a device running macOS 12 (Monterey) or higher, [check here](https://github.com/jeffvli/feishin/issues/104#issuecomment-1553914730) for instructions on how to remove the app from quarantine.
For media keys to work, you will be prompted to allow Feishin to be a Trusted Accessibility Client. After allowing, you will need to restart Feishin for the privacy settings to take effect.
### Web and Docker
Visit [https://feishin.vercel.app](https://feishin.vercel.app) to use the hosted web version of Feishin. The web client only supports the web player backend.
Feishin is also available as a Docker image. The images are hosted via `ghcr.io` and are available to view [here](https://github.com/jeffvli/feishin/pkgs/container/feishin). You can run the container using the following commands:
```bash
# Run the latest version
docker run --name feishin -p 9180:9180 ghcr.io/jeffvli/feishin:latest
# Build the image locally
docker build -t feishin .
docker run --name feishin -p 9180:9180 feishin
```
#### Docker Compose
To install via Docker Compose use the following snippit. This also works on Portainer.
```yaml
services:
feishin:
container_name: feishin
image: 'ghcr.io/jeffvli/feishin:latest'
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
- PUID=1000
- PGID=1000
- UMASK=002
- TZ=America/Los_Angeles
ports:
- 9180:9180
restart: unless-stopped
```
### Configuration
@@ -54,23 +102,78 @@ If you're using an M1 macOS device, [check here](https://github.com/jeffvli/feis
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.
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.
## FAQ
### MPV is either not working or is rapidly switching between pause/play states
First thing to do is check that your MPV binary path is correct. Navigate to the settings page and re-set the path and restart the app. If your issue still isn't resolved, try reinstalling MPV. Known working versions include `v0.35.x` and `v0.36.x`. `v0.34.x` is a known broken version.
### What music servers does Feishin support?
Feishin supports any music server that implements a [Navidrome](https://www.navidrome.org/) or [Jellyfin](https://jellyfin.org/) API. **Subsonic API is not currently supported**. This will likely be added in [later when the new Subsonic API is decided on](https://support.symfonium.app/t/subsonic-servers-participation/1233).
Feishin supports any music server that implements a [Navidrome](https://www.navidrome.org/), [Jellyfin](https://jellyfin.org/), or [OpenSubsonic compatible](https://opensubsonic.netlify.app/) API.
- [Navidrome](https://github.com/navidrome/navidrome)
- [Jellyfin](https://github.com/jellyfin/jellyfin)
- [Funkwhale](https://funkwhale.audio/) - TBD
- Subsonic-compatible servers - TBD
- [OpenSubsonic](https://opensubsonic.netlify.app/) compatible servers, such as...
- [Airsonic-Advanced](https://github.com/airsonic-advanced/airsonic-advanced)
- [Ampache](https://ampache.org)
- [Astiga](https://asti.ga/)
- [Funkwhale](https://www.funkwhale.audio/)
- [Gonic](https://github.com/sentriz/gonic)
- [LMS](https://github.com/epoupon/lms)
- [Nextcloud Music](https://apps.nextcloud.com/apps/music)
- [Supysonic](https://github.com/spl0k/supysonic)
- More (?)
### I have the issue "The SUID sandbox helper binary was found, but is not configured correctly" on Linux
This happens when you have user (unprivileged) namespaces disabled (`sysctl kernel.unprivileged_userns_clone` returns 0). You can fix this by either enabling unprivileged namespaces, or by making the `chrome-sandbox` Setuid.
```bash
chmod 4755 chrome-sandbox
sudo chown root:root chrome-sandbox
```
Ubunutu 24.04 specifically introduced breaking changes that affect how namespaces work. Please see https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#:~:text=security%20improvements%20 for possible fixes.
## Development
Built and tested using Node `v16.15.0`.
Built and tested using Node `v23.11.0`.
This project is built off of [electron-react-boilerplate](https://github.com/electron-react-boilerplate/electron-react-boilerplate) v4.6.0.
This project is built off of [electron-vite](https://github.com/alex8088/electron-vite)
- `pnpm run dev` - Start the development server
- `pnpm run dev:watch` - Start the development server in watch mode (for main / preload HMR)
- `pnpm run start` - Starts the app in production preview mode
- `pnpm run build` - Builds the app for desktop
- `pnpm run build:electron` - Build the electron app (main, preload, and renderer)
- `pnpm run build:remote` - Build the remote app (remote)
- `pnpm run build:web` - Build the standalone web app (renderer)
- `pnpm run package` - Package the project
- `pnpm run package:dev` - Package the project for development
- `pnpm run package:linux` - Package the project for Linux
- `pnpm run package:mac` - Package the project for Mac
- `pnpm run package:win` - Package the project for Windows
- `pnpm run publish:linux` - Publish the project for Linux
- `pnpm run publish:linux-arm64` - Publish the project for Linux ARM64
- `pnpm run publish:mac` - Publish the project for Mac
- `pnpm run publish:win` - Publish the project for Windows
- `pnpm run typecheck` - Type check the project
- `pnpm run typecheck:node` - Type check the project with tsconfig.node.json
- `pnpm run typecheck:web` - Type check the project with tsconfig.web.json
- `pnpm run lint` - Lint the project
- `pnpm run lint:fix` - Lint the project and fix linting errors
- `pnpm run i18next` - Generate i18n files
## Translation
This project uses [Weblate](https://hosted.weblate.org/projects/feishin/) for translations. If you would like to contribute, please visit the link and submit a translation.
## License
+3 -1
View File
@@ -2,9 +2,11 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
</dict>
</plist>
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 521 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 980 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

+3
View File
@@ -0,0 +1,3 @@
provider: generic
url: https://example.com/auto-updates
updaterCacheDirName: feishin-updater
+13
View File
@@ -0,0 +1,13 @@
version: '3.5'
services:
feishin:
container_name: feishin
image: ghcr.io/jeffvli/feishin:latest
restart: unless-stopped
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
+75
View File
@@ -0,0 +1,75 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 35.1.5
directories:
buildResources: assets
files:
- 'out/**/*'
- 'package.json'
extraResources:
- assets/**
asarUnpack:
- resources/**
win:
target:
- zip
- nsis
icon: assets/icons/icon.png
nsis:
shortcutName: ${productName}
uninstallDisplayName: ${productName}
createDesktopShortcut: always
mac:
target:
target: default
arch:
- arm64
- x64
icon: assets/icons/icon.icns
type: distribution
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
gatekeeperAssess: false
notarize: false
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
deb:
depends:
- libgssapi_krb5.so.2
- libavahi-common.so.3
- libavahi-client.so.3
- libkrb5.so.3
- libkrb5support.so.0
- libkeyutils.so.1
- libcups.so.2
rpm:
depends:
- libgssapi_krb5.so.2
- libavahi-common.so.3
- libavahi-client.so.3
- libkrb5.so.3
- libkrb5support.so.0
- libkeyutils.so.1
- libcups.so.2
freebsd:
depends:
- libgssapi_krb5.so.2
- libavahi-common.so.3
- libavahi-client.so.3
- libkrb5.so.3
- libkrb5support.so.0
- libkeyutils.so.1
- libcups.so.2
linux:
target:
- AppImage
- tar.xz
category: AudioVideo;Audio;Player
icon: assets/icons/icon.png
npmRebuild: false
publish:
provider: github
owner: jeffvli
repo: feishin
+66
View File
@@ -0,0 +1,66 @@
import react from '@vitejs/plugin-react';
import { externalizeDepsPlugin, UserConfig } from 'electron-vite';
import { resolve } from 'path';
import conditionalImportPlugin from 'vite-plugin-conditional-import';
import dynamicImportPlugin from 'vite-plugin-dynamic-import';
import { ViteEjsPlugin } from 'vite-plugin-ejs';
const currentOSEnv = process.platform;
const config: UserConfig = {
main: {
build: {
rollupOptions: {
external: ['source-map-support'],
},
sourcemap: true,
},
define: {
'import.meta.env.IS_LINUX': JSON.stringify(currentOSEnv === 'linux'),
'import.meta.env.IS_MACOS': JSON.stringify(currentOSEnv === 'darwin'),
'import.meta.env.IS_WIN': JSON.stringify(currentOSEnv === 'win32'),
},
plugins: [
externalizeDepsPlugin(),
dynamicImportPlugin(),
conditionalImportPlugin({
currentEnv: currentOSEnv,
envs: ['win32', 'linux', 'darwin'],
}),
],
resolve: {
alias: {
'/@/main': resolve('src/main'),
'/@/shared': resolve('src/shared'),
},
},
},
preload: {
plugins: [externalizeDepsPlugin()],
resolve: {
alias: {
'/@/preload': resolve('src/preload'),
'/@/shared': resolve('src/shared'),
},
},
},
renderer: {
css: {
modules: {
generateScopedName: 'fs-[name]-[local]',
localsConvention: 'camelCase',
},
},
plugins: [react(), ViteEjsPlugin({ web: false })],
resolve: {
alias: {
'/@/i18n': resolve('src/i18n'),
'/@/remote': resolve('src/remote'),
'/@/renderer': resolve('src/renderer'),
'/@/shared': resolve('src/shared'),
},
},
},
};
export default config;
+53
View File
@@ -0,0 +1,53 @@
import eslintConfigPrettier from '@electron-toolkit/eslint-config-prettier';
import tseslint from '@electron-toolkit/eslint-config-ts';
import perfectionist from 'eslint-plugin-perfectionist';
import eslintPluginReact from 'eslint-plugin-react';
import eslintPluginReactHooks from 'eslint-plugin-react-hooks';
import eslintPluginReactRefresh from 'eslint-plugin-react-refresh';
export default tseslint.config(
{ ignores: ['**/node_modules', '**/dist', '**/out'] },
tseslint.configs.recommended,
perfectionist.configs['recommended-natural'],
eslintPluginReact.configs.flat.recommended,
eslintPluginReact.configs.flat['jsx-runtime'],
{
settings: {
react: {
version: 'detect',
},
},
},
{
files: ['**/*.{ts,tsx}'],
plugins: {
'react-hooks': eslintPluginReactHooks,
'react-refresh': eslintPluginReactRefresh,
},
rules: {
...eslintPluginReactHooks.configs.recommended.rules,
...eslintPluginReactRefresh.configs.vite.rules,
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-duplicate-enum-values': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': 'warn',
curly: ['error', 'all'],
indent: [
'error',
'tab',
{
offsetTernaryExpressions: true,
SwitchCase: 1,
},
],
'no-unused-vars': 'off',
'no-use-before-define': 'off',
quotes: ['error', 'single'],
'react-refresh/only-export-components': 'off',
'react/display-name': 'off',
semi: ['error', 'always'],
'single-attribute-per-line': 'off',
},
},
eslintConfigPrettier,
);
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

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

After

Width:  |  Height:  |  Size: 101 KiB

+27
View File
@@ -0,0 +1,27 @@
server {
listen 9180;
sendfile on;
default_type application/octet-stream;
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 256;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 9;
location ${PUBLIC_PATH} {
alias /usr/share/nginx/html/;
try_files $uri $uri/ /index.html =404;
}
location ${PUBLIC_PATH}settings.js {
alias /etc/nginx/conf.d/settings.js;
}
location ${PUBLIC_PATH}/settings.js {
alias /etc/nginx/conf.d/settings.js;
}
}
-40593
View File
File diff suppressed because it is too large Load Diff
+130 -278
View File
@@ -1,252 +1,57 @@
{
"name": "feishin",
"productName": "Feishin",
"description": "Feishin music server",
"version": "0.3.0",
"scripts": {
"build": "concurrently \"npm run build:main\" \"npm run build:renderer\" \"npm run build:remote\"",
"build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
"build:remote": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.remote.prod.ts",
"build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts",
"build:web": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.web.prod.ts",
"rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app",
"lint": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx",
"lint:fix": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx --fix",
"lint:styles": "npx stylelint **/*.tsx",
"package": "ts-node ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never",
"package:pr": "ts-node ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --win --mac --linux",
"package:dev": "ts-node ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --dir",
"postinstall": "ts-node .erb/scripts/check-native-dep.js && electron-builder install-app-deps && cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.ts",
"start": "ts-node ./.erb/scripts/check-port-in-use.js && npm run start:renderer",
"start:main": "cross-env NODE_ENV=development electron -r ts-node/register/transpile-only ./src/main/main.ts",
"start:preload": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.preload.dev.ts",
"start:remote": "cross-env NODE_ENV=developemnt TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.remote.dev.ts",
"start:renderer": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.dev.ts",
"start:web": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.web.ts",
"test": "jest",
"prepare": "husky install",
"i18next": "i18next -c src/renderer/i18n/i18next-parser.config.js",
"prod:buildserver": "pwsh -c \"./scripts/server-build.ps1\"",
"prod:publishserver": "pwsh -c \"./scripts/server-publish.ps1\""
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"cross-env NODE_ENV=development eslint --cache"
],
"*.json,.{eslintrc,prettierrc}": [
"prettier --ignore-path .eslintignore --parser json --write"
],
"*.{css,scss}": [
"prettier --ignore-path .eslintignore --single-quote --write"
],
"*.{html,md,yml}": [
"prettier --ignore-path .eslintignore --single-quote --write"
]
},
"build": {
"productName": "Feishin",
"appId": "org.jeffvli.feishin",
"artifactName": "${productName}-${version}-${os}-${arch}.${ext}",
"asar": true,
"asarUnpack": "**\\*.{node,dll}",
"files": [
"dist",
"node_modules",
"package.json"
],
"afterSign": ".erb/scripts/notarize.js",
"electronVersion": "25.3.0",
"mac": {
"target": {
"target": "default",
"arch": [
"arm64",
"x64"
]
},
"type": "distribution",
"hardenedRuntime": true,
"entitlements": "assets/entitlements.mac.plist",
"entitlementsInherit": "assets/entitlements.mac.plist",
"gatekeeperAssess": false
},
"dmg": {
"contents": [
{
"x": 130,
"y": 220
},
{
"x": 410,
"y": 220,
"type": "link",
"path": "/Applications"
}
]
},
"win": {
"target": [
"nsis",
"zip"
]
},
"linux": {
"target": [
"AppImage",
"tar.xz"
],
"icon": "assets/icons/placeholder.png",
"category": "Development"
},
"directories": {
"app": "release/app",
"buildResources": "assets",
"output": "release/build"
},
"extraResources": [
"./assets/**"
],
"publish": {
"provider": "github",
"owner": "jeffvli",
"repo": "feishin"
}
},
"repository": {
"type": "git",
"url": "git+https://github.com/jeffvli/feishin.git"
},
"author": {
"name": "jeffvli",
"url": "https://github.com/jeffvli/"
},
"contributors": [],
"license": "GPL-3.0",
"bugs": {
"url": "https://github.com/jeffvli/feishin/issues"
},
"version": "0.17.0",
"description": "A modern self-hosted music player.",
"keywords": [
"subsonic",
"navidrome",
"airsonic",
"jellyfin",
"react",
"electron"
],
"homepage": "https://github.com/jeffvli/feishin",
"jest": {
"testURL": "http://localhost/",
"testEnvironment": "jsdom",
"transform": {
"\\.(ts|tsx|js|jsx)$": "ts-jest"
},
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/.erb/mocks/fileMock.js",
"\\.(css|less|sass|scss)$": "identity-obj-proxy"
},
"moduleFileExtensions": [
"js",
"jsx",
"ts",
"tsx",
"json"
],
"moduleDirectories": [
"node_modules",
"release/app/node_modules"
],
"testPathIgnorePatterns": [
"release/app/dist"
],
"setupFiles": [
"./.erb/scripts/check-build-exists.ts"
]
"bugs": {
"url": "https://github.com/jeffvli/feishin/issues"
},
"devDependencies": {
"@electron/rebuild": "^3.2.10",
"@pmmmwh/react-refresh-webpack-plugin": "0.5.5",
"@stylelint/postcss-css-in-js": "^0.38.0",
"@teamsupercell/typings-for-css-modules-loader": "^2.5.1",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.0.0",
"@types/electron-localshortcut": "^3.1.0",
"@types/jest": "^27.4.1",
"@types/lodash": "^4.14.188",
"@types/md5": "^2.3.2",
"@types/node": "^17.0.23",
"@types/react": "^18.0.25",
"@types/react-dom": "^18.0.8",
"@types/react-test-renderer": "^17.0.1",
"@types/react-virtualized-auto-sizer": "^1.0.1",
"@types/react-window": "^1.8.5",
"@types/react-window-infinite-loader": "^1.0.6",
"@types/styled-components": "^5.1.26",
"@types/terser-webpack-plugin": "^5.0.4",
"@types/webpack-bundle-analyzer": "^4.4.1",
"@types/webpack-env": "^1.16.3",
"@typescript-eslint/eslint-plugin": "^5.47.0",
"@typescript-eslint/parser": "^5.47.0",
"browserslist-config-erb": "^0.0.3",
"chalk": "^4.1.2",
"concurrently": "^7.1.0",
"core-js": "^3.21.1",
"cross-env": "^7.0.3",
"css-loader": "^6.7.1",
"css-minimizer-webpack-plugin": "^3.4.1",
"detect-port": "^1.3.0",
"electron": "^25.3.0",
"electron-builder": "^24.6.3",
"electron-devtools-installer": "^3.2.0",
"electron-notarize": "^1.2.1",
"electronmon": "^2.0.2",
"eslint": "^8.30.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-erb": "^4.0.3",
"eslint-import-resolver-typescript": "^2.7.1",
"eslint-import-resolver-webpack": "^0.13.2",
"eslint-plugin-compat": "^4.0.2",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-jest": "^26.1.3",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-react": "^7.29.4",
"eslint-plugin-react-hooks": "^4.4.0",
"eslint-plugin-sort-keys-fix": "^1.1.2",
"eslint-plugin-typescript-sort-keys": "^2.1.0",
"file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.0",
"husky": "^7.0.4",
"i18next-parser": "^6.3.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^27.5.1",
"lint-staged": "^12.3.7",
"mini-css-extract-plugin": "^2.6.0",
"postcss-scss": "^4.0.4",
"postcss-syntax": "^0.36.2",
"prettier": "^2.6.2",
"react-refresh": "^0.12.0",
"react-refresh-typescript": "^2.0.4",
"react-test-renderer": "^18.0.0",
"rimraf": "^3.0.2",
"sass": "^1.49.11",
"sass-loader": "^12.6.0",
"style-loader": "^3.3.1",
"stylelint": "^14.9.1",
"stylelint-config-css-modules": "^4.3.0",
"stylelint-config-rational-order": "^0.1.2",
"stylelint-config-standard-scss": "^4.0.0",
"terser-webpack-plugin": "^5.3.1",
"ts-jest": "^27.1.4",
"ts-loader": "^9.2.8",
"ts-node": "^10.7.0",
"tsconfig-paths-webpack-plugin": "^4.0.0",
"typescript": "^4.8.4",
"url-loader": "^4.1.1",
"webpack": "^5.71.0",
"webpack-bundle-analyzer": "^4.5.0",
"webpack-cli": "^4.9.2",
"webpack-dev-server": "^4.8.0",
"webpack-merge": "^5.8.0"
"license": "GPL-3.0",
"author": {
"name": "jeffvli",
"url": "https://github.com/jeffvli/"
},
"main": "./out/main/index.js",
"scripts": {
"build": "pnpm run typecheck && 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",
"dev": "electron-vite dev",
"dev:remote": "vite dev --config remote.vite.config.ts",
"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-code": "eslint --cache .",
"lint-code:fix": "eslint --cache --fix .",
"lint-styles": "stylelint 'src/**/*.{css,scss}'",
"lint-styles:fix": "stylelint 'src/**/*.{css,scss}' --fix",
"lint:fix": "pnpm run lint-code:fix && pnpm run lint-styles:fix",
"package": "pnpm run build && electron-builder",
"package:dev": "pnpm run build && electron-builder --dir",
"package:linux": "pnpm run build && electron-builder --linux",
"package:linux-arm64:pr": "pnpm run build && electron-builder --linux --arm64 --publish never",
"package:linux:pr": "pnpm run build && electron-builder --linux --publish never",
"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:pr": "pnpm run build && electron-builder --win --publish never",
"publish:linux": "electron-builder --publish always --linux",
"publish:linux-arm64": "electron-builder --publish always --linux --arm64",
"publish:mac": "electron-builder --publish always --mac",
"publish:win": "electron-builder --publish always --win",
"start": "electron-vite preview",
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false"
},
"dependencies": {
"@ag-grid-community/client-side-row-model": "^28.2.1",
@@ -254,73 +59,120 @@
"@ag-grid-community/infinite-row-model": "^28.2.1",
"@ag-grid-community/react": "^28.2.1",
"@ag-grid-community/styles": "^28.2.1",
"@emotion/react": "^11.10.4",
"@mantine/core": "^6.0.17",
"@mantine/dates": "^6.0.17",
"@mantine/form": "^6.0.17",
"@mantine/hooks": "^6.0.17",
"@mantine/modals": "^6.0.17",
"@mantine/notifications": "^6.0.17",
"@mantine/utils": "^6.0.17",
"@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",
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^4.0.0",
"@mantine/colors-generator": "^8.1.1",
"@mantine/core": "^8.1.1",
"@mantine/dates": "^8.1.1",
"@mantine/form": "^8.1.1",
"@mantine/hooks": "^8.1.1",
"@mantine/modals": "^8.1.1",
"@mantine/notifications": "^8.1.1",
"@tanstack/react-query": "^4.32.1",
"@tanstack/react-query-devtools": "^4.32.1",
"@tanstack/react-query-persist-client": "^4.32.1",
"@ts-rest/core": "^3.23.0",
"axios": "^1.4.0",
"@xhayper/discord-rpc": "^1.0.24",
"audiomotion-analyzer": "^4.5.0",
"auto-text-size": "^0.2.3",
"axios": "^1.6.0",
"cheerio": "^1.0.0",
"clsx": "^2.0.0",
"cmdk": "^0.2.0",
"dayjs": "^1.11.6",
"dompurify": "^3.1.6",
"electron-debug": "^3.2.0",
"electron-localshortcut": "^3.2.1",
"electron-log": "^4.4.6",
"electron-log": "^5.1.1",
"electron-store": "^8.1.0",
"electron-updater": "^4.6.5",
"electron-updater": "^6.3.9",
"fast-average-color": "^9.3.0",
"format-duration": "^2.0.0",
"framer-motion": "^10.13.0",
"fuse.js": "^6.6.2",
"history": "^5.3.0",
"i18next": "^21.6.16",
"i18next": "^21.10.0",
"idb-keyval": "^6.2.1",
"immer": "^9.0.21",
"is-electron": "^2.2.2",
"lodash": "^4.17.21",
"md5": "^2.3.0",
"memoize-one": "^6.0.0",
"motion": "^12.18.1",
"mpris-service": "^2.1.2",
"nanoid": "^3.3.3",
"net": "^1.0.2",
"node-mpv": "github:jeffvli/Node-MPV",
"overlayscrollbars": "^2.2.1",
"overlayscrollbars-react": "^0.5.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
"overlayscrollbars": "^2.11.1",
"overlayscrollbars-react": "^0.5.6",
"qs": "^6.14.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-error-boundary": "^3.1.4",
"react-i18next": "^11.16.7",
"react-icons": "^4.10.1",
"react-i18next": "^11.18.6",
"react-icons": "^5.5.0",
"react-image": "^4.1.0",
"react-loading-skeleton": "^3.5.0",
"react-player": "^2.11.0",
"react-router": "^6.5.0",
"react-router-dom": "^6.5.0",
"react-simple-img": "^3.0.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",
"styled-components": "^5.3.11",
"semver": "^7.5.4",
"swiper": "^9.3.1",
"zod": "^3.21.4",
"zustand": "^4.3.9"
"use-sync-external-store": "^1.5.0",
"ws": "^8.18.2",
"zod": "^3.22.3",
"zustand": "^5.0.5"
},
"resolutions": {
"styled-components": "^5"
"devDependencies": {
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
"@electron-toolkit/eslint-config-ts": "^3.0.0",
"@electron-toolkit/tsconfig": "^1.0.1",
"@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/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": "^35.1.5",
"electron-builder": "^26.0.12",
"electron-devtools-installer": "^3.2.0",
"electron-vite": "^3.1.0",
"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",
"typescript": "^5.8.3",
"vite": "^6.3.5",
"vite-plugin-conditional-import": "^0.1.7",
"vite-plugin-dynamic-import": "^1.6.0",
"vite-plugin-ejs": "^1.7.0"
},
"devEngines": {
"node": ">=14.x",
"npm": ">=7.x"
},
"browserslist": [],
"electronmon": {
"patterns": [
"!server",
"!src/renderer"
"pnpm": {
"onlyBuiltDependencies": [
"electron",
"esbuild"
]
}
},
"productName": "feishin"
}
+9656
View File
File diff suppressed because it is too large Load Diff
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
plugins: {
'postcss-preset-mantine': {},
},
};
-2331
View File
File diff suppressed because it is too large Load Diff
-24
View File
@@ -1,24 +0,0 @@
{
"name": "feishin",
"version": "0.3.0",
"description": "",
"main": "./dist/main/main.js",
"author": {
"name": "jeffvli",
"url": "https://github.com/jeffvli/"
},
"scripts": {
"electron-rebuild": "node -r ts-node/register ../../.erb/scripts/electron-rebuild.js",
"link-modules": "node -r ts-node/register ../../.erb/scripts/link-modules.ts",
"postinstall": "npm run electron-rebuild && npm run link-modules"
},
"dependencies": {
"cheerio": "^1.0.0-rc.12",
"mpris-service": "^2.1.2",
"ws": "^8.13.0"
},
"devDependencies": {
"electron": "25.3.0"
},
"license": "GPL-3.0"
}
+51
View File
@@ -0,0 +1,51 @@
import react from '@vitejs/plugin-react';
import path from 'path';
import { defineConfig, normalizePath } from 'vite';
import { ViteEjsPlugin } from 'vite-plugin-ejs';
import { version } from './package.json';
export default defineConfig({
build: {
emptyOutDir: true,
outDir: path.resolve(__dirname, './out/remote'),
rollupOptions: {
input: {
favicon: normalizePath(path.resolve(__dirname, './assets/icons/favicon.ico')),
index: normalizePath(path.resolve(__dirname, './src/remote/index.html')),
manifest: normalizePath(path.resolve(__dirname, './src/remote/manifest.json')),
remote: normalizePath(path.resolve(__dirname, './src/remote/index.tsx')),
worker: normalizePath(path.resolve(__dirname, './src/remote/service-worker.ts')),
},
output: {
assetFileNames: '[name].[ext]',
chunkFileNames: '[name].js',
entryFileNames: '[name].js',
},
},
sourcemap: true,
},
css: {
modules: {
generateScopedName: 'fs-[name]-[local]',
localsConvention: 'camelCase',
},
},
plugins: [
react(),
ViteEjsPlugin({
prod: process.env.NODE_ENV === 'production',
root: normalizePath(path.resolve(__dirname, './src/remote')),
version,
}),
],
resolve: {
alias: {
'/@/i18n': path.resolve(__dirname, './src/i18n'),
'/@/remote': path.resolve(__dirname, './src/remote'),
'/@/renderer': path.resolve(__dirname, './src/renderer'),
'/@/shared': path.resolve(__dirname, './src/shared'),
},
},
root: path.resolve(__dirname, './src/remote'),
});

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