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 Получение списка "Вы недавно слушали" }