Commit Graph

168 Commits

Author SHA1 Message Date
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
jeffvli 37ada07ee2 add "stopped" playback state and event handlers 2026-06-29 20:23:46 -07:00
jeffvli 46b94a83f1 fix reportPlayback event chain (#2131)
- properly send stopped event on song change
- properly send both starting and playing evento n song change instead of only starting
2026-06-06 18:41:59 -07:00
jeffvli 0e24eeeb1c only show queue save toast on explicit request (#2090) 2026-06-03 00:28:12 -07:00
jeffvli 7243ed7f15 fix timestamp restore when song switched before playback start (#2094) 2026-05-31 23:09:33 -07:00
Kendall Garner 6aab8d4121 fix(scrobble): use proper pause/unpause for seek, use ms for subsonic 2026-05-31 21:13:11 -07:00
jeffvli 1f5907716f disable interval-based timeupdate scrobbles 2026-05-28 00:59:30 -07:00
jeffvli 239ef4a4ec add album mode for autodj
- add selection modes: similar, random
- add autodj settings in playerbar popover
2026-05-25 19:23:37 -07:00
jeffvli 504bbeed91 handle positional scrobbles for OS 2026-05-25 13:26:11 -07:00
Kendall Garner 7befd70e21 Apply additional security recommendations (#2050)
* enable sandbox

* enable CSP (umami tentatively works?) and reduce amount of ipc APIs exposed

* remove csp from index
2026-05-22 22:09:22 -07:00
Tiago Simionato 8f40894926 feat: persist player timestamp (#2043)
* feat: persist player timestamp
2026-05-21 00:16:46 -07:00
jeffvli ffe59b2c78 refactor scrobbling to use duration instead of progress (#2010)
- add scrobble status debug and indicator
- add force / reset scrobble
2026-05-12 22:04:46 -07:00
Jeff e2a1d813a9 Use proper casing for i18n locales (#1998) 2026-05-11 19:42:07 -07:00
jeffvli 323130a877 add toggle for app-suspension for powersave block (#1992) 2026-05-01 21:24:45 -07:00
jeffvli f5eb3f1488 wrap useHotkeys to disable on command palette open (#1925) 2026-04-28 19:31:41 -07:00
York b99899f128 fix MPV visualizer on macOS and handle exclusive mode UX (#1930) 2026-04-13 20:47:03 -07:00
Auzlex 895cbb4d16 fix(media-session): prevent handlers from being destroyed during playback (#1898)
Handlers were being registered and destroyed on state change/re-render,
causing media controls to vanish during rapid use or quick track skipping.
Persist handlers and add debounce for rapid track skipping.

Tested on Windows, Linux, and Android.
2026-04-05 22:27:04 -07:00
jeffvli 3f300c40cc add in-app prompt for system audio connection 2026-04-05 22:19:09 -07:00
jeffvli ef129e4638 remove video from displayMedia request 2026-04-05 07:58:01 -07:00
jeffvli 94886a2d5a add system audio loopback for webaudio 2026-04-05 00:48:38 -07:00
Lyall dfdac28f53 Fix server queue saving/restoring on Navidrome and OpenSubsonic (#1828)
* fix server queue saving

* fix error when attempting to restore empty queue

* queue items optional

* make playQueueByIndex optional

* fix incorrect error message
2026-03-12 13:41:50 +00:00
Kendall Garner 49c28299af remove package.lock, make lint happy 2026-03-06 21:04:51 -08:00
Kendall Garner 0bb6fea3db don't assume server exists in enable either 2026-03-06 20:59:13 -08:00
Kendall Garner 7027084394 fix(autosave): server isn't guaranteed to exist 2026-03-06 20:52:41 -08:00
Kendall Garner 7c4cbaad9a feat(player): add server-side autosave capability 2026-03-06 20:01:35 -08:00
jeffvli 5039012fcb catch errors on desktop scrobble notification failure (#1723) 2026-02-18 20:54:31 -08:00
jeffvli 75af57a7b3 use correct player seek event for mpris updater (#1740) 2026-02-18 20:37:18 -08:00
Jeff f39a7f8d6f Add album detail list view (#1681) 2026-02-09 21:56:08 -08:00
Mateleo d93f6e8720 feat: enable scrobbling on song repeat and fix package name typo (#1662)
- Add `handleScrobbleFromRepeat` callback to reset scrobble state and send 'start' event when player repeats a song, ensuring accurate scrobbling in repeat mode.
- Fix typo in `web.vite.config.ts` by correcting '@tanstack_react-query-persist-client' to '@tanstack/react-query-persist-client' for proper package reference.
2026-02-07 15:25:29 -08:00
Steffen Martinsen b8228844df feat: Add support for player controls in macOS dock menu (#1627)
* Added simple macOS dock menu similar to tray menu

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

* Added missing property sortName to silence TS error
2026-01-30 12:01:02 -08:00
jeffvli 81af324260 handle radio metadata for mpris / mediasession (#1586) 2026-01-22 01:30:45 -08:00
jeffvli f4072c183b refactor feature hooks to be conditionally initialized 2026-01-21 02:23:25 -08:00
jeffvli 291daa434c validate that the current song is different from server before revalidating in queue 2026-01-17 13:19:56 -08:00
jeffvli 2827b2ae01 invalidate the album query on scrobble submission 2026-01-16 04:23:57 -08:00
jeffvli fc5024be90 revalidate current song in queue during playback 2026-01-16 04:18:02 -08:00
jeffvli c2de979527 fix incorrect condition to try similar songs in autodj 2026-01-07 13:57:53 -08:00
jeffvli a66c67e86d optimize settings store 2026-01-03 01:01:54 -08:00
jeffvli aaf840d358 resend mediasession on player repeat (#1472) 2026-01-01 20:17:49 -08:00
jeffvli 91ccc71fcd fix media session using stale image reference (#1296) 2025-12-31 01:51:52 -08:00
jeffvli ffdef596ad auto follow queue when autodj is triggered 2025-12-28 14:34:38 -08:00
jeffvli 0a54f7c44c remove similarSongs from autodj when music folder is selected (#1451)
- Similar songs queries for both Subsonic/Jellyfin do not support querying by musicFolderId
2025-12-28 14:09:22 -08:00
jeffvli 4eac6457ea add MPRIS volume handler (#1415) 2025-12-28 01:15:38 -08:00
jeffvli dff182cbc5 use correct id for runtime images in useItemImageUrl 2025-12-26 14:04:48 -08:00
jeffvli 076d9b3083 re-add pause / unpause events to Jellyfin scrobble (#1413) 2025-12-25 01:47:04 -08:00
jeffvli ce570eddd2 improve auto dj to trigger on remaining songs change 2025-12-23 21:05:40 -08:00
Jeff 25bfb65b6d Add image URL generation at runtime to allow for dynamic image sizes (#1439)
* add getImageUrl to domain endpoints

* add new ItemImage component and hooks to generate image url

* add configuration for image resolution based on types
2025-12-23 20:18:52 -08:00
Kendall Garner ed5d590a6b feat: sync play queue for navidrome/subsonic (#1335)
---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2025-12-12 21:05:00 -08:00
jeffvli 32062d7c0f fix auto dj not triggering on single song queue (#1359) 2025-12-10 01:06:16 -08:00
jeffvli 65a7c3440b add player autodj (#7) 2025-12-07 15:04:39 -08:00
jeffvli 42fca271ce remove stale start event on song change for jellyfin scrobble (#1332) 2025-12-06 18:12:15 -08:00