This commit is contained in:
kaedwen committed 2023-07-16 10:23:46 +02:00
1 parent 783aa5fd79
commit d584b50b04
3 files changed
+18 -12

No files matched your search

+1 -1
View File
@@ -31,7 +31,7 @@ type ConfigRing struct {
Key string `arg:"--ring-key" default:"KEY_F1"` Key string `arg:"--ring-key" default:"KEY_F1"`
JingleName string `arg:"--jingle-name,env:JINGLE_NAME" default:"ding-dong.wav"` JingleName string `arg:"--jingle-name,env:JINGLE_NAME" default:"ding-dong.wav"`
JinglePath *string `arg:"--jingle-path,env:JINGLE_PATH"` 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 { type ConfigHTTP struct {
+7 -2
View File
@@ -22,12 +22,17 @@ type RingHandler struct {
} }
func NewRingHandler(lg *zap.Logger, cfg *common.ConfigRing) (*RingHandler, error) { 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 { if err != nil {
return nil, err 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 { func (h *RingHandler) Watch(ctx context.Context) error {
+10 -9
View File
@@ -1,7 +1,6 @@
package sonos package sonos
import ( import (
"errors"
"net/url" "net/url"
"time" "time"
@@ -14,13 +13,13 @@ type SonosPlayer struct {
zp *so.ZonePlayer zp *so.ZonePlayer
} }
func NewSonosPlayer(lg *zap.Logger, target string) (*SonosPlayer, error) { func NewSonosPlayers(lg *zap.Logger, target string) ([]*SonosPlayer, error) {
zp, err := SearchTarget(lg, target) spl, err := SearchTargets(lg, target)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &SonosPlayer{lg, zp}, nil return spl, nil
} }
func (p *SonosPlayer) Play(uri *url.URL) error { func (p *SonosPlayer) Play(uri *url.URL) error {
@@ -32,7 +31,9 @@ func (p *SonosPlayer) Play(uri *url.URL) error {
return p.zp.Play() 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() son, err := so.NewSonos()
if err != nil { if err != nil {
return nil, err return nil, err
@@ -40,15 +41,15 @@ func SearchTarget(lg *zap.Logger, target string) (*so.ZonePlayer, error) {
defer son.Close() defer son.Close()
found, _ := son.Search() found, _ := son.Search()
to := time.After(10 * time.Second) to := time.After(5 * time.Second)
for { for {
select { select {
case <-to: case <-to:
return nil, errors.New("timeout") return players, nil
case zp := <-found: case zp := <-found:
lg.Info("found player", zap.String("name", zp.RoomName())) lg.Info("found player", zap.String("name", zp.RoomName()))
if zp.RoomName() == target { if target == "-" || zp.RoomName() == target {
return zp, nil players = append(players, &SonosPlayer{lg, zp})
} }
} }
} }