Ping TubeArchivist API when saving configuration and at boot
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist
|
||||
{
|
||||
/// <summary>
|
||||
/// A class representing TubeArchivist API ping response data.
|
||||
/// </summary>
|
||||
public class PingResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PingResponse"/> class.
|
||||
/// </summary>
|
||||
/// <param name="response">Response from the API ("pong").</param>
|
||||
/// <param name="user">TubeArchivist user id.</param>
|
||||
/// <param name="version">TubeArchivist version.</param>
|
||||
public PingResponse(
|
||||
string response,
|
||||
int user,
|
||||
string version)
|
||||
{
|
||||
this.Response = response;
|
||||
this.User = user;
|
||||
this.Version = version;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets response to the ping ("pong").
|
||||
/// </summary>
|
||||
[JsonProperty(PropertyName = "response")]
|
||||
public string Response { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets user id.
|
||||
/// </summary>
|
||||
[JsonProperty(PropertyName = "user")]
|
||||
public int User { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets TubeArchivist version.
|
||||
/// </summary>
|
||||
[JsonProperty(PropertyName = "version")]
|
||||
public string Version { get; }
|
||||
}
|
||||
}
|
||||
@@ -116,5 +116,35 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist
|
||||
|
||||
return video?.Data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates connection and authentication to TubeArchivist.
|
||||
/// </summary>
|
||||
/// <returns>The ping response.</returns>
|
||||
public async Task<PingResponse?> Ping()
|
||||
{
|
||||
PingResponse? pong = null;
|
||||
|
||||
var pingEndpoint = "/api/ping/";
|
||||
var url = new Uri(Utils.SanitizeUrl(Plugin.Instance!.Configuration.TubeArchivistUrl + pingEndpoint));
|
||||
var response = await client.GetAsync(url).ConfigureAwait(true);
|
||||
|
||||
while (response.StatusCode == HttpStatusCode.Moved)
|
||||
{
|
||||
url = response.Headers.Location;
|
||||
_logger.LogInformation("{Message}", "Received redirect to: " + url);
|
||||
response = await client.GetAsync(url).ConfigureAwait(true);
|
||||
}
|
||||
|
||||
_logger.LogInformation("{Message}", url + ": " + response.StatusCode);
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
string rawData = await response.Content.ReadAsStringAsync().ConfigureAwait(true);
|
||||
pong = JsonConvert.DeserializeObject<PingResponse>(rawData);
|
||||
}
|
||||
|
||||
return pong;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user