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