Handle server disconnections/changes

This commit is contained in:
E1int
2025-08-11 17:15:57 +02:00
parent ff6fa87a0a
commit 59082cd6d6
3 changed files with 33 additions and 7 deletions
+1 -1
View File
@@ -195,7 +195,7 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
if err == nil { if err == nil {
a.ipcServer = ipc.NewServer( a.ipcServer = ipc.NewServer(
a.PlaybackManager, a.PlaybackManager,
&a.ServerManager.Server, a.ServerManager,
a.callOnReactivate, a.callOnReactivate,
func() { _ = a.callOnExit() }) func() { _ = a.callOnExit() })
go a.ipcServer.Serve(listener) go a.ipcServer.Serve(listener)
+28 -6
View File
@@ -3,6 +3,7 @@ package ipc
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"errors"
"net" "net"
"net/http" "net/http"
"strconv" "strconv"
@@ -11,6 +12,8 @@ import (
"github.com/dweymouth/supersonic/backend/mediaprovider" "github.com/dweymouth/supersonic/backend/mediaprovider"
) )
var ErrNoServerConnection = errors.New("not connected to a server")
type PlaybackHandler interface { type PlaybackHandler interface {
PlayPause() PlayPause()
Stop() Stop()
@@ -33,16 +36,20 @@ type IPCServer interface {
Shutdown(context.Context) error Shutdown(context.Context) error
} }
type ServerManager interface {
GetServer() mediaprovider.MediaProvider
}
type serverImpl struct { type serverImpl struct {
server *http.Server server *http.Server
pbHandler PlaybackHandler pbHandler PlaybackHandler
mp *mediaprovider.MediaProvider sm ServerManager
showFn func() showFn func()
quitFn func() quitFn func()
} }
func NewServer(pbHandler PlaybackHandler, mp *mediaprovider.MediaProvider, showFn, quitFn func()) IPCServer { func NewServer(pbHandler PlaybackHandler, sm ServerManager, showFn, quitFn func()) IPCServer {
s := &serverImpl{pbHandler: pbHandler, mp: mp, showFn: showFn, quitFn: quitFn} s := &serverImpl{pbHandler: pbHandler, sm: sm, showFn: showFn, quitFn: quitFn}
s.server = &http.Server{ s.server = &http.Server{
Handler: s.createHandler(), Handler: s.createHandler(),
} }
@@ -105,8 +112,13 @@ func (s *serverImpl) createHandler() http.Handler {
s.writeOK(w) s.writeOK(w)
}) })
m.HandleFunc(SearchAlbumPath, s.makeSearchEndpointHandler(func(search string) (any, error) { m.HandleFunc(SearchAlbumPath, s.makeSearchEndpointHandler(func(search string) (any, error) {
mp := s.sm.GetServer()
if mp == nil {
return nil, ErrNoServerConnection
}
filter := mediaprovider.NewAlbumFilter(mediaprovider.AlbumFilterOptions{}) filter := mediaprovider.NewAlbumFilter(mediaprovider.AlbumFilterOptions{})
i := (*s.mp).SearchAlbums(search, filter) i := mp.SearchAlbums(search, filter)
album := i.Next() album := i.Next()
albums := make([]mediaprovider.Album, 0) albums := make([]mediaprovider.Album, 0)
@@ -118,7 +130,12 @@ func (s *serverImpl) createHandler() http.Handler {
return albums, nil return albums, nil
})) }))
m.HandleFunc(SearchPlaylistPath, s.makeSearchEndpointHandler(func(search string) (any, error) { m.HandleFunc(SearchPlaylistPath, s.makeSearchEndpointHandler(func(search string) (any, error) {
all, err := (*s.mp).GetPlaylists() mp := s.sm.GetServer()
if mp == nil {
return nil, ErrNoServerConnection
}
all, err := mp.GetPlaylists()
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -139,7 +156,12 @@ func (s *serverImpl) createHandler() http.Handler {
return filtered, nil return filtered, nil
})) }))
m.HandleFunc(SearchTrackPath, s.makeSearchEndpointHandler(func(search string) (any, error) { m.HandleFunc(SearchTrackPath, s.makeSearchEndpointHandler(func(search string) (any, error) {
i := (*s.mp).IterateTracks(search) mp := s.sm.GetServer()
if mp == nil {
return nil, ErrNoServerConnection
}
i := mp.IterateTracks(search)
track := i.Next() track := i.Next()
tracks := make([]mediaprovider.Track, 0) tracks := make([]mediaprovider.Track, 0)
+4
View File
@@ -262,3 +262,7 @@ func (s *ServerManager) checkSetInsecureSkipVerify(cli *http.Client) {
} }
} }
} }
func (a *ServerManager) GetServer() mediaprovider.MediaProvider {
return a.Server
}