mirror of
https://github.com/aditya-K2/gspt.git
synced 2026-01-07 21:13:50 -05:00
97 lines
1.7 KiB
Go
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])
|
|
}
|