using YandexMusic.API.Models.Playlist; using YandexMusic.API.Models.Ugc; using YandexMusic.API.Requests.Ugc; namespace YandexMusic.API; /// API для загрузки пользовательского контента (UGC). public class YUgcAPI : YCommonAPI { public YUgcAPI(YandexMusicApi api) : base(api) { } public Task GetUgcUploadLinkAsync(YPlaylist playlist, string fileName) => new YUgcGetUploadLinkBuilder(Api).ExecuteAsync((playlist, fileName)); public async Task UploadTrackToPlaylistAsync(YPlaylist playlist, string fileName, string filePath) { if (!File.Exists(filePath)) throw new FileNotFoundException("Файл не найден", filePath); return await UploadTrackToPlaylistAsync(playlist, fileName, await File.ReadAllBytesAsync(filePath)); } public async Task UploadTrackToPlaylistAsync(YPlaylist playlist, string fileName, Stream stream) { using var ms = new MemoryStream(); await stream.CopyToAsync(ms); return await UploadTrackToPlaylistAsync(playlist, fileName, ms.ToArray()); } public async Task UploadTrackToPlaylistAsync(YPlaylist playlist, string fileName, byte[] file) { var uploadLink = await GetUgcUploadLinkAsync(playlist, fileName); if (uploadLink?.PostTarget == null) return null; var result = await new YUgcUploadBuilder(Api).ExecuteAsync((uploadLink.PostTarget, file)); return result?.Result; } }