| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | #pragma warning disable CS1591using System;using System.Runtime.InteropServices;using System.Threading;using MediaBrowser.Model.System;namespace MediaBrowser.Common.System{    public static class OperatingSystem    {        // We can't use Interlocked.CompareExchange for enums        private static int _id = int.MaxValue;        public static OperatingSystemId Id        {            get            {                if (_id == int.MaxValue)                {                    Interlocked.CompareExchange(ref _id, (int)GetId(), int.MaxValue);                }                return (OperatingSystemId)_id;            }        }        public static string Name        {            get            {                switch (Id)                {                    case OperatingSystemId.BSD: return "BSD";                    case OperatingSystemId.Linux: return "Linux";                    case OperatingSystemId.Darwin: return "macOS";                    case OperatingSystemId.Windows: return "Windows";                    default: throw new PlatformNotSupportedException($"Unknown OS {Id}");                }            }        }        private static OperatingSystemId GetId()        {            switch (Environment.OSVersion.Platform)            {                // On .NET Core `MacOSX` got replaced by `Unix`, this case should never be hit.                case PlatformID.MacOSX:                    return OperatingSystemId.Darwin;                case PlatformID.Win32NT:                    return OperatingSystemId.Windows;                case PlatformID.Unix:                default:                    {                        string osDescription = RuntimeInformation.OSDescription;                        if (osDescription.Contains("linux", StringComparison.OrdinalIgnoreCase))                        {                            return OperatingSystemId.Linux;                        }                        else if (osDescription.Contains("darwin", StringComparison.OrdinalIgnoreCase))                        {                            return OperatingSystemId.Darwin;                        }                        else if (osDescription.Contains("bsd", StringComparison.OrdinalIgnoreCase))                        {                            return OperatingSystemId.BSD;                        }                        throw new PlatformNotSupportedException($"Can't resolve OS with description: '{osDescription}'");                    }            }        }    }}
 |