using YandexMusic.API.Common;
using YandexMusic.API.Models.Common;
using YandexMusic.API.Models.Playlist;
using YandexMusic.API.Models.Ugc;
using YandexMusic.API.Requests.Ugc;
namespace YandexMusic.API
{
public partial class YUgcAPI : YCommonAPI
{
public YUgcAPI(YandexMusicApi yandex) : base(yandex)
{
}
///
/// Получение ссылки на загрузчик трека
///
/// Хранилище
/// Плейлист, куда будет загружен трек
/// Название файла для загрузки
public Task GetUgcUploadLinkAsync(AuthStorage storage, YPlaylist playlist, string fileName)
{
return new YUgcGetUploadLinkBuilder(api, storage)
.Build((playlist, fileName))
.GetResponseAsync();
}
///
/// Загрузка трека из файла
///
/// Хранилище
/// Ссылка на балансировщик для загрузки, можно получить из GetUgcUploadLinkAsync
/// Загружаемый файл
public Task> UploadUgcTrackAsync(AuthStorage storage, string uploadLink, string filePath)
{
if (!File.Exists(filePath))
throw new FileNotFoundException("Файл для загрузки не существует.", filePath);
return UploadUgcTrackAsync(storage, uploadLink, File.Open(filePath, FileMode.Open));
}
///
/// Загрузка трека из потока
///
/// Хранилище
/// Ссылка на балансировщик для загрузки, можно получить из GetUgcUploadLinkAsync
/// Поток с данными для загрузки
public Task> UploadUgcTrackAsync(AuthStorage storage, string uploadLink, Stream stream)
{
if (stream == null)
throw new NullReferenceException("Пустая ссылка на поток загрузки.");
using MemoryStream ms = new();
stream.CopyTo(ms);
return UploadUgcTrackAsync(storage, uploadLink, ms.ToArray());
}
///
/// Загрузка трека из массива
///
/// Хранилище
/// Ссылка на балансировщик для загрузки, можно получить из GetUgcUploadLinkAsync
/// Загружаемый трек в виде массив байтов
public Task> UploadUgcTrackAsync(AuthStorage storage, string uploadLink, byte[] file)
{
return new YUgcUploadBuilder(api, storage)
.Build((uploadLink, file))
.GetResponseAsync();
}
}
}