Conversation
30d3b26 to
ba0c88b
Compare
|
Thanks! This looks pretty cool, but heads-up it will take me awhile to review and test this. I also want to let #820 finish up first, and this will likely have to be rebased and have merge conflicts with the queue shuffle implementation, which will have to be added for MPD as well |
937a5e3 to
a609fbf
Compare
1205d2a to
731ef0d
Compare
|
OK, the shuffle PR is in! There will be probably pretty significant merge conflicts when rebasing this, but I think nothing else coming up should cause much or any merge headaches later on. I will aim to put out a feature release soon, and if necessary a bugfix release, and then to have this go in the feature release after that. I guess I'll have to set up a MPD server to test with :) but I'll start looking over the code once you've rebased and implemented shuffling for MPD and add comments as I see things. |
d557341 to
7bd0617
Compare
|
Hello, is it possible to test this version ? I don’t know how to built :( |
0937a07 to
d4608ae
Compare
https://github.com/dweymouth/supersonic/actions/runs/22869505037/artifacts/5836111009 |
|
Hi, thank you M0Rf30 ! I just tried it :) 1st impression : it works ! It connects successfully to my navidrome and my MPD and everything works fine. Now the question I ask myself is more about the implementation : in fact we have TWO separate libraries. What would be really cool (if possible, I don't know) would be to use the same library, just switch the audio output... Thanks again ! |
d4608ae to
f4beaca
Compare
|
Could the Wikipedia and Deezer agents be implemented as a fallback for all servers rather than specific to the MPD implementation? (like the existing LrcLib integration for example). We should also add a checkbox to the settings dialog to disable these integrations for users who don't want Supersonic reaching out to any network endpoints besides their server. This could be done in a separate PR to main, and then merging that in and rebasing this would lessen its line count a bit and make it easier to review thoroughly :) |
6b6c218 to
8b64c5f
Compare
It will not be in scope to have MPD and Navidrome merged into a single library on the Supersonic side. It has to assume the library is different per-server. If you want to play back music from your server but also be able to stream the same library to a client, you're looking for Navidrome (Subsonic)'s Jukebox mode, which isn't currently supported by Supersonic but will probably be a lot easier to support after this PR |
Extract artist info fetching from external sources (Deezer for images, Wikipedia for biographies) into a shared ArtistInfoManager that works as a fallback for all server types, not just MPD. When a server returns incomplete artist info (missing biography or image), the manager automatically queries Deezer and Wikipedia to fill in the gaps. This follows the same pattern as the existing LrcLib lyrics fallback. A new 'Enable Deezer/Wikipedia artist info' checkbox in Settings > Advanced allows users to disable these external integrations.
Extract artist info fetching from external sources (Deezer for images, Wikipedia for biographies) into a shared ArtistInfoManager that works as a fallback for all server types, not just MPD. When a server returns incomplete artist info (missing biography or image), the manager automatically queries Deezer and Wikipedia to fill in the gaps. This follows the same pattern as the existing LrcLib lyrics fallback. A new 'Enable Deezer/Wikipedia artist info' checkbox in Settings > Advanced allows users to disable these external integrations.
Remove the embedded Deezer/Wikipedia artist info fetcher from the MPD backend and use the shared ArtistInfoManager (from feat/external-artist-info) instead. This eliminates ~350 lines of duplicated code. - Delete backend/mediaprovider/mpd/artistinfo.go - Simplify MPD GetArtistInfo to return empty (manager handles fallback) - Remove CacheManager interface (cache now in shared manager) - Remove Language field from MPDServer (shared fetcher reads from config) - Thread ArtistInfoManager through grid view pages and router - Update OnLoadArtistImage callback to include artist name for fallback
8b64c5f to
de18960
Compare
|
Ok I understand, thank for your answer ! I’ll have a look later if one day Supersonic supports Jukebow mode 👍 this app is really nice. |
Hey! This adds MPD (Music Player Daemon) as a supported server type.
What's this about?
MPD is different from Subsonic/Jellyfin - it doesn't stream audio to clients, it plays audio directly on the server. So Supersonic connects to MPD and controls playback remotely (jukebox mode), while still providing the full browsing experience.
How it works
Technical bits
backend/mediaprovider/mpd/package with the provider implementationJukeboxPlayerto support event-driven status updates (uses MPD idle commands instead of polling when available)Testing
Tested against MPD 0.23.x with a ~50k track library. Works well with ncmpcpp and other clients running simultaneously.
Let me know if you have questions or want me to change anything.