Ping TubeArchivist API when saving configuration and at boot
This commit is contained in:
@@ -13,6 +13,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Configuration
|
|||||||
{
|
{
|
||||||
private ILogger _logger;
|
private ILogger _logger;
|
||||||
private string _tubeArchivistUrl;
|
private string _tubeArchivistUrl;
|
||||||
|
private string _tubeArchivistApiKey;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="PluginConfiguration"/> class.
|
/// Initializes a new instance of the <see cref="PluginConfiguration"/> class.
|
||||||
@@ -30,7 +31,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Configuration
|
|||||||
|
|
||||||
CollectionTitle = string.Empty;
|
CollectionTitle = string.Empty;
|
||||||
_tubeArchivistUrl = string.Empty;
|
_tubeArchivistUrl = string.Empty;
|
||||||
TubeArchivistApiKey = string.Empty;
|
_tubeArchivistApiKey = string.Empty;
|
||||||
MaxDescriptionLength = 500;
|
MaxDescriptionLength = 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,13 +61,27 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.Configuration
|
|||||||
_logger.LogInformation("{Message}", "Given TubeArchivist URL contains no schema. Adding http://...");
|
_logger.LogInformation("{Message}", "Given TubeArchivist URL contains no schema. Adding http://...");
|
||||||
_tubeArchivistUrl = Utils.SanitizeUrl("http://" + value);
|
_tubeArchivistUrl = Utils.SanitizeUrl("http://" + value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Plugin.Instance?.LogTAApiConnectionStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets TubeArchivist API key.
|
/// Gets or sets TubeArchivist API key.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string TubeArchivistApiKey { get; set; }
|
public string TubeArchivistApiKey
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _tubeArchivistApiKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_tubeArchivistApiKey = value;
|
||||||
|
Plugin.Instance?.LogTAApiConnectionStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets maximum series and episodes overviews length.
|
/// Gets or sets maximum series and episodes overviews length.
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Plugin.TubeArchivistMetadata.Configuration;
|
using Jellyfin.Plugin.TubeArchivistMetadata.Configuration;
|
||||||
|
using Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Plugins;
|
using MediaBrowser.Common.Plugins;
|
||||||
using MediaBrowser.Model.Plugins;
|
using MediaBrowser.Model.Plugins;
|
||||||
@@ -34,6 +36,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata
|
|||||||
HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Token", Instance?.Configuration.TubeArchivistApiKey);
|
HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Token", Instance?.Configuration.TubeArchivistApiKey);
|
||||||
logger.LogInformation("{Message}", "Collection display name: " + Instance?.Configuration.CollectionTitle);
|
logger.LogInformation("{Message}", "Collection display name: " + Instance?.Configuration.CollectionTitle);
|
||||||
logger.LogInformation("{Message}", "TubeArchivist API URL: " + Instance?.Configuration.TubeArchivistUrl);
|
logger.LogInformation("{Message}", "TubeArchivist API URL: " + Instance?.Configuration.TubeArchivistUrl);
|
||||||
|
logger.LogInformation("{Message}", "Pinging TubeArchivist API...");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -66,5 +69,28 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata
|
|||||||
EmbeddedResourcePath = string.Format(CultureInfo.InvariantCulture, "{0}.Configuration.configPage.html", GetType().Namespace)
|
EmbeddedResourcePath = string.Format(CultureInfo.InvariantCulture, "{0}.Configuration.configPage.html", GetType().Namespace)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Logs the TubeArchivist API connection status.
|
||||||
|
/// </summary>
|
||||||
|
public void LogTAApiConnectionStatus()
|
||||||
|
{
|
||||||
|
Logger.LogInformation("{Message}", "Ping...");
|
||||||
|
|
||||||
|
var api = TubeArchivistApi.GetInstance();
|
||||||
|
Task.Run(() => api.Ping()).ContinueWith(
|
||||||
|
task =>
|
||||||
|
{
|
||||||
|
if (task.Result != null)
|
||||||
|
{
|
||||||
|
Logger.LogInformation("{Message}", "TubeArchivist API said: " + task.Result.Response + "!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.LogCritical("{Message}", "TubeArchivist API was unreachable!");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
TaskScheduler.Default);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
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