update core projects

This commit is contained in:
Luke Pulverenti 2016-11-11 03:13:11 -05:00
parent f8dd02bb66
commit 918b9ca86d
13 changed files with 168 additions and 217 deletions

View File

@ -172,7 +172,7 @@ namespace Emby.Common.Implementations
protected ICryptoProvider CryptographyProvider = new CryptographyProvider();
protected IEnvironmentInfo EnvironmentInfo = new Emby.Common.Implementations.EnvironmentInfo.EnvironmentInfo();
protected IEnvironmentInfo EnvironmentInfo { get; private set; }
private DeviceId _deviceId;
public string SystemId
@ -205,8 +205,11 @@ namespace Emby.Common.Implementations
/// </summary>
protected BaseApplicationHost(TApplicationPathsType applicationPaths,
ILogManager logManager,
IFileSystem fileSystem)
IFileSystem fileSystem,
IEnvironmentInfo environmentInfo)
{
EnvironmentInfo = environmentInfo;
// hack alert, until common can target .net core
BaseExtensions.CryptographyProvider = CryptographyProvider;

View File

@ -9,6 +9,8 @@ namespace Emby.Common.Implementations.EnvironmentInfo
{
public class EnvironmentInfo : IEnvironmentInfo
{
public MediaBrowser.Model.System.Architecture? CustomArchitecture { get; set; }
public MediaBrowser.Model.System.OperatingSystem OperatingSystem
{
get
@ -66,5 +68,32 @@ namespace Emby.Common.Implementations.EnvironmentInfo
return "1.0";
}
}
public MediaBrowser.Model.System.Architecture SystemArchitecture
{
get
{
if (CustomArchitecture.HasValue)
{
return CustomArchitecture.Value;
}
#if NET46
return Environment.Is64BitOperatingSystem ? MediaBrowser.Model.System.Architecture.X64 : MediaBrowser.Model.System.Architecture.X86;
#elif NETSTANDARD1_6
switch(System.Runtime.InteropServices.RuntimeInformation.OSArchitecture)
{
case System.Runtime.InteropServices.Architecture.Arm:
return MediaBrowser.Model.System.Architecture.Arm;
case System.Runtime.InteropServices.Architecture.Arm64:
return MediaBrowser.Model.System.Architecture.Arm64;
case System.Runtime.InteropServices.Architecture.X64:
return MediaBrowser.Model.System.Architecture.X64;
case System.Runtime.InteropServices.Architecture.X86:
return MediaBrowser.Model.System.Architecture.X86;
}
#endif
return MediaBrowser.Model.System.Architecture.X64;
}
}
}
}

View File

@ -6,7 +6,7 @@ using Emby.Server.Core;
using Emby.Server.Core.Data;
using Emby.Server.Core.FFMpeg;
namespace MediaBrowser.Server.Startup.Common
namespace Emby.Server.Core
{
public interface INativeApp
{
@ -19,18 +19,8 @@ namespace MediaBrowser.Server.Startup.Common
/// <summary>
/// Authorizes the server.
/// </summary>
/// <param name="udpPort">The UDP port.</param>
/// <param name="httpServerPort">The HTTP server port.</param>
/// <param name="httpsServerPort">The HTTPS server port.</param>
/// <param name="tempDirectory">The temporary directory.</param>
void AuthorizeServer(int udpPort, int httpServerPort, int httpsServerPort, string applicationPath, string tempDirectory);
/// <summary>
/// Gets the environment.
/// </summary>
/// <value>The environment.</value>
NativeEnvironment Environment { get; }
/// <summary>
/// Gets a value indicating whether [supports running as service].
/// </summary>
@ -54,12 +44,6 @@ namespace MediaBrowser.Server.Startup.Common
/// </summary>
/// <value><c>true</c> if [supports autorun at startup]; otherwise, <c>false</c>.</value>
bool SupportsAutoRunAtStartup { get; }
/// <summary>
/// Gets a value indicating whether [supports library monitor].
/// </summary>
/// <value><c>true</c> if [supports library monitor]; otherwise, <c>false</c>.</value>
bool SupportsLibraryMonitor { get; }
/// <summary>
/// Gets a value indicating whether this instance can self update.

View File

@ -26,12 +26,6 @@ namespace MediaBrowser.Controller
/// </summary>
/// <value><c>true</c> if [supports automatic run at startup]; otherwise, <c>false</c>.</value>
bool SupportsAutoRunAtStartup { get; }
/// <summary>
/// Gets a value indicating whether [supports library monitor].
/// </summary>
/// <value><c>true</c> if [supports library monitor]; otherwise, <c>false</c>.</value>
bool SupportsLibraryMonitor { get; }
/// <summary>
/// Gets the HTTP server port.

View File

@ -4,6 +4,7 @@
{
X86 = 0,
X64 = 1,
Arm = 2
Arm = 2,
Arm64 = 3
}
}

View File

@ -11,6 +11,7 @@ namespace MediaBrowser.Model.System
MediaBrowser.Model.System.OperatingSystem OperatingSystem { get; }
string OperatingSystemName { get; }
string OperatingSystemVersion { get; }
Architecture SystemArchitecture { get; }
}
public enum OperatingSystem

View File

@ -12,7 +12,6 @@ using Emby.Server.Core;
using Emby.Server.Core.Data;
using Emby.Server.Core.FFMpeg;
using MediaBrowser.Model.System;
using OperatingSystem = MediaBrowser.Server.Startup.Common.OperatingSystem;
namespace MediaBrowser.Server.Mono.Native
{
@ -20,11 +19,13 @@ namespace MediaBrowser.Server.Mono.Native
{
protected StartupOptions StartupOptions { get; private set; }
protected ILogger Logger { get; private set; }
private readonly MonoEnvironmentInfo _environment;
public MonoApp(StartupOptions startupOptions, ILogger logger)
public MonoApp(StartupOptions startupOptions, ILogger logger, MonoEnvironmentInfo environment)
{
StartupOptions = startupOptions;
Logger = logger;
_environment = environment;
}
/// <summary>
@ -77,11 +78,6 @@ namespace MediaBrowser.Server.Mono.Native
{
var list = new List<Assembly>();
if (Environment.OperatingSystem == Startup.Common.OperatingSystem.Linux)
{
list.AddRange(GetLinuxAssemblies());
}
list.Add(GetType().Assembly);
return list;
@ -91,7 +87,7 @@ namespace MediaBrowser.Server.Mono.Native
{
var list = new List<Assembly>();
list.Add(typeof(LinuxIsoManager).Assembly);
//list.Add(typeof(LinuxIsoManager).Assembly);
return list;
}
@ -100,12 +96,6 @@ namespace MediaBrowser.Server.Mono.Native
{
}
private NativeEnvironment _nativeEnvironment;
public NativeEnvironment Environment
{
get { return _nativeEnvironment ?? (_nativeEnvironment = GetEnvironmentInfo()); }
}
public bool SupportsRunningAsService
{
get
@ -122,14 +112,6 @@ namespace MediaBrowser.Server.Mono.Native
}
}
public bool SupportsLibraryMonitor
{
get
{
return Environment.OperatingSystem != Startup.Common.OperatingSystem.Osx;
}
}
public void ConfigureAutoRun(bool autorun)
{
}
@ -139,96 +121,29 @@ namespace MediaBrowser.Server.Mono.Native
return new NetworkManager(logger);
}
private NativeEnvironment GetEnvironmentInfo()
{
var info = new NativeEnvironment
{
OperatingSystem = Startup.Common.OperatingSystem.Linux
};
var uname = GetUnixName();
var sysName = uname.sysname ?? string.Empty;
if (string.Equals(sysName, "Darwin", StringComparison.OrdinalIgnoreCase))
{
info.OperatingSystem = Startup.Common.OperatingSystem.Osx;
}
else if (string.Equals(sysName, "Linux", StringComparison.OrdinalIgnoreCase))
{
info.OperatingSystem = Startup.Common.OperatingSystem.Linux;
}
else if (string.Equals(sysName, "BSD", StringComparison.OrdinalIgnoreCase))
{
info.OperatingSystem = Startup.Common.OperatingSystem.Bsd;
}
var archX86 = new Regex("(i|I)[3-6]86");
if (archX86.IsMatch(uname.machine))
{
info.SystemArchitecture = Architecture.X86;
}
else if (string.Equals(uname.machine, "x86_64", StringComparison.OrdinalIgnoreCase))
{
info.SystemArchitecture = Architecture.X64;
}
else if (uname.machine.StartsWith("arm", StringComparison.OrdinalIgnoreCase))
{
info.SystemArchitecture = Architecture.Arm;
}
else if (System.Environment.Is64BitOperatingSystem)
{
info.SystemArchitecture = Architecture.X64;
}
else
{
info.SystemArchitecture = Architecture.X86;
}
info.OperatingSystemVersionString = string.IsNullOrWhiteSpace(sysName) ?
System.Environment.OSVersion.VersionString :
sysName;
return info;
}
private Uname _unixName;
private Uname GetUnixName()
{
if (_unixName == null)
{
var uname = new Uname();
try
{
Utsname utsname;
var callResult = Syscall.uname(out utsname);
if (callResult == 0)
{
uname.sysname = utsname.sysname ?? string.Empty;
uname.machine = utsname.machine ?? string.Empty;
}
}
catch (Exception ex)
{
Logger.ErrorException("Error getting unix name", ex);
}
_unixName = uname;
}
return _unixName;
}
public class Uname
{
public string sysname = string.Empty;
public string machine = string.Empty;
}
public FFMpegInstallInfo GetFfmpegInstallInfo()
{
return GetInfo(Environment);
var info = new FFMpegInstallInfo();
// Windows builds: http://ffmpeg.zeranoe.com/builds/
// Linux builds: http://johnvansickle.com/ffmpeg/
// OS X builds: http://ffmpegmac.net/
// OS X x64: http://www.evermeet.cx/ffmpeg/
if (_environment.IsBsd)
{
}
else if (_environment.OperatingSystem == Model.System.OperatingSystem.Linux)
{
info.ArchiveType = "7z";
info.Version = "20160215";
}
// No version available - user requirement
info.DownloadUrls = new string[] { };
return info;
}
public void LaunchUrl(string url)
@ -241,33 +156,6 @@ namespace MediaBrowser.Server.Mono.Native
return new DbConnector(Logger);
}
public static FFMpegInstallInfo GetInfo(NativeEnvironment environment)
{
var info = new FFMpegInstallInfo();
// Windows builds: http://ffmpeg.zeranoe.com/builds/
// Linux builds: http://johnvansickle.com/ffmpeg/
// OS X builds: http://ffmpegmac.net/
// OS X x64: http://www.evermeet.cx/ffmpeg/
switch (environment.OperatingSystem)
{
case OperatingSystem.Osx:
case OperatingSystem.Bsd:
break;
case OperatingSystem.Linux:
info.ArchiveType = "7z";
info.Version = "20160215";
break;
}
// No version available - user requirement
info.DownloadUrls = new string[] { };
return info;
}
public void EnableLoopback(string appName)
{

View File

@ -11,11 +11,17 @@ using System.Net;
using System.Net.Security;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Emby.Common.Implementations.EnvironmentInfo;
using Emby.Common.Implementations.IO;
using Emby.Common.Implementations.Logging;
using Emby.Server.Core;
using Emby.Server.Implementations.IO;
using MediaBrowser.Model.System;
using Mono.Unix.Native;
using NLog;
using ILogger = MediaBrowser.Model.Logging.ILogger;
namespace MediaBrowser.Server.Mono
{
@ -80,9 +86,11 @@ namespace MediaBrowser.Server.Mono
var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), false, false);
fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
var nativeApp = new MonoApp(options, logManager.GetLogger("App"));
var environmentInfo = GetEnvironmentInfo();
_appHost = new ApplicationHost(appPaths, logManager, options, fileSystem, nativeApp, new PowerManagement(), "emby.mono.zip");
var nativeApp = new MonoApp(options, logManager.GetLogger("App"), environmentInfo);
_appHost = new ApplicationHost(appPaths, logManager, options, fileSystem, nativeApp, new PowerManagement(), "emby.mono.zip", environmentInfo);
if (options.ContainsOption("-v"))
{
@ -107,6 +115,87 @@ namespace MediaBrowser.Server.Mono
Task.WaitAll(task);
}
private static MonoEnvironmentInfo GetEnvironmentInfo()
{
var info = new MonoEnvironmentInfo();
var uname = GetUnixName();
var sysName = uname.sysname ?? string.Empty;
if (string.Equals(sysName, "Darwin", StringComparison.OrdinalIgnoreCase))
{
//info.OperatingSystem = Startup.Common.OperatingSystem.Osx;
}
else if (string.Equals(sysName, "Linux", StringComparison.OrdinalIgnoreCase))
{
//info.OperatingSystem = Startup.Common.OperatingSystem.Linux;
}
else if (string.Equals(sysName, "BSD", StringComparison.OrdinalIgnoreCase))
{
//info.OperatingSystem = Startup.Common.OperatingSystem.Bsd;
info.IsBsd = true;
}
var archX86 = new Regex("(i|I)[3-6]86");
if (archX86.IsMatch(uname.machine))
{
info.CustomArchitecture = Architecture.X86;
}
else if (string.Equals(uname.machine, "x86_64", StringComparison.OrdinalIgnoreCase))
{
info.CustomArchitecture = Architecture.X64;
}
else if (uname.machine.StartsWith("arm", StringComparison.OrdinalIgnoreCase))
{
info.CustomArchitecture = Architecture.Arm;
}
else if (System.Environment.Is64BitOperatingSystem)
{
info.CustomArchitecture = Architecture.X64;
}
else
{
info.CustomArchitecture = Architecture.X86;
}
return info;
}
private static Uname _unixName;
private static Uname GetUnixName()
{
if (_unixName == null)
{
var uname = new Uname();
try
{
Utsname utsname;
var callResult = Syscall.uname(out utsname);
if (callResult == 0)
{
uname.sysname = utsname.sysname ?? string.Empty;
uname.machine = utsname.machine ?? string.Empty;
}
}
catch (Exception ex)
{
_logger.ErrorException("Error getting unix name", ex);
}
_unixName = uname;
}
return _unixName;
}
public class Uname
{
public string sysname = string.Empty;
public string machine = string.Empty;
}
/// <summary>
/// Handles the SessionEnding event of the SystemEvents control.
/// </summary>
@ -192,4 +281,9 @@ namespace MediaBrowser.Server.Mono
return true;
}
}
public class MonoEnvironmentInfo : EnvironmentInfo
{
public bool IsBsd { get; set; }
}
}

View File

@ -277,8 +277,9 @@ namespace MediaBrowser.Server.Startup.Common
IFileSystem fileSystem,
INativeApp nativeApp,
IPowerManagement powerManagement,
string releaseAssetFilename)
: base(applicationPaths, logManager, fileSystem)
string releaseAssetFilename,
IEnvironmentInfo environmentInfo)
: base(applicationPaths, logManager, fileSystem, environmentInfo)
{
_startupOptions = options;
_releaseAssetFilename = releaseAssetFilename;
@ -301,11 +302,6 @@ namespace MediaBrowser.Server.Startup.Common
}
}
public override string OperatingSystemDisplayName
{
get { return NativeApp.Environment.OperatingSystemVersionString; }
}
public override bool IsRunningAsService
{
get { return NativeApp.IsRunningAsService; }
@ -316,11 +312,6 @@ namespace MediaBrowser.Server.Startup.Common
get { return NativeApp.SupportsRunningAsService; }
}
public bool SupportsLibraryMonitor
{
get { return NativeApp.SupportsLibraryMonitor; }
}
/// <summary>
/// Gets the name.
/// </summary>
@ -1300,7 +1291,7 @@ namespace MediaBrowser.Server.Startup.Common
HttpServerPortNumber = HttpPort,
SupportsHttps = SupportsHttps,
HttpsPortNumber = HttpsPort,
OperatingSystem = NativeApp.Environment.OperatingSystem.ToString(),
OperatingSystem = EnvironmentInfo.OperatingSystem.ToString(),
OperatingSystemDisplayName = OperatingSystemDisplayName,
CanSelfRestart = CanSelfRestart,
CanSelfUpdate = CanSelfUpdate,
@ -1312,9 +1303,9 @@ namespace MediaBrowser.Server.Startup.Common
SupportsRunningAsService = SupportsRunningAsService,
ServerName = FriendlyName,
LocalAddress = localAddress,
SupportsLibraryMonitor = SupportsLibraryMonitor,
SupportsLibraryMonitor = true,
EncoderLocationType = MediaEncoder.EncoderLocationType,
SystemArchitecture = NativeApp.Environment.SystemArchitecture,
SystemArchitecture = EnvironmentInfo.SystemArchitecture,
SystemUpdateLevel = ConfigurationManager.CommonConfiguration.SystemUpdateLevel,
PackageName = _startupOptions.GetOption("-package")
};

View File

@ -114,7 +114,6 @@
<Compile Include="Cryptography\X509Extensions.cs" />
<Compile Include="Cryptography\X520Attributes.cs" />
<Compile Include="HttpServerFactory.cs" />
<Compile Include="INativeApp.cs" />
<Compile Include="IO\MemoryStreamProvider.cs" />
<Compile Include="LiveTv\TunerHosts\SatIp\ChannelScan.cs" />
<Compile Include="LiveTv\TunerHosts\SatIp\Rtcp\ReportBlock.cs" />
@ -138,7 +137,6 @@
<Compile Include="LiveTv\TunerHosts\SatIp\SatIpHost.cs" />
<Compile Include="LiveTv\TunerHosts\SatIp\TransmissionMode.cs" />
<Compile Include="LiveTv\TunerHosts\SatIp\Utils.cs" />
<Compile Include="NativeEnvironment.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SystemEvents.cs" />
</ItemGroup>

View File

@ -1,19 +0,0 @@
using MediaBrowser.Model.System;
namespace MediaBrowser.Server.Startup.Common
{
public class NativeEnvironment
{
public OperatingSystem OperatingSystem { get; set; }
public Architecture SystemArchitecture { get; set; }
public string OperatingSystemVersionString { get; set; }
}
public enum OperatingSystem
{
Windows = 0,
Osx = 1,
Bsd = 2,
Linux = 3
}
}

View File

@ -17,6 +17,7 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emby.Common.Implementations.EnvironmentInfo;
using Emby.Common.Implementations.IO;
using Emby.Common.Implementations.Logging;
using Emby.Server.Core;
@ -324,7 +325,8 @@ namespace MediaBrowser.ServerApplication
fileSystem,
nativeApp,
new PowerManagement(),
"emby.windows.zip");
"emby.windows.zip",
new EnvironmentInfo());
var initProgress = new Progress<double>();

View File

@ -14,8 +14,6 @@ using Emby.Server.Core.FFMpeg;
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.System;
using OperatingSystem = MediaBrowser.Server.Startup.Common.OperatingSystem;
namespace MediaBrowser.ServerApplication.Native
{
@ -49,19 +47,6 @@ namespace MediaBrowser.ServerApplication.Native
ServerAuthorization.AuthorizeServer(udpPort, httpServerPort, httpsPort, applicationPath, tempDirectory);
}
public NativeEnvironment Environment
{
get
{
return new NativeEnvironment
{
OperatingSystem = OperatingSystem.Windows,
SystemArchitecture = System.Environment.Is64BitOperatingSystem ? Architecture.X64 : Architecture.X86,
OperatingSystemVersionString = System.Environment.OSVersion.VersionString
};
}
}
public bool SupportsLibraryMonitor
{
get { return true; }