Commit Graph

3920 Commits

Author SHA1 Message Date
jeffvli 0ac24a4165 remove lyric agent attribution display 2026-07-09 20:07:49 -07:00
jeffvli 63f6a6620d clean up animations 2026-07-09 14:08:23 -07:00
jeffvli c0c03bc414 properly handle settings state on lyrics follow 2026-07-09 03:59:20 -07:00
jeffvli 04258061e2 fix furigana bugged animation on highlight 2026-07-09 03:38:10 -07:00
jeffvli 19ec6e2f0a fix romaji showing up on non-kana lines 2026-07-09 03:38:10 -07:00
jeffvli 2d363190bd show loading spinner on refetching 2026-07-09 03:38:09 -07:00
jeffvli df37123382 add setting for lyrics follow alignment 2026-07-09 03:37:44 -07:00
jeffvli bdcc88cbfe add setting for lyrics container padding 2026-07-09 02:45:13 -07:00
jeffvli fefbf7e3e6 remove lyrics highlight on pause 2026-07-09 02:45:13 -07:00
jeffvli 032c17acf4 fix lyrics loading state 2026-07-09 02:44:49 -07:00
jeffvli bd5cd672ef refactor player timestamp hook with fixed interval 2026-07-09 02:44:20 -07:00
jeffvli 88b570cacb implement OS enhanced/karaoke lyrics 2026-07-09 02:43:57 -07:00
jeffvli ef3f3043bc performance refactor for synchronized lyrics timestamp/status subscribers 2026-07-08 10:41:44 -07:00
jeffvli 7b5df97fa0 fix list select all hotkey (#2195) 2026-07-05 21:25:18 -07:00
Maurits 2ad4c58dcd fix: startup resume-seek cancelled when shuffle is enabled (#2203)
applyStartupSeek() compared the armed target song against
getQueue().items[player.index], but player.index is a position in the
shuffled order while getQueue().items is always the default order. With
shuffle enabled the lookup resolves to the wrong song, the uniqueId
check fails, and the startup resume-seek is silently cancelled — the
track then plays from 0:00 and the progress poller overwrites the
persisted timestamp.

Use getCurrentSong() instead, which maps the index through
queue.shuffled, matching how the seek target is armed.

Fixes #2202

Co-authored-by: Maurits <WhoCarrot@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 01:10:36 +00:00
Hosted Weblate 972bd22ddf Translated using Weblate
Currently translated at 99.6% (1284 of 1289 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

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

Co-authored-by: lorduskordus <lorduskordus@gmail.com>
Co-authored-by: rimasx <riks_12@hot.ee>
2026-07-05 18:01:22 +02:00
Hosted Weblate e0091f22ce Translated using Weblate
Currently translated at 48.0% (620 of 1289 strings) (Portuguese (Brazil))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/

Translated using Weblate

Currently translated at 43.8% (565 of 1289 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: Camembert <camembert1342@gmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-07-04 15:01:35 +00:00
Ahmed Alabsi 022d227d5e perf: use crypto.getRandomValues() for higher-quality shuffle in music player (#2181)
* fix: use crypto-safe randomness in shuffle helpers
2026-07-02 01:01:34 -07:00
Hosted Weblate 31f12a39b2 Translated using Weblate
Currently translated at 13.8% (178 of 1289 strings) (Thai)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/th/

Translated using Weblate

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

Translated using Weblate

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

Translated using Weblate

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

Translated using Weblate

Currently translated at 25.8% (333 of 1289 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Strom.wang <811191336@qq.com>
Co-authored-by: man sun <masrton888@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-07-01 09:01:30 +00:00
Hosted Weblate a6d82374dd Translated using Weblate
Currently translated at 12.8% (166 of 1289 strings) (Thai)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/th/

Co-authored-by: man sun <masrton888@gmail.com>
2026-06-30 08:56:25 +02:00
Kendall Garner 42bd8d34d9 fix(sidebar): only re-expand sidebar when enabled 2026-06-29 21:06:32 -07:00
jeffvli b397790402 additional fix for furigana/romaji lyric handlers (#2188)
- Romaji conversion joined all synced lyric lines into one string. Because the block contained kana somewhere, hasKana passed for the entire array of lyrics.
2026-06-29 20:50:13 -07:00
Hosted Weblate 7231f73ba7 Translated using Weblate
Currently translated at 100.0% (1289 of 1289 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 48.3% (622 of 1287 strings) (Ukrainian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/

Translated using Weblate

Currently translated at 100.0% (1287 of 1287 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Translated using Weblate

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

Translated using Weblate

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

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: albatrays <weblate.duct925@passmail.net>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-06-30 05:29:06 +02:00
jeffvli 37ada07ee2 add "stopped" playback state and event handlers 2026-06-29 20:23:46 -07:00
York a221a84792 fix: romaji duplicate lines for non-Japanese lyrics (#2188) 2026-06-29 19:11:46 -07:00
Norman aa3c9251f5 feat: album group has a config and can set the image size (#2153)
* Created a new album group configuration which includes (for now) an option to set the image size of the album group artwork.
2026-06-29 19:00:20 -07:00
Benjamin 751ec7f835 fix lyric desync due to scroll issues (#2110) 2026-06-29 18:50:58 -07:00
Hosted Weblate 14bad5dbd7 Translated using Weblate
Currently translated at 100.0% (1287 of 1287 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 69.1% (889 of 1285 strings) (Hungarian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Soderes Sanyi <kennex@protonmail.com>
Co-authored-by: York <goog10216922@gmail.com>
2026-06-29 07:21:14 +02:00
BlackHoleFox 94aa34f6b2 Improve Jellyfin playlist loading and modification performance times (#2184)
* Remove unneeded Fields from getPlaylistSongList

* Add optimized controller function for playlist addition duplication checks

* Remove Jellyfin People data handling

* move artist map inline

---------

Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
2026-06-29 05:21:04 +00:00
Kendall Garner da445b815d feat(genre): support sorting by track/album count 2026-06-28 19:39:32 -07:00
Tarulia c875146779 feat: add setting for static window title (#2183) 2026-06-29 01:35:42 +00:00
Kendall Garner 9806d2f553 fix: require all sorts to have default value 2026-06-28 17:36:14 -07:00
Kendall Garner 18a7fd0731 disconnect rpc on discord unmount 2026-06-28 15:31:15 -07:00
Hosted Weblate 062617bb40 Translated using Weblate
Currently translated at 100.0% (1285 of 1285 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

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

Translated using Weblate

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

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
2026-06-28 05:01:23 +00:00
York f8ca8861fc feat: add romaji lyrics display (#2180) 2026-06-26 21:07:58 -07:00
Ryan Kupka 26eea7422d fix: recover mpv playback after the OS resumes from sleep (#2172)
mpv/ffmpeg had no network-level timeout or reconnect options, so a
network stream left open across a system sleep would block forever on
the now-dead TCP connection instead of failing or reconnecting. Since
Node-MPV's IPC commands only resolve when mpv replies, a wedged mpv
process also made quit()/restart hang indefinitely, so the only way
out was to kill the whole app.

- Add --network-timeout and ffmpeg reconnect options to mpv's default
  parameters so a stalled stream fails fast instead of hanging.
- Make the quit() helper resilient to an unresponsive mpv process by
  racing it against a timeout and force-killing as a fallback.
- Listen for Electron's powerMonitor 'resume' event and tell the
  renderer to reload mpv, so playback recovers automatically instead
  of requiring a manual app restart.
2026-06-26 19:18:27 -07:00
Hosted Weblate 21d788226c Translated using Weblate
Currently translated at 100.0% (1283 of 1283 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
2026-06-26 22:01:23 +02:00
Hosted Weblate 9a1bf8f4a9 Translated using Weblate
Currently translated at 48.0% (616 of 1283 strings) (Ukrainian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/

Co-authored-by: albatrays <weblate.duct925@passmail.net>
2026-06-24 15:27:33 +02:00
Hosted Weblate 0fab3ba318 Translated using Weblate
Currently translated at 100.0% (1283 of 1283 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

Currently translated at 100.0% (1283 of 1283 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Translated using Weblate

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

Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: rimasx <riks_12@hot.ee>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-06-24 10:01:26 +00:00
Norman 5ddbfcbfee Highlight the playlist in the left panel on play (#2025)
* Fixed bad smart playlist field s

* first try to add playlist highlight

* Simplified calls

* Now works for grids too.

* Derive the playlist highlight from the currently-playing track's origin instead of a stale global field.

* addressed comments
2026-06-24 03:18:02 +00:00
Ilya Shurupov b6519e9839 fix(sharing): copy share link to clipboard from within the user gesture (#2135)
The share URL is only known after the create-share request resolves, so the
previous navigator.clipboard.writeText() in the mutation onSuccess callback ran
outside the originating click's user activation. Firefox and Safari reject such
writes ('Clipboard write was blocked due to lack of user activation'), so the
link was never copied (and the toast still claimed success).

Issue clipboard.write() synchronously inside the submit gesture with a
ClipboardItem whose text/plain value is a promise resolving to the share URL,
which preserves the user activation while the share is created. Falls back to
writeText, and finally to the existing 'click to open' toast when the clipboard
is unavailable or blocked, with the toast text reflecting whether the copy
actually succeeded.

Co-authored-by: ilusha <ilusha.basic@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:03:38 -07:00
Hosted Weblate 2103c3b8c6 Translated using Weblate
Currently translated at 100.0% (1283 of 1283 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

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

Translated using Weblate

Currently translated at 48.1% (601 of 1249 strings) (Ukrainian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/

Translated using Weblate

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

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: albatrays <weblate.duct925@passmail.net>
2026-06-23 07:03:19 +02:00
York 4a7f084b59 fix: lyrics export issue when furigana is enabled (#2175)
* fix: lyrics export issue when furigana is enabled
2026-06-22 22:03:13 -07:00
jeffvli 5ef4744c44 bump electron-builder to latest, fix alpha build 2026-06-22 21:15:51 -07:00
York ecda4ef8bc fix: add i18n for EQ settings (#2174)
* fix: add i18n for EQ settings

* reuse common reset i18n labels
2026-06-22 14:17:50 +00:00
York 0ed68e8ebb feat: add Japanese Furigana support to lyrics display (#2161) 2026-06-21 19:11:20 -07:00
jeffvli 417365f091 fix replaygain volume jump (#1576) 2026-06-21 18:49:43 -07:00
Hosted Weblate ff8a21af08 Translated using Weblate
Currently translated at 100.0% (1247 of 1247 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

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

Co-authored-by: rimasx <riks_12@hot.ee>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-06-21 12:01:22 +02:00
jeffvli ff426bda6d add unknown MediaType to Jellyfin playlist fetch (#2063) 2026-06-19 22:08:10 -07:00
jeffvli 0664b0ad02 fix lint 2026-06-19 22:07:42 -07:00