36 lines
1.5 KiB
C#
36 lines
1.5 KiB
C#
using YandexMusic.API.Models.Playlist;
|
|
using YandexMusic.API.Models.Ugc;
|
|
using YandexMusic.API.Requests.Ugc;
|
|
|
|
namespace YandexMusic.API;
|
|
|
|
/// <summary>API для загрузки пользовательского контента (UGC).</summary>
|
|
public class YUgcAPI : YCommonAPI
|
|
{
|
|
public YUgcAPI(YandexMusicApi api) : base(api) { }
|
|
|
|
public Task<YUgcUpload?> GetUgcUploadLinkAsync(YPlaylist playlist, string fileName)
|
|
=> new YUgcGetUploadLinkBuilder(Api).ExecuteAsync((playlist, fileName));
|
|
|
|
public async Task<string?> 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<string?> 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<string?> 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;
|
|
}
|
|
} |