Files
YandexMusic/YandexMusic.API/API/YLibraryAPI.cs
FrigaT 36e28ce3fe
All checks were successful
Release / pack-and-publish (release) Successful in 36s
Полностью переписанное api
2026-04-19 17:00:05 +03:00

90 lines
4.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}