Полностью переписанное 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,4 +1,5 @@
|
||||
using System.Net.WebSockets;
|
||||
using System.Net;
|
||||
using System.Net.WebSockets;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using YandexMusic.API.Models.Track;
|
||||
@@ -12,6 +13,7 @@ public class YnisonPlayer : IDisposable
|
||||
{
|
||||
private readonly JsonSerializerOptions _jsonOptions;
|
||||
private readonly AuthStorage _storage;
|
||||
private readonly IWebProxy? _proxy;
|
||||
private YnisonWebSocket? _redirector;
|
||||
private YnisonWebSocket? _state;
|
||||
|
||||
@@ -33,40 +35,36 @@ public class YnisonPlayer : IDisposable
|
||||
/// <summary>Аргументы события получения состояния.</summary>
|
||||
public class ReceiveEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>Состояние плеера.</summary>
|
||||
public YYnisonState State { get; init; } = null!;
|
||||
}
|
||||
|
||||
/// <summary>Аргументы события закрытия соединения.</summary>
|
||||
public class CloseEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>Статус закрытия.</summary>
|
||||
public WebSocketCloseStatus? Status { get; init; }
|
||||
/// <summary>Описание причины закрытия.</summary>
|
||||
public string? Description { get; init; }
|
||||
}
|
||||
|
||||
internal YnisonPlayer(YandexMusicApi api, AuthStorage authStorage)
|
||||
internal YnisonPlayer(YandexMusicApi api, AuthStorage authStorage, IWebProxy? proxy = null)
|
||||
{
|
||||
API = api;
|
||||
_storage = authStorage;
|
||||
_proxy = proxy;
|
||||
_jsonOptions = new JsonSerializerOptions
|
||||
{
|
||||
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
|
||||
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
|
||||
Converters = { new JsonStringEnumConverter(new UpperSnakeCaseNamingPolicy(), false) }
|
||||
};
|
||||
_redirector = new YnisonWebSocket();
|
||||
_state = new YnisonWebSocket();
|
||||
_redirector = new YnisonWebSocket(_proxy);
|
||||
_state = new YnisonWebSocket(_proxy);
|
||||
}
|
||||
|
||||
private string SerializeJson(object data) => JsonSerializer.Serialize(data, _jsonOptions);
|
||||
|
||||
private T Deserialize<T>(YYnisonMessageType messageType, string data)
|
||||
{
|
||||
return JsonSerializer.Deserialize<T>(data, _jsonOptions)
|
||||
=> JsonSerializer.Deserialize<T>(data, _jsonOptions)
|
||||
?? throw new JsonException("Десериализация вернула null");
|
||||
}
|
||||
|
||||
private T DeserializeMessage<T>(YYnisonMessageType messageType, string data)
|
||||
{
|
||||
@@ -120,8 +118,8 @@ public class YnisonPlayer : IDisposable
|
||||
if (index < 0 || index >= State.PlayerState.PlayerQueue.PlayableList.Count)
|
||||
return null;
|
||||
var item = State.PlayerState.PlayerQueue.PlayableList[index];
|
||||
var response = await API.Track.GetAsync(_storage, item.PlayableId);
|
||||
return response?.Result?.FirstOrDefault();
|
||||
var response = await API.Track.GetAsync(item.PlayableId);
|
||||
return response;
|
||||
}
|
||||
|
||||
private async Task UpdateStateAsync()
|
||||
|
||||
Reference in New Issue
Block a user