12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Reflection;
- using Emby.Drawing;
- using Emby.Server.Implementations;
- using Jellyfin.Drawing.Skia;
- using Jellyfin.Server.Implementations;
- using Jellyfin.Server.Implementations.Activity;
- using Jellyfin.Server.Implementations.Users;
- using MediaBrowser.Common.Net;
- using MediaBrowser.Controller.Drawing;
- using MediaBrowser.Controller.Library;
- using MediaBrowser.Model.Activity;
- using MediaBrowser.Model.IO;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Logging;
- namespace Jellyfin.Server
- {
- /// <summary>
- /// Implementation of the abstract <see cref="ApplicationHost" /> class.
- /// </summary>
- public class CoreAppHost : ApplicationHost
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="CoreAppHost" /> class.
- /// </summary>
- /// <param name="applicationPaths">The <see cref="ServerApplicationPaths" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="loggerFactory">The <see cref="ILoggerFactory" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="options">The <see cref="StartupOptions" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="fileSystem">The <see cref="IFileSystem" /> to be used by the <see cref="CoreAppHost" />.</param>
- /// <param name="networkManager">The <see cref="INetworkManager" /> to be used by the <see cref="CoreAppHost" />.</param>
- public CoreAppHost(
- ServerApplicationPaths applicationPaths,
- ILoggerFactory loggerFactory,
- StartupOptions options,
- IFileSystem fileSystem,
- INetworkManager networkManager)
- : base(
- applicationPaths,
- loggerFactory,
- options,
- fileSystem,
- networkManager)
- {
- }
- /// <inheritdoc/>
- 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)}.");
- }
- // TODO: Set up scoping and use AddDbContextPool,
- // can't register as Transient since tracking transient in GC is funky
- // serviceCollection.AddDbContext<JellyfinDb>(
- // options => options
- // .UseSqlite($"Filename={Path.Combine(ApplicationPaths.DataPath, "jellyfin.db")}"),
- // ServiceLifetime.Transient);
- serviceCollection.AddSingleton<JellyfinDbProvider>();
- serviceCollection.AddSingleton<IActivityManager, ActivityManager>();
- serviceCollection.AddSingleton<IUserManager, UserManager>();
- base.RegisterServices(serviceCollection);
- }
- /// <inheritdoc />
- protected override void RestartInternal() => Program.Restart();
- /// <inheritdoc />
- protected override IEnumerable<Assembly> GetAssembliesWithPartsInternal()
- {
- // Jellyfin.Server
- yield return typeof(CoreAppHost).Assembly;
- // Jellyfin.Server.Implementations
- yield return typeof(JellyfinDb).Assembly;
- }
- /// <inheritdoc />
- protected override void ShutdownInternal() => Program.Shutdown();
- }
- }
|