using YandexMusic.API.Common;
using YandexMusic.API.Models.Album;
using YandexMusic.API.Models.Artist;
using YandexMusic.API.Models.Common;
using YandexMusic.API.Models.Landing.Entity.Entities.Context;
using YandexMusic.API.Models.Library;
using YandexMusic.API.Models.Playlist;
using YandexMusic.API.Models.Track;
using YandexMusic.API.Requests.Library;
namespace YandexMusic.API;
///
/// API для взаимодействия с библиотекой
///
public partial class YLibraryAPI : YCommonAPI
{
///
/// Получение секции библиотеки
///
/// Тип объекта библиотеки
/// Хранилище
/// Секция
/// Тип
/// Список объектов из секции
private Task> GetLibrarySection(AuthStorage storage, YLibrarySection section, YLibrarySectionType type = YLibrarySectionType.Likes)
{
return new YGetLibrarySectionBuilder(api, storage)
.Build((section, type))
.GetResponseAsync();
}
public YLibraryAPI(YandexMusicApi yandex) : base(yandex)
{
}
#region Лайки
///
/// Получение лайкнутых треков
///
/// Хранилище
///
public Task> GetLikedTracksAsync(AuthStorage storage)
{
return GetLibrarySection(storage, YLibrarySection.Tracks);
}
///
/// Получение лайкнутых альбомов
///
/// Хранилище
///
public Task>> GetLikedAlbumsAsync(AuthStorage storage)
{
return GetLibrarySection>(storage, YLibrarySection.Albums);
}
///
/// Получение лайкнутых исполнителей
///
/// Хранилище
///
public Task>> GetLikedArtistsAsync(AuthStorage storage)
{
return GetLibrarySection>(storage, YLibrarySection.Artists);
}
///
/// Получение лайкнутых плейлистов
///
/// Хранилище
///
public Task>> GetLikedPlaylistsAsync(AuthStorage storage)
{
return GetLibrarySection>(storage, YLibrarySection.Playlists);
}
#endregion Лайки
#region Дизлайки
///
/// Получение дизлайкнутых треков
///
/// Хранилище
///
public Task> GetDislikedTracksAsync(AuthStorage storage)
{
return GetLibrarySection(storage, YLibrarySection.Tracks, YLibrarySectionType.Dislikes);
}
///
/// Получение дизлайкнутых исполнителей
///
/// Хранилище
///
public Task>> GetDislikedArtistsAsync(AuthStorage storage)
{
return GetLibrarySection>(storage, YLibrarySection.Artists, YLibrarySectionType.Dislikes);
}
#endregion Дизлайки
#region Добавление в списки лайков/дизлайков
///
/// Добавить трек в список лайкнутых
///
/// Хранилище
/// Трек
///
public Task> AddTrackLikeAsync(AuthStorage storage, YTrack track)
{
return new YLibraryAddBuilder(api, storage)
.Build((track.GetKey().ToString(), YLibrarySection.Tracks, YLibrarySectionType.Likes))
.GetResponseAsync();
}
///
/// Удалить трек из списка лайкнутых
///
/// Хранилище
/// Трек
///
public Task> RemoveTrackLikeAsync(AuthStorage storage, YTrack track)
{
return new YLibraryRemoveBuilder(api, storage)
.Build((track.GetKey().ToString(), YLibrarySection.Tracks, YLibrarySectionType.Likes))
.GetResponseAsync();
}
///
/// Добавить трек в список дизлайкнутых
///
/// Хранилище
/// Трек
///
public Task> AddTrackDislikeAsync(AuthStorage storage, YTrack track)
{
return new YLibraryAddBuilder(api, storage)
.Build((track.GetKey().ToString(), YLibrarySection.Tracks, YLibrarySectionType.Dislikes))
.GetResponseAsync();
}
///
/// Удалить трек из списка дизлайкнутых
///
/// Хранилище
/// Трек
///
public Task> RemoveTrackDislikeAsync(AuthStorage storage, YTrack track)
{
return new YLibraryRemoveBuilder(api, storage)
.Build((track.GetKey().ToString(), YLibrarySection.Tracks, YLibrarySectionType.Dislikes))
.GetResponseAsync();
}
///
/// Добавить альбом в список лайкнутых
///
/// Хранилище
/// Альбом
///
public Task> AddAlbumLikeAsync(AuthStorage storage, YAlbum album)
{
return new YLibraryAddBuilder(api, storage)
.Build((album.Id, YLibrarySection.Albums, YLibrarySectionType.Likes))
.GetResponseAsync();
}
///
/// Удалить альбом из списка лайкнутых
///
/// Хранилище
/// Альбом
///
public Task> RemoveAlbumLikeAsync(AuthStorage storage, YAlbum album)
{
return new YLibraryRemoveBuilder(api, storage)
.Build((album.Id, YLibrarySection.Albums, YLibrarySectionType.Likes))
.GetResponseAsync();
}
///
/// Добавить исполнителя в список лайкнутых
///
/// Хранилище
/// Исполнитель
///
public Task> AddArtistLikeAsync(AuthStorage storage, YArtist artist)
{
return new YLibraryAddBuilder(api, storage)
.Build((artist.Id, YLibrarySection.Artists, YLibrarySectionType.Likes))
.GetResponseAsync();
}
///
/// Удалить исполнителя из списка лайкнутых
///
/// Хранилище
/// Исполнитель
///
public Task> RemoveArtistLikeAsync(AuthStorage storage, YArtist artist)
{
return new YLibraryRemoveBuilder(api, storage)
.Build((artist.Id, YLibrarySection.Artists, YLibrarySectionType.Likes))
.GetResponseAsync();
}
///
/// Добавить плейлист в список лайкнутых
///
/// Хранилище
/// Плейлист
///
public Task> AddPlaylistLikeAsync(AuthStorage storage, YPlaylist playlist)
{
return new YLibraryAddBuilder(api, storage)
.Build((playlist.GetKey().ToString(), YLibrarySection.Playlists, YLibrarySectionType.Likes))
.GetResponseAsync();
}
///
/// Удалить плейлист из списка лайкнутых
///
/// Хранилище
/// Плейлист
///
public Task> RemovePlaylistLikeAsync(AuthStorage storage, YPlaylist playlist)
{
return new YLibraryRemoveBuilder(api, storage)
.Build((playlist.GetKey().ToString(), YLibrarySection.Playlists, YLibrarySectionType.Likes))
.GetResponseAsync();
}
#endregion Добавление/удаление в списки лайков/дизлайков
#region Получение списка "Вы недавно слушали"
public Task> GetRecentlyListenedAsync(AuthStorage storage, IEnumerable contextTypes, int trackCount, int contextCount)
{
return new YGetLibraryRecentlyListenedBuilder(api, storage)
.Build((contextTypes, trackCount, contextCount))
.GetResponseAsync();
}
#endregion Получение списка "Вы недавно слушали"
}