Commit Graph
595 Commits
Author SHA1 Message Date
Andrew G. Dunn 6b6701e973 Populate richer DIDL-Lite metadata for DLNA cast (#934)
Extend MediaItemMetadata with TrackNumber, Size, BitRate, SampleRate,
BitDepth, and ChannelCount (all already present on Track) and populate
them in Track.Metadata(). Thread them through dlnaplayer.go into the
avtransport.MediaItem so the renderer's DIDL-Lite includes upnp:artist,
upnp:album, upnp:originalTrackNumber, plus <res> attributes for
duration, size, bitrate, sampleFrequency, bitsPerSample, and
nrAudioChannels. The previously dropped Duration field is now
populated too.

For cover art, add a CoverArtPathFn callback on PlaybackManager wired
to ImageManager.GetCoverArtPath in app.go. The DLNA player invokes it
when a track is queued, registers the cached cover-thumbnail path
with the local proxy, and emits the resulting proxy URL as
upnp:albumArtURI so the renderer can display album art alongside the
audio.

Bumps go-upnpcast to pull in the MediaItem fields and DIDL-Lite
emission added in supersonic-app/go-upnpcast#4.
2026-06-01 16:39:48 -07:00
Drew Weymouth 2d864a5320 add support for OpenSubsonic playbackReport extension (#910)
* add support for OpenSubsonic playbackReport extension

* better style
2026-04-22 11:00:51 -07:00
tdakkota cfa45a4647 feat(ipc): add an endpoint for getting current track (#911) 2026-04-20 19:36:11 -07:00
Drew Weymouth 84440f9935 support cover art for internet radio stations 2026-04-09 08:25:43 -07:00
Drew Weymouth 8636e54c3a Fix #877: use XML API for Funkwhale servers since they don't implement JSON correctly 2026-04-05 13:11:57 -07:00
tk 6aa53d6cfe Merge pull request #896 from Tim-Kaiser/ISSUE-895
Fix #895: Fix crash on track change and scrobble
2026-04-05 09:53:30 -07:00
Drew Weymouth e23dfb8554 Fix #875: ensure shuffle button on album/playlist/etc pages works regardless of queue shuffle 2026-03-13 07:59:09 -07:00
Drew Weymouth 03fd760589 use JSON instead of XML in Subsonic API 2026-03-11 07:38:58 -07:00
Drew Weymouth 02e12b3cbe handle switch players while in pendingLoadPaused state 2026-03-05 06:59:28 -08:00
Drew Weymouth cfcd7a52e4 delete accidental committed file 2026-03-05 06:54:51 -08:00
Drew Weymouth c3b9763724 handle stop properly when pendingLoadPaused 2026-03-05 06:42:22 -08:00
Drew Weymouth 47668bcec9 stop waveform from refreshing when unpausing the initial track 2026-02-27 08:29:57 -08:00
Drew Weymouth 6782e8d470 make sure waveform shows up for track loaded paused when starting app 2026-02-21 10:17:20 -08:00
Drew WeymouthandClaude Sonnet 4.6 dba540861f fix: defer MPV playback start until user unpauses on session restore
Instead of play → pause → sleep → seek when restoring a paused session,
introduce loadTrackPaused which sets internal state and fires UI/OS
callbacks (song change, paused) without touching MPV. On Continue(),
detect pendingLoadPaused and start MPV playback from the saved position.

Also triggers waveform pre-generation for the paused track via the
onBeforeSongChange hook.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 09:40:59 -08:00
Drew Weymouth c462720424 fix bug where unshuffling while playing last track in linear queue order crashes at end of track 2026-02-20 18:11:17 -08:00
Drew Weymouth 68268c323b fix order of operations when toggling shuffle 2026-02-20 17:46:37 -08:00
Siiiiinth 294be9a0a3 fix track restarting on shuffle 2026-02-20 16:16:52 +01:00
Siiiiinth 91701902e6 fixed playTrackAt when double clicking track 2026-02-20 15:57:54 +01:00
Siiiiinth 194e15cff6 Merge branch 'main' into feature/shuffle 2026-02-20 15:18:22 +01:00
Drew Weymouth 6b382c6293 Fix #857: Clear in-memory cache as well as on disk 2026-02-19 08:27:32 -08:00
Drew WeymouthandClaude Sonnet 4.6 9dd606ce73 Normalize server URLs before connecting (#861)
* Fix #304: normalize server URLs before connecting

Prepend http:// when no scheme is present and strip trailing slashes
for all server types. For Jellyfin, additionally strip /web/index.html
and /web path suffixes that users copy from the browser URL bar.

Normalization is applied in ServerManager.connect() on the by-value
parameter, so stored config is never mutated.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* move url normalize funcs

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-17 19:34:47 -08:00
Drew WeymouthandClaude Sonnet 4.6 e21908cd24 Add -reload-theme CLI flag to re-apply the current theme file (#860)
* Add -reload-theme CLI flag to re-apply theme via IPC

Sends a reload-theme IPC message to a running instance, causing it to
call fyne.CurrentApp().Settings().SetTheme(m.theme). Follows the same
callback pattern as -show (OnReactivate) and quit (OnExit).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* actually re-read theme file

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-17 16:56:51 -08:00
Siiiiinth 279bc997aa removed unnecessary guard 2026-02-15 21:14:30 +01:00
Siiiiinth dccd2d8f1a clarify loadItems functionality 2026-02-15 20:54:14 +01:00
Siiiiinth a9b3a3d9f4 typo 2026-02-15 19:26:02 +01:00
Siiiiinth bf2cb25a7a move err handling 2026-02-15 19:24:56 +01:00
Siiiiinth 9919f59b47 changed comment 2026-02-15 18:53:44 +01:00
Siiiiinth cc35b54898 fixed typo 2026-02-15 18:44:41 +01:00
Siiiiinth cba4d9bd27 fixed track removal 2026-02-15 10:16:04 +01:00
Siiiiinth 3b22a1b261 Merge branch 'main' into feature/shuffle 2026-02-15 10:02:44 +01:00
Drew Weymouth 497c61e724 Fix #854: bounds-check for setNextTrack during handleTimePosUpdate 2026-02-13 07:47:19 -08:00
Siiiiinth d463971ce8 fixed bug in SetShuffle 2026-02-09 19:12:19 +01:00
Siiiiinth d077bfb953 load full queue state on start 2026-02-09 18:48:50 +01:00
Siiiiinth 1e1e3f7106 fixed various bugs with inserting and adding tracks 2026-02-09 13:43:36 +01:00
Siiiiinth a54d81ccca merge conflicts 2026-02-09 08:11:05 +01:00
Siiiiinth 48226d5461 wip restore queues on start 2026-02-09 08:09:01 +01:00
Drew Weymouth ead7364632 Merge pull request #835 from M0Rf30/feat/equalizer-improvements
Add equalizer preset management and AutoEQ integration
2026-02-08 17:50:07 -08:00
Drew Weymouth f2440d9d15 some log cleanup 2026-02-08 17:46:20 -08:00
Drew Weymouth 6c84910553 renaming 2026-02-08 17:15:38 -08:00
Drew Weymouth b52aa5b36f rate-current CLI option (#847) 2026-02-07 10:18:51 -08:00
Gianluca Boiano f302612d53 chore: remove dead code 2026-02-06 18:06:59 +01:00
Drew Weymouth 7956174c0e fix fC of 10-band eq 2026-02-06 08:48:30 -08:00
Drew Weymouth daf0440fbc extend searchdialog / SearchResult to properly support headphone profiles 2026-02-06 08:27:52 -08:00
Gianluca Boiano b0b2dc46f9 Update player to support both 10-band and 15-band equalizers 2026-02-06 02:50:40 +01:00
Gianluca Boiano 0097b0a052 Add 10-band equalizer support and AutoEQ integration 2026-02-06 02:50:39 +01:00
Drew Weymouth 3c46889014 Extract and display radio ICY metadata (#845)
* extract and display radio ICY metadata

* fix crash when casting radio station
2026-02-05 07:51:15 -08:00
Gianluca Boiano 2e33b81914 Improve code quality and thread safety (#844)
- Format Go files (gofmt) for backend/windows/notify*.go
- Add thread safety to Stopwatch with sync.Mutex
- Add comprehensive unit tests for Stopwatch with race detection
- Add godoc comments to ImageCache public APIs
- Improve IPC documentation with platform-specific socket path details
- Document portable mode TODO for future enhancement
2026-02-03 11:39:47 -08:00
Gianluca Boiano ada1564be7 Fix WidgetPool goroutine and ticker leak
- Add context cancellation to WidgetPool cleanup goroutine
- Properly stop ticker when context is canceled
- Add BackgroundContext() getter method to App for context access
- Pass application context to NewWidgetPool for lifecycle management

This fixes a resource leak where the cleanup goroutine would run
indefinitely without any way to stop it, preventing proper cleanup
on application shutdown.
2026-02-02 16:31:56 +01:00
Gianluca Boiano 43e8d0a453 Optimize resource usage in waveform generation and image cache
- Replace sleep-based polling in waveform generation with channel-based
  synchronization to reduce CPU usage and improve responsiveness
- Add sync.Pool for audio buffers in waveform analysis to reduce memory
  allocations
- Fix critical bug in ImageCache where struct field updates were not
  being persisted to the map, causing LRU tracking to fail
- Optimize ImageCache evictOne() to use single pass instead of two
  separate iterations through all cache items
- Upgrade read locks to write locks in ImageCache Get methods to ensure
  struct updates are properly saved
2026-02-01 22:29:28 +01:00
Gianluca Boiano 53b91f5d43 Disable waveform seekbar by default 2026-02-01 22:18:18 +01:00