package client import ( "context" "fmt" "gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/models" ) // GetFeed gets the main feed func (c *Client) GetFeed(ctx context.Context) (*models.Feed, error) { var result models.Feed if err := c.request.Get(ctx, "/feed", nil, &result); err != nil { return nil, err } return &result, nil } // GetFeedBlocks gets feed blocks func (c *Client) GetFeedBlocks(ctx context.Context) ([]*models.DayBlock, error) { var result []models.DayBlock if err := c.request.Get(ctx, "/feed/blocks", nil, &result); err != nil { return nil, err } blocks := make([]*models.DayBlock, len(result)) for i := range result { result[i].SetClient(c) blocks[i] = &result[i] } return blocks, nil } // GetFeedGeneratedPlaylist gets a generated playlist by ID from feed func (c *Client) GetFeedGeneratedPlaylist(ctx context.Context, playlistID string) (*models.GeneratedPlaylist, error) { params := map[string]string{ "playlist_id": playlistID, } var result models.GeneratedPlaylist if err := c.request.Get(ctx, "/feed/generated-playlist", params, &result); err != nil { return nil, err } result.SetClient(c) return &result, nil } // GetFeedDay gets a specific day from the feed func (c *Client) GetFeedDay(ctx context.Context, date string) (*models.Day, error) { params := map[string]string{ "date": date, } var result models.Day if err := c.request.Get(ctx, "/feed/day", params, &result); err != nil { return nil, err } return &result, nil } // GetGeneratedPlaylists gets generated playlists func (c *Client) GetGeneratedPlaylists(ctx context.Context) ([]*models.GeneratedPlaylist, error) { var result []models.GeneratedPlaylist if err := c.request.Get(ctx, "/generated-playlists", nil, &result); err != nil { return nil, err } playlists := make([]*models.GeneratedPlaylist, len(result)) for i := range result { result[i].SetClient(c) playlists[i] = &result[i] } return playlists, nil } // GetLanding gets a landing page // GET /landing3/{landingID} func (c *Client) GetLanding(ctx context.Context, landingID string) (*models.Landing, error) { params := map[string]string{ "landing_id": landingID, } var result models.Landing if err := c.request.Get(ctx, fmt.Sprintf("/landing3/%s", landingID), params, &result); err != nil { return nil, err } return &result, nil } // GetLandingList gets a list of landings func (c *Client) GetLandingList(ctx context.Context) (*models.LandingList, error) { var result models.LandingList if err := c.request.Get(ctx, "/landing3/list", nil, &result); err != nil { return nil, err } return &result, nil } // GetLandingBlocks gets landing blocks by block IDs func (c *Client) GetLandingBlocks(ctx context.Context, blockIDs []string) ([]*models.LandingBlock, error) { params := map[string]string{ "blocks": joinStrings(blockIDs, ","), } var result []models.LandingBlock if err := c.request.Get(ctx, "/landing3/blocks", params, &result); err != nil { return nil, err } blocks := make([]*models.LandingBlock, len(result)) for i := range result { result[i].SetClient(c) blocks[i] = &result[i] } return blocks, nil } // joinStrings joins a slice of strings with a separator func joinStrings(slice []string, sep string) string { if len(slice) == 0 { return "" } result := slice[0] for _, s := range slice[1:] { result += sep + s } return result }