2024-02-18 10:46:59 -08:00
|
|
|
package commands
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
2024-02-18 11:10:36 -08:00
|
|
|
"os"
|
|
|
|
"path/filepath"
|
2024-02-18 10:46:59 -08:00
|
|
|
|
|
|
|
"github.com/zmb3/spotify/v2"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (c *Commander) ListDevices() error {
|
2024-02-18 23:33:32 -08:00
|
|
|
devices, err := c.Client().PlayerDevices(c.Context)
|
2024-02-18 10:46:59 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return PrintDevices(devices)
|
|
|
|
}
|
|
|
|
|
|
|
|
func PrintDevices(devices []spotify.PlayerDevice) error {
|
|
|
|
out, err := json.MarshalIndent(devices, "", " ")
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
fmt.Println(string(out))
|
|
|
|
return nil
|
|
|
|
}
|
2024-02-18 11:10:36 -08:00
|
|
|
|
|
|
|
func (c *Commander) SetDevice(device spotify.ID) error {
|
2024-02-18 23:33:32 -08:00
|
|
|
err := c.Client().TransferPlayback(c.Context, device, true)
|
2024-02-18 11:10:36 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2024-02-18 23:33:32 -08:00
|
|
|
devices, err := c.Client().PlayerDevices(c.Context)
|
2024-02-18 11:10:36 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
for _, d := range devices {
|
|
|
|
if d.ID == device {
|
|
|
|
out, err := json.MarshalIndent(d, "", " ")
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
configDir, _ := os.UserConfigDir()
|
2024-02-18 18:51:25 -08:00
|
|
|
err = os.WriteFile(filepath.Join(configDir, "gspot/device.json"), out, 0o600)
|
2024-02-18 11:10:36 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return fmt.Errorf("device not found")
|
|
|
|
}
|