From 02b0734029f266874e3d7f4902e9a36c2cdee305 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 28 Jun 2016 22:45:37 -0400 Subject: [PATCH] update startup wizard --- .../Encoder/MediaEncoder.cs | 64 ++++++++++++++++++- .../Native/BaseMonoApp.cs | 37 +---------- 2 files changed, 63 insertions(+), 38 deletions(-) diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index f8321f6cd1..11291a05a5 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -112,9 +112,18 @@ namespace MediaBrowser.MediaEncoding.Encoder // If the path was passed in, save it into config now. var encodingOptions = GetEncodingOptions(); var appPath = encodingOptions.EncoderAppPath; - if (!string.IsNullOrWhiteSpace(FFMpegPath) && !string.Equals(FFMpegPath, appPath, StringComparison.Ordinal)) + + var valueToSave = FFMpegPath; + + // if using system variable, don't save this. + if (string.Equals(valueToSave, "ffmpeg", StringComparison.OrdinalIgnoreCase)) { - encodingOptions.EncoderAppPath = FFMpegPath; + valueToSave = null; + } + + if (!string.Equals(valueToSave, appPath, StringComparison.Ordinal)) + { + encodingOptions.EncoderAppPath = valueToSave; ConfigurationManager.SaveConfiguration("encoding", encodingOptions); } } @@ -161,7 +170,12 @@ namespace MediaBrowser.MediaEncoding.Encoder { appPath = Path.Combine(ConfigurationManager.ApplicationPaths.ProgramDataPath, "ffmpeg"); } + var newPaths = GetEncoderPaths(appPath); + if (string.IsNullOrWhiteSpace(newPaths.Item1) || string.IsNullOrWhiteSpace(newPaths.Item2)) + { + newPaths = TestForInstalledVersions(); + } if (!string.IsNullOrWhiteSpace(newPaths.Item1) && !string.IsNullOrWhiteSpace(newPaths.Item2)) { @@ -192,6 +206,52 @@ namespace MediaBrowser.MediaEncoding.Encoder return new Tuple(null, null); } + private Tuple TestForInstalledVersions() + { + string encoderPath = null; + string probePath = null; + + if (TestSystemInstalled("ffmpeg")) + { + encoderPath = "ffmpeg"; + } + if (TestSystemInstalled("ffprobe")) + { + probePath = "ffprobe"; + } + + return new Tuple(encoderPath, probePath); + } + + private bool TestSystemInstalled(string app) + { + try + { + var startInfo = new ProcessStartInfo + { + FileName = app, + Arguments = "-v", + UseShellExecute = false, + CreateNoWindow = true, + WindowStyle = ProcessWindowStyle.Hidden, + ErrorDialog = false + }; + + using (var process = Process.Start(startInfo)) + { + process.WaitForExit(); + } + + _logger.Debug("System app installed: " + app); + return true; + } + catch + { + _logger.Debug("System app not installed: " + app); + return false; + } + } + private Tuple GetPathsFromDirectory(string path) { // Since we can't predict the file extension, first try directly within the folder diff --git a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs index 5d7274356e..ebddbe0772 100644 --- a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs +++ b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs @@ -248,6 +248,7 @@ namespace MediaBrowser.Server.Mono.Native switch (environment.OperatingSystem) { + case OperatingSystem.Osx: case OperatingSystem.Bsd: break; case OperatingSystem.Linux: @@ -255,20 +256,6 @@ namespace MediaBrowser.Server.Mono.Native info.ArchiveType = "7z"; info.Version = "20160215"; break; - case OperatingSystem.Osx: - - info.ArchiveType = "7z"; - - switch (environment.SystemArchitecture) - { - case Architecture.X64: - info.Version = "20160124"; - break; - case Architecture.X86: - info.Version = "20150110"; - break; - } - break; } info.DownloadUrls = GetDownloadUrls(environment); @@ -280,23 +267,6 @@ namespace MediaBrowser.Server.Mono.Native { switch (environment.OperatingSystem) { - case OperatingSystem.Osx: - - switch (environment.SystemArchitecture) - { - case Architecture.X64: - return new[] - { - "https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/osx/ffmpeg-x64-2.8.5.7z" - }; - case Architecture.X86: - return new[] - { - "https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/osx/ffmpeg-x86-2.5.3.7z" - }; - } - break; - case OperatingSystem.Linux: switch (environment.SystemArchitecture) @@ -311,11 +281,6 @@ namespace MediaBrowser.Server.Mono.Native { "https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/linux/ffmpeg-git-20160215-32bit-static.7z" }; - case Architecture.Arm: - return new[] - { - "https://github.com/MediaBrowser/Emby.Resources/raw/master/ffmpeg/linux/ffmpeg-arm.7z" - }; } break; }