You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
63 lines
1.9 KiB
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using NLog;
|
|
using NzbDrone.Common.Disk;
|
|
using NzbDrone.Common.EnvironmentInfo;
|
|
|
|
namespace NzbDrone.Mono.EnvironmentInfo.VersionAdapters
|
|
{
|
|
public class MacOsVersionAdapter : IOsVersionAdapter
|
|
{
|
|
private const string PLIST_DIR = "/System/Library/CoreServices/";
|
|
|
|
private static readonly Regex DarwinVersionRegex = new ("<key>ProductVersion<\\/key>\\s*<string>(?<version>1\\d\\.\\d{1,2}\\.?\\d{0,2}?)<\\/string>",
|
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
|
|
|
private readonly IDiskProvider _diskProvider;
|
|
private readonly Logger _logger;
|
|
|
|
public MacOsVersionAdapter(IDiskProvider diskProvider, Logger logger)
|
|
{
|
|
_diskProvider = diskProvider;
|
|
_logger = logger;
|
|
}
|
|
|
|
public OsVersionModel Read()
|
|
{
|
|
var version = "10.0";
|
|
|
|
if (!_diskProvider.FolderExists(PLIST_DIR))
|
|
{
|
|
_logger.Debug("Directory {0} doesn't exist", PLIST_DIR);
|
|
return null;
|
|
}
|
|
|
|
var allFiles = _diskProvider.GetFiles(PLIST_DIR, false);
|
|
|
|
var versionFile = allFiles.SingleOrDefault(c =>
|
|
c.EndsWith("/SystemVersion.plist") ||
|
|
c.EndsWith("/ServerVersion.plist"));
|
|
|
|
if (string.IsNullOrWhiteSpace(versionFile))
|
|
{
|
|
_logger.Debug("Couldn't find version plist file in {0}", PLIST_DIR);
|
|
return null;
|
|
}
|
|
|
|
var text = _diskProvider.ReadAllText(versionFile);
|
|
var match = DarwinVersionRegex.Match(text);
|
|
|
|
if (match.Success)
|
|
{
|
|
version = match.Groups["version"].Value;
|
|
}
|
|
|
|
var name = versionFile.Contains("Server") ? "macOS Server" : "macOS";
|
|
|
|
return new OsVersionModel(name, version);
|
|
}
|
|
|
|
public bool Enabled => OsInfo.IsOsx;
|
|
}
|
|
}
|