mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-31 10:37:22 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| using System.Reflection;
 | |
| using Emby.Drawing;
 | |
| using Emby.Server.Implementations;
 | |
| using Emby.Server.Implementations.Session;
 | |
| using Jellyfin.Api.WebSocketListeners;
 | |
| using Jellyfin.Drawing.Skia;
 | |
| using Jellyfin.Server.Implementations;
 | |
| using Jellyfin.Server.Implementations.Activity;
 | |
| using Jellyfin.Server.Implementations.Events;
 | |
| using Jellyfin.Server.Implementations.Users;
 | |
| using MediaBrowser.Controller;
 | |
| using MediaBrowser.Controller.BaseItemManager;
 | |
| using MediaBrowser.Controller.Drawing;
 | |
| using MediaBrowser.Controller.Events;
 | |
| using MediaBrowser.Controller.Library;
 | |
| using MediaBrowser.Controller.Net;
 | |
| 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="collection">The <see cref="IServiceCollection"/> to be used by the <see cref="CoreAppHost"/>.</param>
 | |
|         public CoreAppHost(
 | |
|             IServerApplicationPaths applicationPaths,
 | |
|             ILoggerFactory loggerFactory,
 | |
|             IStartupOptions options,
 | |
|             IFileSystem fileSystem,
 | |
|             IServiceCollection collection)
 | |
|             : base(
 | |
|                 applicationPaths,
 | |
|                 loggerFactory,
 | |
|                 options,
 | |
|                 fileSystem,
 | |
|                 collection)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         /// <inheritdoc/>
 | |
|         protected override void RegisterServices()
 | |
|         {
 | |
|             // 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)}.");
 | |
|             }
 | |
| 
 | |
|             ServiceCollection.AddDbContextPool<JellyfinDb>(
 | |
|                  options => options.UseSqlite($"Filename={Path.Combine(ApplicationPaths.DataPath, "jellyfin.db")}"));
 | |
| 
 | |
|             ServiceCollection.AddEventServices();
 | |
|             ServiceCollection.AddSingleton<IBaseItemManager, BaseItemManager>();
 | |
|             ServiceCollection.AddSingleton<IEventManager, EventManager>();
 | |
|             ServiceCollection.AddSingleton<JellyfinDbProvider>();
 | |
| 
 | |
|             ServiceCollection.AddSingleton<IActivityManager, ActivityManager>();
 | |
|             ServiceCollection.AddSingleton<IUserManager, UserManager>();
 | |
|             ServiceCollection.AddSingleton<IDisplayPreferencesManager, DisplayPreferencesManager>();
 | |
| 
 | |
|             // TODO search the assemblies instead of adding them manually?
 | |
|             ServiceCollection.AddSingleton<IWebSocketListener, SessionWebSocketListener>();
 | |
|             ServiceCollection.AddSingleton<IWebSocketListener, ActivityLogWebSocketListener>();
 | |
|             ServiceCollection.AddSingleton<IWebSocketListener, ScheduledTasksWebSocketListener>();
 | |
|             ServiceCollection.AddSingleton<IWebSocketListener, SessionInfoWebSocketListener>();
 | |
| 
 | |
|             base.RegisterServices();
 | |
|         }
 | |
| 
 | |
|         /// <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();
 | |
|     }
 | |
| }
 |