diff options
Diffstat (limited to 'MediaBrowser.Server.Mono/Native/NativeApp.cs')
| -rw-r--r-- | MediaBrowser.Server.Mono/Native/NativeApp.cs | 218 |
1 files changed, 170 insertions, 48 deletions
diff --git a/MediaBrowser.Server.Mono/Native/NativeApp.cs b/MediaBrowser.Server.Mono/Native/NativeApp.cs index f8e33e519..126ce18b5 100644 --- a/MediaBrowser.Server.Mono/Native/NativeApp.cs +++ b/MediaBrowser.Server.Mono/Native/NativeApp.cs @@ -1,67 +1,189 @@ -using MediaBrowser.Server.Mono; -using System; -using System.Runtime.InteropServices; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Updates; +using MediaBrowser.Common.Net; +using MediaBrowser.IsoMounter; using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Updates; +using MediaBrowser.Server.Mono.Networking; +using MediaBrowser.Server.Startup.Common; +using Mono.Unix.Native; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text.RegularExpressions; -namespace MediaBrowser.ServerApplication.Native +namespace MediaBrowser.Server.Mono.Native { /// <summary> /// Class NativeApp /// </summary> - public static class NativeApp + public class NativeApp : INativeApp { /// <summary> /// Shutdowns this instance. /// </summary> - public static void Shutdown() + public void Shutdown() { - MainClass.Shutdown (); + MainClass.Shutdown(); } /// <summary> /// Restarts this instance. /// </summary> - public static void Restart() - { - MainClass.Restart (); - } - - /// <summary> - /// Determines whether this instance [can self restart]. - /// </summary> - /// <returns><c>true</c> if this instance [can self restart]; otherwise, <c>false</c>.</returns> - public static bool CanSelfRestart - { - get - { - return MainClass.CanSelfRestart; - } - } - - /// <summary> - /// Gets a value indicating whether this instance can self update. - /// </summary> - /// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value> - public static bool CanSelfUpdate - { - get - { - return MainClass.CanSelfUpdate; - } - } - - public static bool SupportsAutoRunAtStartup - { - get { return false; } - } - - public static void PreventSystemStandby() - { - + public void Restart() + { + MainClass.Restart(); + } + + /// <summary> + /// Determines whether this instance [can self restart]. + /// </summary> + /// <returns><c>true</c> if this instance [can self restart]; otherwise, <c>false</c>.</returns> + public bool CanSelfRestart + { + get + { + return MainClass.CanSelfRestart; + } + } + + /// <summary> + /// Gets a value indicating whether this instance can self update. + /// </summary> + /// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value> + public bool CanSelfUpdate + { + get + { + return MainClass.CanSelfUpdate; + } + } + + public bool SupportsAutoRunAtStartup + { + get { return false; } + } + + public void PreventSystemStandby() + { + + } + + public List<Assembly> GetAssembliesWithParts() + { + var list = new List<Assembly>(); + + if (Environment.OperatingSystem == Startup.Common.OperatingSystem.Linux) + { + list.AddRange(GetLinuxAssemblies()); + } + + list.Add(GetType().Assembly); + + return list; + } + + private List<Assembly> GetLinuxAssemblies() + { + var list = new List<Assembly>(); + + list.Add(typeof(LinuxIsoManager).Assembly); + + return list; + } + + public void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int udpPort, string tempDirectory) + { + } + + private NativeEnvironment _nativeEnvironment; + public NativeEnvironment Environment + { + get { return _nativeEnvironment ?? (_nativeEnvironment = GetEnvironmentInfo()); } + } + + public bool SupportsRunningAsService + { + get + { + return false; + } + } + + public bool IsRunningAsService + { + get + { + return false; + } + } + + public void ConfigureAutoRun(bool autorun) + { + } + + public INetworkManager CreateNetworkManager(ILogger logger) + { + 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)) + { + // TODO: How to detect BSD? + 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.X86_X64; + } + else if (uname.machine.StartsWith("arm", StringComparison.OrdinalIgnoreCase)) + { + info.SystemArchitecture = Architecture.Arm; + } + + return info; + } + + private static Uname GetUnixName() + { + var uname = new Uname(); + Utsname utsname; + var callResult = Syscall.uname(out utsname); + if (callResult == 0) + { + uname.sysname = utsname.sysname; + uname.machine = utsname.machine; + } + return uname; + } + + public class Uname + { + public string sysname = string.Empty; + public string machine = string.Empty; } } } |
