ring all
This commit is contained in:
1 parent
783aa5fd79
commit
d584b50b04
3 files changed
+18
-12
No files matched your search
@@ -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
@@ -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
@@ -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})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user