Skip to content

Commit 59082cd

Browse files
committed
Handle server disconnections/changes
1 parent ff6fa87 commit 59082cd

3 files changed

Lines changed: 33 additions & 7 deletions

File tree

backend/app.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
195195
if err == nil {
196196
a.ipcServer = ipc.NewServer(
197197
a.PlaybackManager,
198-
&a.ServerManager.Server,
198+
a.ServerManager,
199199
a.callOnReactivate,
200200
func() { _ = a.callOnExit() })
201201
go a.ipcServer.Serve(listener)

backend/ipc/server.go

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ipc
33
import (
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+
1417
type 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+
3643
type 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)

backend/servermanager.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,7 @@ func (s *ServerManager) checkSetInsecureSkipVerify(cli *http.Client) {
262262
}
263263
}
264264
}
265+
266+
func (a *ServerManager) GetServer() mediaprovider.MediaProvider {
267+
return a.Server
268+
}

0 commit comments

Comments
 (0)