using System; using System.Collections.Generic; using System.Globalization; using System.Net.Http; using System.Threading.Tasks; using Jellyfin.Plugin.TubeArchivistMetadata.Configuration; using Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Plugins; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Serialization; using Microsoft.Extensions.Logging; namespace Jellyfin.Plugin.TubeArchivistMetadata { /// /// The main plugin. /// public class Plugin : BasePlugin, IHasWebPages { /// /// Initializes a new instance of the class. /// /// Instance of the interface. /// Instance of the interface. /// Instance of the interface. public Plugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer, ILogger logger) : base(applicationPaths, xmlSerializer) { Instance = this; Logger = logger; HttpClientHandler handler = new HttpClientHandler(); handler.AllowAutoRedirect = false; handler.CheckCertificateRevocationList = true; HttpClient = new HttpClient(handler); 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}", "TubeArchivist API URL: " + Instance?.Configuration.TubeArchivistUrl); logger.LogInformation("{Message}", "Pinging TubeArchivist API..."); } /// public override string Name => Constants.PluginName; /// public override Guid Id => Guid.Parse(Constants.PluginGuid); /// /// Gets the current plugin instance. /// public static Plugin? Instance { get; private set; } /// /// Gets the logger instance used globally by the plugin. /// public ILogger Logger { get; } /// /// Gets the HTTP client used globally by the plugin. /// public HttpClient HttpClient { get; } /// public IEnumerable GetPages() => new[] { new PluginPageInfo { Name = this.Name, EmbeddedResourcePath = string.Format(CultureInfo.InvariantCulture, "{0}.Configuration.configPage.html", GetType().Namespace) } }; /// /// Logs the TubeArchivist API connection status. /// 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); } } }