Commit Graph

3930 Commits

Author SHA1 Message Date
Hosted Weblate a1b83f57b0 Translated using Weblate
Currently translated at 100.0% (1297 of 1297 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1297 of 1297 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 99.6% (1292 of 1297 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1297 of 1297 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>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-07-11 03:25:45 +02:00
jeffvli 9b3a47a27f fix scroll follow pause on manual scroll 2026-07-10 18:24:17 -07:00
jeffvli aea5a880ea reduce opacity of fullscreen player header when not hovered 2026-07-10 15:16:14 -07:00
jeffvli b4e530ea07 support additional lyric layers (#2211) 2026-07-10 15:12:17 -07:00
jeffvli 908e83a2f8 fix missing spaces between ttml word cues (#2214) 2026-07-10 12:48:34 -07:00
jeffvli 00506d06f1 fix inactive lyric color and slow down transitions 2026-07-10 11:48:19 -07:00
jeffvli 964e6f491a remove remote requirement for lyrics match display 2026-07-10 11:32:46 -07:00
jeffvli 7c1893f7f5 remove lyrics blur animation 2026-07-10 10:16:14 -07:00
jeffvli 5cfb80f75b fix lint 2026-07-10 02:21:17 -07:00
jeffvli 5804eb3215 fix queue scroll follow with album group 2026-07-10 02:13:52 -07:00
jeffvli 67a2be1559 add additional height calculation for album group 2026-07-10 01:45:39 -07:00
jeffvli f957fb0a05 on mediaNext, trigger stop on last track if repeat disabled 2026-07-10 01:12:26 -07:00
jeffvli 8fc30e6936 add links, favorite, rating to album group column (#2139)
- additionally fix drop and drop interactions
2026-07-10 00:59:07 -07:00
jeffvli 57155e15ed add missing album gain to Jellyfin (#2199) 2026-07-09 22:03:02 -07:00
jeffvli 7d4c55fc37 fix JoinedArtists not truncating on ItemCard 2026-07-09 21:52:35 -07:00
jeffvli f91b58ea5b disable useTransition from router 2026-07-09 21:37:29 -07:00
Jeff 355b19c1cb Add support for OpenSubsonic enhanced lyrics (#2208) 2026-07-09 21:32:05 -07:00
mannansainidev 0c89fea1ea feat: add jukebox player engine for server-side playback (#2109)
* feat: add jukebox player engine for server-side playback

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-07-09 21:29:22 -07:00
Logan Rupe dd136f91e6 feat(player): right-click volume icon to switch audio output device (#2189)
* feat(player): add right-click audio output device menu to volume icon

Right-clicking the volume/speaker icon in the player bar now opens a
context menu listing available audio output devices, with the active
device checkmarked and a System default reset option.

Selecting a device writes to the existing audioDeviceId (web) or
mpvAudioDeviceId (mpv) playback settings, so the choice is applied live
and persisted across restarts via the settings store. Unlike the
settings-page selector, the menu is not disabled during playback.

* refactor(player): drop redundant audio menu label, document wrapper div

Address review feedback: remove the self-explanatory ContextMenu.Label
from the audio output menu, and add a comment explaining why the volume
icon is wrapped in a div (Mantine Tooltip does not forward Radix's
asChild onContextMenu/ref to the button).
2026-07-09 21:11:10 -07:00
vimae c64807cf94 feat: musical speed controls (#2191)
* feat: musical speed controls
2026-07-09 21:06:46 -07:00
jeffvli e3c2605e1d trigger stop event on queue end 2026-07-09 20:51:19 -07:00
Hosted Weblate 511875689a Translated using Weblate
Currently translated at 100.0% (1290 of 1290 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1290 of 1290 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 97.0% (1252 of 1290 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 100.0% (1290 of 1290 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: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: linger <linger0517@gmail.com>
2026-07-07 07:01:45 +00:00
Kendall Garner 554e49cb85 note that sso is not supported for ND auth 2026-07-05 21:50:22 -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