Initial commit
This commit is contained in:
commit
02a6dabcfb
62 files changed
+15751
No files matched your search
@@ -0,0 +1,250 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/models"
|
||||
)
|
||||
|
||||
// GetQueue gets the current queue
|
||||
func (c *Client) GetQueue(ctx context.Context) (*models.Queue, error) {
|
||||
var result models.Queue
|
||||
if err := c.request.Get(ctx, "/queue", nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// CreateQueue creates a new queue
|
||||
func (c *Client) CreateQueue(ctx context.Context, trackID string, queueType string) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"track_id": trackID,
|
||||
"queue_type": queueType, // "radio", "album", "playlist", etc.
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetQueueItem gets a queue item
|
||||
func (c *Client) GetQueueItem(ctx context.Context, queueID string) (*models.QueueItem, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
}
|
||||
|
||||
var result models.QueueItem
|
||||
if err := c.request.Get(ctx, "/queue/item", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// AddToQueue adds a track to the queue
|
||||
func (c *Client) AddToQueue(ctx context.Context, queueID, trackID string, position int) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"track_id": trackID,
|
||||
"position": fmt.Sprintf("%d", position),
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue/add", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// RemoveFromQueue removes a track from the queue
|
||||
func (c *Client) RemoveFromQueue(ctx context.Context, queueID, trackID string) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"track_id": trackID,
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Delete(ctx, "/queue/remove", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// ReorderQueue reorders the queue
|
||||
func (c *Client) ReorderQueue(ctx context.Context, queueID string, from, to int) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"from": fmt.Sprintf("%d", from),
|
||||
"to": fmt.Sprintf("%d", to),
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Put(ctx, "/queue/reorder", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// ClearQueue clears the queue
|
||||
func (c *Client) ClearQueue(ctx context.Context, queueID string) error {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
}
|
||||
var result map[string]any
|
||||
return c.request.Delete(ctx, "/queue/clear", params, &result)
|
||||
}
|
||||
|
||||
// NextTrack moves to the next track in the queue
|
||||
func (c *Client) NextTrack(ctx context.Context, queueID string) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue/next", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// PreviousTrack moves to the previous track in the queue
|
||||
func (c *Client) PreviousTrack(ctx context.Context, queueID string) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue/prev", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// Seek seeks to a specific position in the current track (in milliseconds)
|
||||
func (c *Client) Seek(ctx context.Context, queueID string, positionMs int) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"position": fmt.Sprintf("%d", positionMs),
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue/seek", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// SetRepeatMode sets the repeat mode for the queue
|
||||
// mode can be "off", "one", or "all"
|
||||
func (c *Client) SetRepeatMode(ctx context.Context, queueID, mode string) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"mode": mode,
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue/repeat", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// SetShuffle enables or disables shuffle for the queue
|
||||
func (c *Client) SetShuffle(ctx context.Context, queueID string, enabled bool) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"enabled": fmt.Sprintf("%t", enabled),
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue/shuffle", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// SetVolume sets the volume for the queue (0-100)
|
||||
func (c *Client) SetVolume(ctx context.Context, queueID string, volume int) (*models.Queue, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"volume": fmt.Sprintf("%d", volume),
|
||||
}
|
||||
|
||||
var result models.Queue
|
||||
if err := c.request.Post(ctx, "/queue/volume", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetCurrentTrack gets the currently playing track from the queue
|
||||
func (c *Client) GetCurrentTrack(ctx context.Context, queueID string) (*models.QueueItem, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
}
|
||||
|
||||
var result models.QueueItem
|
||||
if err := c.request.Get(ctx, "/queue/current", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.SetClient(c)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetQueueHistory gets the queue history (recently played tracks)
|
||||
func (c *Client) GetQueueHistory(ctx context.Context, queueID string, limit int) ([]*models.QueueItem, error) {
|
||||
params := map[string]string{
|
||||
"queue_id": queueID,
|
||||
"limit": fmt.Sprintf("%d", limit),
|
||||
}
|
||||
|
||||
var result []models.QueueItem
|
||||
if err := c.request.Get(ctx, "/queue/history", params, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
items := make([]*models.QueueItem, len(result))
|
||||
for i := range result {
|
||||
result[i].SetClient(c)
|
||||
items[i] = &result[i]
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
// GetPlayContexts gets play contexts
|
||||
func (c *Client) GetPlayContexts(ctx context.Context) ([]*models.PlayContext, error) {
|
||||
var result []models.PlayContext
|
||||
if err := c.request.Get(ctx, "/play-contexts", nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
contexts := make([]*models.PlayContext, len(result))
|
||||
for i := range result {
|
||||
result[i].SetClient(c)
|
||||
contexts[i] = &result[i]
|
||||
}
|
||||
return contexts, nil
|
||||
}
|
||||
|
||||
// GetPlayContextsData gets play contexts data
|
||||
func (c *Client) GetPlayContextsData(ctx context.Context) (*models.PlayContextsData, error) {
|
||||
var result models.PlayContextsData
|
||||
if err := c.request.Get(ctx, "/play-contexts/data", nil, &result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
Reference in new issue
Block a user