Полностью переписанное api
All checks were successful
Release / pack-and-publish (release) Successful in 36s
All checks were successful
Release / pack-and-publish (release) Successful in 36s
This commit is contained in:
@@ -1,71 +1,36 @@
|
||||
using YandexMusic.API.Common;
|
||||
using YandexMusic.API.Models.Common;
|
||||
using YandexMusic.API.Models.Playlist;
|
||||
using YandexMusic.API.Models.Playlist;
|
||||
using YandexMusic.API.Models.Ugc;
|
||||
using YandexMusic.API.Requests.Ugc;
|
||||
|
||||
namespace YandexMusic.API;
|
||||
|
||||
public partial class YUgcAPI : YCommonAPI
|
||||
/// <summary>API для загрузки пользовательского контента (UGC).</summary>
|
||||
public class YUgcAPI : YCommonAPI
|
||||
{
|
||||
public YUgcAPI(YandexMusicApi yandex) : base(yandex)
|
||||
{
|
||||
}
|
||||
public YUgcAPI(YandexMusicApi api) : base(api) { }
|
||||
|
||||
/// <summary>
|
||||
/// Получение ссылки на загрузчик трека
|
||||
/// </summary>
|
||||
/// <param name="storage">Хранилище</param>
|
||||
/// <param name="playlist">Плейлист, куда будет загружен трек</param>
|
||||
/// <param name="fileName">Название файла для загрузки</param>
|
||||
public Task<YUgcUpload> GetUgcUploadLinkAsync(AuthStorage storage, YPlaylist playlist, string fileName)
|
||||
{
|
||||
return new YUgcGetUploadLinkBuilder(api, storage)
|
||||
.Build((playlist, fileName))
|
||||
.GetResponseAsync();
|
||||
}
|
||||
public Task<YUgcUpload?> GetUgcUploadLinkAsync(YPlaylist playlist, string fileName)
|
||||
=> new YUgcGetUploadLinkBuilder(Api).ExecuteAsync((playlist, fileName));
|
||||
|
||||
/// <summary>
|
||||
/// Загрузка трека из файла
|
||||
/// </summary>
|
||||
/// <param name="storage">Хранилище</param>
|
||||
/// <param name="uploadLink">Ссылка на балансировщик для загрузки, можно получить из GetUgcUploadLinkAsync</param>
|
||||
/// <param name="filePath">Загружаемый файл</param>
|
||||
public Task<YResponse<string>> UploadUgcTrackAsync(AuthStorage storage, string uploadLink, string filePath)
|
||||
public async Task<string?> UploadTrackToPlaylistAsync(YPlaylist playlist, string fileName, string filePath)
|
||||
{
|
||||
if (!File.Exists(filePath))
|
||||
throw new FileNotFoundException("Файл для загрузки не существует.", filePath);
|
||||
|
||||
return UploadUgcTrackAsync(storage, uploadLink, File.Open(filePath, FileMode.Open));
|
||||
throw new FileNotFoundException("Файл не найден", filePath);
|
||||
return await UploadTrackToPlaylistAsync(playlist, fileName, await File.ReadAllBytesAsync(filePath));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Загрузка трека из потока
|
||||
/// </summary>
|
||||
/// <param name="storage">Хранилище</param>
|
||||
/// <param name="uploadLink">Ссылка на балансировщик для загрузки, можно получить из GetUgcUploadLinkAsync</param>
|
||||
/// <param name="stream">Поток с данными для загрузки</param>
|
||||
public Task<YResponse<string>> UploadUgcTrackAsync(AuthStorage storage, string uploadLink, Stream stream)
|
||||
public async Task<string?> UploadTrackToPlaylistAsync(YPlaylist playlist, string fileName, Stream stream)
|
||||
{
|
||||
if (stream == null)
|
||||
throw new NullReferenceException("Пустая ссылка на поток загрузки.");
|
||||
|
||||
using MemoryStream ms = new();
|
||||
stream.CopyTo(ms);
|
||||
|
||||
return UploadUgcTrackAsync(storage, uploadLink, ms.ToArray());
|
||||
using var ms = new MemoryStream();
|
||||
await stream.CopyToAsync(ms);
|
||||
return await UploadTrackToPlaylistAsync(playlist, fileName, ms.ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Загрузка трека из массива
|
||||
/// </summary>
|
||||
/// <param name="storage">Хранилище</param>
|
||||
/// <param name="uploadLink">Ссылка на балансировщик для загрузки, можно получить из GetUgcUploadLinkAsync</param>
|
||||
/// <param name="file">Загружаемый трек в виде массив байтов</param>
|
||||
public Task<YResponse<string>> UploadUgcTrackAsync(AuthStorage storage, string uploadLink, byte[] file)
|
||||
public async Task<string?> UploadTrackToPlaylistAsync(YPlaylist playlist, string fileName, byte[] file)
|
||||
{
|
||||
return new YUgcUploadBuilder(api, storage)
|
||||
.Build((uploadLink, file))
|
||||
.GetResponseAsync();
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user