90 lines
4.3 KiB
C#
90 lines
4.3 KiB
C#
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;
|
||
|
||
/// <summary>API для работы с библиотекой (лайки, дизлайки, недавно прослушанное).</summary>
|
||
public class YLibraryAPI : YCommonAPI
|
||
{
|
||
public YLibraryAPI(YandexMusicApi api) : base(api) { }
|
||
|
||
#region Лайки
|
||
|
||
public Task<YLibraryTracks?> GetLikedTracksAsync()
|
||
=> new YGetLibrarySectionBuilder<YLibraryTracks>(Api).ExecuteAsync((YLibrarySection.Tracks, YLibrarySectionType.Likes));
|
||
|
||
public Task<List<YLibraryAlbum>?> GetLikedAlbumsAsync()
|
||
=> new YGetLibrarySectionBuilder<List<YLibraryAlbum>>(Api).ExecuteAsync((YLibrarySection.Albums, YLibrarySectionType.Likes));
|
||
|
||
public Task<List<YArtist>?> GetLikedArtistsAsync()
|
||
=> new YGetLibrarySectionBuilder<List<YArtist>>(Api).ExecuteAsync((YLibrarySection.Artists, YLibrarySectionType.Likes));
|
||
|
||
public Task<List<YLibraryPlaylists>?> GetLikedPlaylistsAsync()
|
||
=> new YGetLibrarySectionBuilder<List<YLibraryPlaylists>>(Api).ExecuteAsync((YLibrarySection.Playlists, YLibrarySectionType.Likes));
|
||
|
||
#endregion
|
||
|
||
#region Дизлайки
|
||
|
||
public Task<YLibraryTracks?> GetDislikedTracksAsync()
|
||
=> new YGetLibrarySectionBuilder<YLibraryTracks>(Api).ExecuteAsync((YLibrarySection.Tracks, YLibrarySectionType.Dislikes));
|
||
|
||
public Task<List<YArtist>?> GetDislikedArtistsAsync()
|
||
=> new YGetLibrarySectionBuilder<List<YArtist>>(Api).ExecuteAsync((YLibrarySection.Artists, YLibrarySectionType.Dislikes));
|
||
|
||
#endregion
|
||
|
||
#region Добавление/удаление
|
||
|
||
public Task<int?> AddTrackLikeAsync(YTrack track)
|
||
=> new YLibraryAddBuilder<YRevision>(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Likes))
|
||
.ContinueWith(t => t.Result?.Revision);
|
||
|
||
public Task<int?> RemoveTrackLikeAsync(YTrack track)
|
||
=> new YLibraryRemoveBuilder<YRevision>(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Likes))
|
||
.ContinueWith(t => t.Result?.Revision);
|
||
|
||
public Task<int?> AddTrackDislikeAsync(YTrack track)
|
||
=> new YLibraryAddBuilder<YRevision>(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Dislikes))
|
||
.ContinueWith(t => t.Result?.Revision);
|
||
|
||
public Task<int?> RemoveTrackDislikeAsync(YTrack track)
|
||
=> new YLibraryRemoveBuilder<YRevision>(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Dislikes))
|
||
.ContinueWith(t => t.Result?.Revision);
|
||
|
||
public Task<string?> AddAlbumLikeAsync(YAlbum album)
|
||
=> new YLibraryAddBuilder<string>(Api).ExecuteAsync((album.Id, YLibrarySection.Albums, YLibrarySectionType.Likes));
|
||
|
||
public Task<string?> RemoveAlbumLikeAsync(YAlbum album)
|
||
=> new YLibraryRemoveBuilder<string>(Api).ExecuteAsync((album.Id, YLibrarySection.Albums, YLibrarySectionType.Likes));
|
||
|
||
public Task<string?> AddArtistLikeAsync(YArtist artist)
|
||
=> new YLibraryAddBuilder<string>(Api).ExecuteAsync((artist.Id, YLibrarySection.Artists, YLibrarySectionType.Likes));
|
||
|
||
public Task<string?> RemoveArtistLikeAsync(YArtist artist)
|
||
=> new YLibraryRemoveBuilder<string>(Api).ExecuteAsync((artist.Id, YLibrarySection.Artists, YLibrarySectionType.Likes));
|
||
|
||
public Task<string?> AddPlaylistLikeAsync(YPlaylist playlist)
|
||
=> new YLibraryAddBuilder<string>(Api).ExecuteAsync((playlist.GetKey().ToString(), YLibrarySection.Playlists, YLibrarySectionType.Likes));
|
||
|
||
public Task<string?> RemovePlaylistLikeAsync(YPlaylist playlist)
|
||
=> new YLibraryRemoveBuilder<string>(Api).ExecuteAsync((playlist.GetKey().ToString(), YLibrarySection.Playlists, YLibrarySectionType.Likes));
|
||
|
||
#endregion
|
||
|
||
#region Недавно прослушанное
|
||
|
||
public Task<YRecentlyListenedContext?> GetRecentlyListenedAsync(
|
||
IEnumerable<YPlayContextType> contextTypes,
|
||
int trackCount = 50,
|
||
int contextCount = 10)
|
||
=> new YGetLibraryRecentlyListenedBuilder(Api).ExecuteAsync((contextTypes, trackCount, contextCount));
|
||
|
||
#endregion
|
||
} |