using System; using System.Collections.Generic; using System.Reflection; using Emby.Drawing; using Emby.Server.Implementations; using Jellyfin.Drawing.Skia; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Drawing; using MediaBrowser.Model.IO; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace Jellyfin.Server { /// /// Implementation of the abstract class. /// public class CoreAppHost : ApplicationHost { /// /// Initializes a new instance of the class. /// /// The to be used by the . /// The to be used by the . /// The to be used by the . /// The to be used by the . /// The to be used by the . public CoreAppHost( ServerApplicationPaths applicationPaths, ILoggerFactory loggerFactory, StartupOptions options, IFileSystem fileSystem, INetworkManager networkManager) : base( applicationPaths, loggerFactory, options, fileSystem, networkManager) { } /// protected override void RegisterServices(IServiceCollection serviceCollection) { // Register an image encoder bool useSkiaEncoder = SkiaEncoder.IsNativeLibAvailable(); Type imageEncoderType = useSkiaEncoder ? typeof(SkiaEncoder) : typeof(NullImageEncoder); serviceCollection.AddSingleton(typeof(IImageEncoder), imageEncoderType); // Log a warning if the Skia encoder could not be used if (!useSkiaEncoder) { Logger.LogWarning($"Skia not available. Will fallback to {nameof(NullImageEncoder)}."); } base.RegisterServices(serviceCollection); } /// protected override void RestartInternal() => Program.Restart(); /// protected override IEnumerable GetAssembliesWithPartsInternal() { yield return typeof(CoreAppHost).Assembly; } /// protected override void ShutdownInternal() => Program.Shutdown(); } }