This commit is contained in:
kaedwen
2023-07-16 10:23:46 +02:00
parent 783aa5fd79
commit d584b50b04
3 changed files with 18 additions and 12 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ type ConfigRing struct {
Key string `arg:"--ring-key" default:"KEY_F1"`
JingleName string `arg:"--jingle-name,env:JINGLE_NAME" default:"ding-dong.wav"`
JinglePath *string `arg:"--jingle-path,env:JINGLE_PATH"`
SonosTarget string `arg:"--sonos-target,env:SONOS_TARGET" default:"Living Room"`
SonosTarget string `arg:"--sonos-target,env:SONOS_TARGET" default:"-"`
}
type ConfigHTTP struct {
+7 -2
View File
@@ -22,12 +22,17 @@ type RingHandler struct {
}
func NewRingHandler(lg *zap.Logger, cfg *common.ConfigRing) (*RingHandler, error) {
sp, err := sonos.NewSonosPlayer(lg.With(zap.String("context", "sonos")), cfg.SonosTarget)
spl, err := sonos.NewSonosPlayers(lg.With(zap.String("context", "sonos")), cfg.SonosTarget)
if err != nil {
return nil, err
}
return &RingHandler{lg, cfg, []Player{sp}}, nil
pl := make([]Player, 0, len(spl))
for _, sp := range spl {
pl = append(pl, sp)
}
return &RingHandler{lg, cfg, pl}, nil
}
func (h *RingHandler) Watch(ctx context.Context) error {
+10 -9
View File
@@ -1,7 +1,6 @@
package sonos
import (
"errors"
"net/url"
"time"
@@ -14,13 +13,13 @@ type SonosPlayer struct {
zp *so.ZonePlayer
}
func NewSonosPlayer(lg *zap.Logger, target string) (*SonosPlayer, error) {
zp, err := SearchTarget(lg, target)
func NewSonosPlayers(lg *zap.Logger, target string) ([]*SonosPlayer, error) {
spl, err := SearchTargets(lg, target)
if err != nil {
return nil, err
}
return &SonosPlayer{lg, zp}, nil
return spl, nil
}
func (p *SonosPlayer) Play(uri *url.URL) error {
@@ -32,7 +31,9 @@ func (p *SonosPlayer) Play(uri *url.URL) error {
return p.zp.Play()
}
func SearchTarget(lg *zap.Logger, target string) (*so.ZonePlayer, error) {
func SearchTargets(lg *zap.Logger, target string) ([]*SonosPlayer, error) {
players := make([]*SonosPlayer, 0)
son, err := so.NewSonos()
if err != nil {
return nil, err
@@ -40,15 +41,15 @@ func SearchTarget(lg *zap.Logger, target string) (*so.ZonePlayer, error) {
defer son.Close()
found, _ := son.Search()
to := time.After(10 * time.Second)
to := time.After(5 * time.Second)
for {
select {
case <-to:
return nil, errors.New("timeout")
return players, nil
case zp := <-found:
lg.Info("found player", zap.String("name", zp.RoomName()))
if zp.RoomName() == target {
return zp, nil
if target == "-" || zp.RoomName() == target {
players = append(players, &SonosPlayer{lg, zp})
}
}
}