2019-01-01 16:27:11 +01:00
using System.Collections.Generic ;
using System.Reflection ;
using Emby.Server.Implementations ;
2019-06-10 00:53:16 +02:00
using MediaBrowser.Common.Net ;
using MediaBrowser.Controller.Drawing ;
2019-01-01 16:27:11 +01:00
using MediaBrowser.Model.IO ;
2019-02-17 10:54:47 +00:00
using Microsoft.Extensions.Configuration ;
2019-01-01 16:27:11 +01:00
using Microsoft.Extensions.Logging ;
namespace Jellyfin.Server
{
2019-08-11 15:11:53 +02:00
/// <summary>
/// Implementation of the abstract <see cref="ApplicationHost" /> class.
/// </summary>
2019-01-01 16:27:11 +01:00
public class CoreAppHost : ApplicationHost
{
2019-08-11 15:11:53 +02:00
/// <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="imageEncoder">The <see cref="IImageEncoder" /> 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>
/// <param name="configuration">The <see cref="IConfiguration" /> to be used by the <see cref="CoreAppHost" />.</param>
2019-02-17 10:54:47 +00:00
public CoreAppHost (
ServerApplicationPaths applicationPaths ,
ILoggerFactory loggerFactory ,
StartupOptions options ,
IFileSystem fileSystem ,
2019-06-10 00:53:16 +02:00
IImageEncoder imageEncoder ,
INetworkManager networkManager ,
2019-02-17 10:54:47 +00:00
IConfiguration configuration )
: base (
applicationPaths ,
loggerFactory ,
options ,
fileSystem ,
imageEncoder ,
networkManager ,
configuration )
2019-01-01 16:27:11 +01:00
{
}
2019-08-11 15:11:53 +02:00
/// <inheritdoc />
2019-01-28 13:41:37 +00:00
public override bool CanSelfRestart = > StartupOptions . RestartPath ! = null ;
2019-01-01 16:27:11 +01:00
2019-08-11 15:11:53 +02:00
/// <inheritdoc />
2019-01-01 16:27:11 +01:00
protected override void RestartInternal ( ) = > Program . Restart ( ) ;
2019-08-11 15:11:53 +02:00
/// <inheritdoc />
2019-01-01 16:27:11 +01:00
protected override IEnumerable < Assembly > GetAssembliesWithPartsInternal ( )
2019-02-06 14:04:32 +01:00
{
yield return typeof ( CoreAppHost ) . Assembly ;
}
2019-01-01 16:27:11 +01:00
2019-08-11 15:11:53 +02:00
/// <inheritdoc />
2019-01-01 16:27:11 +01:00
protected override void ShutdownInternal ( ) = > Program . Shutdown ( ) ;
2020-03-05 17:41:32 +03:00
/// <summary>
/// Runs the migration routines if necessary.
/// </summary>
public void TryMigrate ( )
{
var previousVersion = ConfigurationManager . CommonConfiguration . PreviousVersion ;
switch ( ApplicationVersion . CompareTo ( previousVersion ) )
{
case 1 :
Logger . LogWarning ( "Version check shows Jellyfin was updated: previous version={0}, current version={1}" , previousVersion , ApplicationVersion ) ;
Migrations . Run ( this , Logger ) ;
ConfigurationManager . CommonConfiguration . PreviousVersion = ApplicationVersion ;
ConfigurationManager . SaveConfiguration ( ) ;
break ;
case 0 :
// nothing to do, versions match
break ;
case - 1 :
Logger . LogWarning ( "Version check shows Jellyfin was rolled back, use at your own risk: previous version={0}, current version={1}" , previousVersion , ApplicationVersion ) ;
// no "rollback" routines for now
ConfigurationManager . CommonConfiguration . PreviousVersion = ApplicationVersion ;
ConfigurationManager . SaveConfiguration ( ) ;
break ;
}
}
2019-01-01 16:27:11 +01:00
}
}