@@ -3,6 +3,7 @@ package ipc
33import (
44 "context"
55 "encoding/json"
6+ "errors"
67 "net"
78 "net/http"
89 "strconv"
@@ -11,6 +12,8 @@ import (
1112 "github.com/dweymouth/supersonic/backend/mediaprovider"
1213)
1314
15+ var ErrNoServerConnection = errors .New ("not connected to a server" )
16+
1417type PlaybackHandler interface {
1518 PlayPause ()
1619 Stop ()
@@ -33,16 +36,20 @@ type IPCServer interface {
3336 Shutdown (context.Context ) error
3437}
3538
39+ type ServerManager interface {
40+ GetServer () mediaprovider.MediaProvider
41+ }
42+
3643type serverImpl struct {
3744 server * http.Server
3845 pbHandler PlaybackHandler
39- mp * mediaprovider. MediaProvider
46+ sm ServerManager
4047 showFn func ()
4148 quitFn func ()
4249}
4350
44- func NewServer (pbHandler PlaybackHandler , mp * mediaprovider. MediaProvider , showFn , quitFn func ()) IPCServer {
45- s := & serverImpl {pbHandler : pbHandler , mp : mp , showFn : showFn , quitFn : quitFn }
51+ func NewServer (pbHandler PlaybackHandler , sm ServerManager , showFn , quitFn func ()) IPCServer {
52+ s := & serverImpl {pbHandler : pbHandler , sm : sm , showFn : showFn , quitFn : quitFn }
4653 s .server = & http.Server {
4754 Handler : s .createHandler (),
4855 }
@@ -105,8 +112,13 @@ func (s *serverImpl) createHandler() http.Handler {
105112 s .writeOK (w )
106113 })
107114 m .HandleFunc (SearchAlbumPath , s .makeSearchEndpointHandler (func (search string ) (any , error ) {
115+ mp := s .sm .GetServer ()
116+ if mp == nil {
117+ return nil , ErrNoServerConnection
118+ }
119+
108120 filter := mediaprovider .NewAlbumFilter (mediaprovider.AlbumFilterOptions {})
109- i := ( * s . mp ) .SearchAlbums (search , filter )
121+ i := mp .SearchAlbums (search , filter )
110122
111123 album := i .Next ()
112124 albums := make ([]mediaprovider.Album , 0 )
@@ -118,7 +130,12 @@ func (s *serverImpl) createHandler() http.Handler {
118130 return albums , nil
119131 }))
120132 m .HandleFunc (SearchPlaylistPath , s .makeSearchEndpointHandler (func (search string ) (any , error ) {
121- all , err := (* s .mp ).GetPlaylists ()
133+ mp := s .sm .GetServer ()
134+ if mp == nil {
135+ return nil , ErrNoServerConnection
136+ }
137+
138+ all , err := mp .GetPlaylists ()
122139 if err != nil {
123140 return nil , err
124141 }
@@ -139,7 +156,12 @@ func (s *serverImpl) createHandler() http.Handler {
139156 return filtered , nil
140157 }))
141158 m .HandleFunc (SearchTrackPath , s .makeSearchEndpointHandler (func (search string ) (any , error ) {
142- i := (* s .mp ).IterateTracks (search )
159+ mp := s .sm .GetServer ()
160+ if mp == nil {
161+ return nil , ErrNoServerConnection
162+ }
163+
164+ i := mp .IterateTracks (search )
143165
144166 track := i .Next ()
145167 tracks := make ([]mediaprovider.Track , 0 )
0 commit comments