ring all
This commit is contained in:
@@ -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
@@ -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
@@ -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})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user