Files
gspt/spt/play.go
2024-06-30 20:16:26 +05:30

97 lines
1.7 KiB
Go

package spt
import (
"errors"
"strings"
"github.com/zmb3/spotify/v2"
)
func play(options *spotify.PlayOptions) error {
return client.PlayOpt(ctx, options)
}
func PlaySong(uri spotify.URI) error {
return play(&spotify.PlayOptions{
URIs: []spotify.URI{uri},
})
}
func PlaySongWithContext(context spotify.URI, position int) error {
return play(&spotify.PlayOptions{
PlaybackContext: &context,
PlaybackOffset: &spotify.PlaybackOffset{Position: &position},
})
}
func PlaySongWithContextURI(context, uri spotify.URI) error {
return play(&spotify.PlayOptions{
PlaybackContext: &context,
PlaybackOffset: &spotify.PlaybackOffset{URI: uri},
})
}
func PlayContext(context spotify.URI) error {
return play(&spotify.PlayOptions{
PlaybackContext: &context,
})
}
func TogglePlayback() error {
p, err := client.PlayerCurrentlyPlaying(ctx)
if err != nil {
return err
}
if p.Playing {
if err := client.Pause(ctx); err != nil {
return err
}
} else {
if err := client.Play(ctx); err != nil {
return err
}
}
return nil
}
func UriToID(uri spotify.URI) (spotify.ID, error) {
a := strings.Split(string(uri), ":")
if len(a) != 3 {
return "", errors.New("Error Decoding the URI")
}
return spotify.ID(a[2]), nil
}
func Next() error {
return client.Next(ctx)
}
func Previous() error {
return client.Previous(ctx)
}
func Shuffle() error {
s, err := GetPlayerState()
if err != nil {
return err
}
return client.Shuffle(ctx, !s.ShuffleState)
}
func Repeat() error {
s, err := GetPlayerState()
next := map[string]string{
"context": "track",
"track": "off",
"off": "context",
}
if err != nil {
return err
}
return client.Repeat(ctx, next[s.RepeatState])
}