From de8539df0a55b8fc828f3f2a51c2852643759a0d Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sun, 5 Nov 2023 14:51:59 -0800 Subject: [PATCH] attach play action to track results in quick search --- backend/mediaprovider/mediaprovider.go | 2 ++ backend/mediaprovider/subsonic/subsonicmediaprovider.go | 8 ++++++++ backend/playbackmanager.go | 9 +++++++++ ui/controller/controller.go | 2 +- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/backend/mediaprovider/mediaprovider.go b/backend/mediaprovider/mediaprovider.go index db30fdb..837afb4 100644 --- a/backend/mediaprovider/mediaprovider.go +++ b/backend/mediaprovider/mediaprovider.go @@ -37,6 +37,8 @@ type Favorites struct { type MediaProvider interface { SetPrefetchCoverCallback(cb func(coverArtID string)) + GetTrack(trackID string) (*Track, error) + GetAlbum(albumID string) (*AlbumWithTracks, error) GetAlbumInfo(albumID string) (*AlbumInfo, error) diff --git a/backend/mediaprovider/subsonic/subsonicmediaprovider.go b/backend/mediaprovider/subsonic/subsonicmediaprovider.go index e5f52b5..b546e67 100644 --- a/backend/mediaprovider/subsonic/subsonicmediaprovider.go +++ b/backend/mediaprovider/subsonic/subsonicmediaprovider.go @@ -55,6 +55,14 @@ func (s *subsonicMediaProvider) EditPlaylistTracks(id string, trackIDsToAdd []st return s.client.UpdatePlaylistTracks(id, trackIDsToAdd, trackIndexesToRemove) } +func (s *subsonicMediaProvider) GetTrack(trackID string) (*mediaprovider.Track, error) { + tr, err := s.client.GetSong(trackID) + if err != nil { + return nil, err + } + return toTrack(tr), nil +} + func (s *subsonicMediaProvider) GetAlbum(albumID string) (*mediaprovider.AlbumWithTracks, error) { al, err := s.client.GetAlbum(albumID) if err != nil { diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index 44857f0..27fac46 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -214,6 +214,15 @@ func (p *PlaybackManager) PlayPlaylist(playlistID string, firstTrack int, shuffl return p.player.PlayTrackAt(firstTrack) } +func (p *PlaybackManager) PlayTrack(trackID string) error { + tr, err := p.sm.Server.GetTrack(trackID) + if err != nil { + return err + } + p.LoadTracks([]*mediaprovider.Track{tr}, false, false) + return p.PlayFromBeginning() +} + func (p *PlaybackManager) PlayFromBeginning() error { return p.player.PlayFromBeginning() } diff --git a/ui/controller/controller.go b/ui/controller/controller.go index de826bb..25cbb64 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -503,7 +503,7 @@ func (c *Controller) ShowQuickSearch() { case mediaprovider.ContentTypeArtist: c.NavigateTo(ArtistRoute(id)) case mediaprovider.ContentTypeTrack: - // TODO + go c.App.PlaybackManager.PlayTrack(id) case mediaprovider.ContentTypePlaylist: c.NavigateTo(PlaylistRoute(id)) case mediaprovider.ContentTypeGenre: