reactivate works through ipc now, at least on Mac

This commit is contained in:
Drew Weymouth
2024-06-12 09:07:15 -07:00
parent e0974fdb03
commit 8e815c644a
6 changed files with 67 additions and 90 deletions
+1 -6
View File
@@ -17,15 +17,10 @@ type Client struct {
// Connect attempts to connect to the IPC socket as client.
func Connect() (*Client, error) {
conn, err := Dial()
if err != nil {
log.Println("dial error")
return nil, err
}
client := &Client{httpC: http.Client{
Transport: &http.Transport{
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
return conn, nil
return Dial()
},
},
}}
+8 -1
View File
@@ -2,7 +2,10 @@
package ipc
import "net"
import (
"net"
"os"
)
func Dial() (net.Conn, error) {
// TODO - use XDG runtime dir, also handle portable mode
@@ -12,3 +15,7 @@ func Dial() (net.Conn, error) {
func Listen() (net.Listener, error) {
return net.Listen("unix", "/tmp/supersonic.sock")
}
func DestroyConn() error {
return os.Remove("/tmp/supersonic.sock")
}
+5
View File
@@ -17,3 +17,8 @@ func Dial() (net.Conn, error) {
func Listen() (net.Listener, error) {
return winio.ListenPipe("supersonic", nil)
}
func DestroyConn() error {
// Windows named pipes automatically clean up
return nil
}
+24 -9
View File
@@ -1,7 +1,9 @@
package ipc
import (
"context"
"encoding/json"
"net"
"net/http"
)
@@ -17,21 +19,34 @@ type PlaybackHandler interface {
SetVolume(int) error
}
type WindowHandler interface {
Show()
Quit()
type IPCServer interface {
Serve(net.Listener) error
Shutdown(context.Context) error
}
type serverImpl struct {
server *http.Server
pbHandler PlaybackHandler
wdHandler WindowHandler
showFn func()
quitFn func()
}
func NewServer(pbHandler PlaybackHandler, wdHandler WindowHandler) *http.Server {
s := serverImpl{pbHandler: pbHandler, wdHandler: wdHandler}
return &http.Server{
func NewServer(pbHandler PlaybackHandler, showFn, quitFn func()) IPCServer {
s := &serverImpl{pbHandler: pbHandler, showFn: showFn, quitFn: quitFn}
s.server = &http.Server{
Handler: s.createHandler(),
}
return s
}
func (s *serverImpl) Serve(listener net.Listener) error {
return s.server.Serve(listener)
}
func (s *serverImpl) Shutdown(ctx context.Context) error {
err := s.server.Shutdown(ctx)
DestroyConn()
return err
}
func (s *serverImpl) createHandler() http.Handler {
@@ -42,11 +57,11 @@ func (s *serverImpl) createHandler() http.Handler {
})
m.HandleFunc(PingPath, s.makeSimpleEndpointHandler(func() error { return nil }))
m.HandleFunc(ShowPath, s.makeSimpleEndpointHandler(func() error {
s.wdHandler.Show()
s.showFn()
return nil
}))
m.HandleFunc(QuitPath, s.makeSimpleEndpointHandler(func() error {
go s.wdHandler.Quit()
s.quitFn()
return nil
}))
m.HandleFunc(PlayPath, s.makeSimpleEndpointHandler(s.pbHandler.Continue))