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;
}
}