From 5c615fa02448813499ed87f2a1c2b937c7a7dcd5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 14 Sep 2014 11:10:51 -0400 Subject: add connect linking --- MediaBrowser.ServerApplication/ApplicationHost.cs | 2 +- .../FFMpeg/FFMpegDownloader.cs | 33 +++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.ServerApplication') diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index b5db94776a..0d76e95b9b 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -447,7 +447,7 @@ namespace MediaBrowser.ServerApplication var encryptionManager = new EncryptionManager(); RegisterSingleInstance(encryptionManager); - ConnectManager = new ConnectManager(LogManager.GetLogger("Connect"), ApplicationPaths, JsonSerializer, encryptionManager, HttpClient, this, ServerConfigurationManager); + ConnectManager = new ConnectManager(LogManager.GetLogger("Connect"), ApplicationPaths, JsonSerializer, encryptionManager, HttpClient, this, ServerConfigurationManager, UserManager); RegisterSingleInstance(ConnectManager); SessionManager = new SessionManager(UserDataManager, ServerConfigurationManager, Logger, UserRepository, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, ItemRepository, JsonSerializer, this, HttpClient, AuthenticationRepository); diff --git a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs index 4f94ebd67c..ae11712a5d 100644 --- a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs +++ b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Configuration; +using System.Collections.Generic; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Model.IO; @@ -52,6 +53,8 @@ namespace MediaBrowser.ServerApplication.FFMpeg Directory.CreateDirectory(versionedDirectoryPath); + var excludeFromDeletions = new List { versionedDirectoryPath }; + if (!File.Exists(info.ProbePath) || !File.Exists(info.EncoderPath)) { // ffmpeg not present. See if there's an older version we can start with @@ -71,14 +74,42 @@ namespace MediaBrowser.ServerApplication.FFMpeg info = existingVersion; versionedDirectoryPath = Path.GetDirectoryName(info.EncoderPath); + + excludeFromDeletions.Add(versionedDirectoryPath); } } await DownloadFonts(versionedDirectoryPath).ConfigureAwait(false); + DeleteOlderFolders(Path.GetDirectoryName(versionedDirectoryPath), excludeFromDeletions); + return info; } + private void DeleteOlderFolders(string path, IEnumerable excludeFolders ) + { + var folders = Directory.GetDirectories(path) + .Where(i => !excludeFolders.Contains(i, StringComparer.OrdinalIgnoreCase)) + .ToList(); + + foreach (var folder in folders) + { + DeleteFolder(folder); + } + } + + private void DeleteFolder(string path) + { + try + { + Directory.Delete(path, true); + } + catch (Exception ex) + { + _logger.ErrorException("Error deleting {0}", ex, path); + } + } + private FFMpegInfo GetExistingVersion(FFMpegInfo info, string rootEncoderPath) { var encoderFilename = Path.GetFileName(info.EncoderPath); -- cgit v1.2.3 From 10cb5a8bf6a32a84819e841719e2dcc958aec513 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 14 Sep 2014 11:26:33 -0400 Subject: add ability to customize ffmpeg path --- MediaBrowser.Server.Mono/Program.cs | 34 +++++++--------------- MediaBrowser.ServerApplication/ApplicationHost.cs | 12 ++++++-- .../FFMpeg/FFMpegDownloader.cs | 16 +++++++++- .../IO/StartupOptions.cs | 28 ++++++++++++++++++ MediaBrowser.ServerApplication/MainStartup.cs | 20 +++++++------ .../MediaBrowser.ServerApplication.csproj | 1 + 6 files changed, 75 insertions(+), 36 deletions(-) create mode 100644 MediaBrowser.ServerApplication/IO/StartupOptions.cs (limited to 'MediaBrowser.ServerApplication') diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index 6040f06090..a803a50b61 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -5,6 +5,7 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; using MediaBrowser.ServerApplication; using MediaBrowser.ServerApplication.Native; +using MediaBrowser.ServerApplication.IO; using Microsoft.Win32; using System; using System.Diagnostics; @@ -41,8 +42,10 @@ namespace MediaBrowser.Server.Mono var applicationPath = Assembly.GetEntryAssembly ().Location; #endif + var options = new StartupOptions(); + // Allow this to be specified on the command line. - var customProgramDataPath = ParseProgramDataPathFromCommandLine(); + var customProgramDataPath = options.GetOption("-programdata"); var appPaths = CreateApplicationPaths(applicationPath, customProgramDataPath); @@ -52,7 +55,7 @@ namespace MediaBrowser.Server.Mono var logger = _logger = logManager.GetLogger("Main"); - BeginLog(logger); + BeginLog(logger, appPaths); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; @@ -73,20 +76,6 @@ namespace MediaBrowser.Server.Mono _appHost.Dispose(); } } - - private static string ParseProgramDataPathFromCommandLine() - { - var commandArgs = Environment.GetCommandLineArgs().ToList(); - - var programDataPathIndex = commandArgs.IndexOf("-programdata"); - - if (programDataPathIndex != -1) - { - return commandArgs.ElementAtOrDefault(programDataPathIndex + 1); - } - - return null; - } private static ServerApplicationPaths CreateApplicationPaths(string applicationPath, string programDataPath) { @@ -169,14 +158,11 @@ namespace MediaBrowser.Server.Mono /// Begins the log. /// /// The logger. - private static void BeginLog(ILogger logger) - { - logger.Info("Media Browser Server started"); - logger.Info("Command line: {0}", string.Join(" ", Environment.GetCommandLineArgs())); - - logger.Info("Server: {0}", Environment.MachineName); - logger.Info("Operating system: {0}", Environment.OSVersion.ToString()); - } + private static void BeginLog(ILogger logger, IApplicationPaths appPaths) + { + logger.Info("Media Browser Server started"); + ApplicationHost.LogEnvironmentInfo(logger, appPaths); + } /// /// Handles the UnhandledException event of the CurrentDomain control. diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 0d76e95b9b..25d410bfc7 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -219,6 +219,8 @@ namespace MediaBrowser.ServerApplication private ISyncRepository SyncRepository { get; set; } private ITVSeriesManager TVSeriesManager { get; set; } + private StartupOptions _startupOptions; + /// /// Initializes a new instance of the class. /// @@ -226,9 +228,15 @@ namespace MediaBrowser.ServerApplication /// The log manager. /// if set to true [supports running as service]. /// if set to true [is running as service]. - public ApplicationHost(ServerApplicationPaths applicationPaths, ILogManager logManager, bool supportsRunningAsService, bool isRunningAsService) + /// The options. + public ApplicationHost(ServerApplicationPaths applicationPaths, + ILogManager logManager, + bool supportsRunningAsService, + bool isRunningAsService, + StartupOptions options) : base(applicationPaths, logManager) { + _startupOptions = options; _isRunningAsService = isRunningAsService; SupportsRunningAsService = supportsRunningAsService; } @@ -548,7 +556,7 @@ namespace MediaBrowser.ServerApplication /// Task. private async Task RegisterMediaEncoder(IProgress progress) { - var info = await new FFMpegDownloader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager).GetFFMpegInfo(progress).ConfigureAwait(false); + var info = await new FFMpegDownloader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager).GetFFMpegInfo(_startupOptions, progress).ConfigureAwait(false); MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), JsonSerializer, info.EncoderPath, info.ProbePath, info.Version); RegisterSingleInstance(MediaEncoder); diff --git a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs index ae11712a5d..a026f9a497 100644 --- a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs +++ b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs @@ -14,6 +14,7 @@ using System.Threading.Tasks; #if __MonoCS__ using Mono.Unix.Native; #endif +using MediaBrowser.ServerApplication.IO; namespace MediaBrowser.ServerApplication.FFMpeg { @@ -39,8 +40,21 @@ namespace MediaBrowser.ServerApplication.FFMpeg _fileSystem = fileSystem; } - public async Task GetFFMpegInfo(IProgress progress) + public async Task GetFFMpegInfo(StartupOptions options, IProgress progress) { + var customffMpegPath = options.GetOption("-ffmpeg"); + var customffProbePath = options.GetOption("-ffprobe"); + + if (!string.IsNullOrWhiteSpace(customffMpegPath) && !string.IsNullOrWhiteSpace(customffProbePath)) + { + return new FFMpegInfo + { + ProbePath = customffProbePath, + EncoderPath = customffMpegPath, + Version = "custom" + }; + } + var rootEncoderPath = Path.Combine(_appPaths.ProgramDataPath, "ffmpeg"); var versionedDirectoryPath = Path.Combine(rootEncoderPath, FFMpegDownloadInfo.Version); diff --git a/MediaBrowser.ServerApplication/IO/StartupOptions.cs b/MediaBrowser.ServerApplication/IO/StartupOptions.cs new file mode 100644 index 0000000000..e74151e4c4 --- /dev/null +++ b/MediaBrowser.ServerApplication/IO/StartupOptions.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MediaBrowser.ServerApplication.IO +{ + public class StartupOptions + { + private readonly List _options = Environment.GetCommandLineArgs().ToList(); + + public bool ContainsOption(string option) + { + return _options.Contains(option, StringComparer.OrdinalIgnoreCase); + } + + public string GetOption(string name) + { + var index = _options.IndexOf(name); + + if (index != -1) + { + return _options.ElementAtOrDefault(index + 1); + } + + return null; + } + } +} diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 685e60c8a5..33529a31a0 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; +using MediaBrowser.ServerApplication.IO; using MediaBrowser.ServerApplication.Native; using MediaBrowser.ServerApplication.Splash; using MediaBrowser.ServerApplication.Updates; @@ -32,8 +33,8 @@ namespace MediaBrowser.ServerApplication /// public static void Main() { - var startFlag = Environment.GetCommandLineArgs().ElementAtOrDefault(1); - _isRunningAsService = string.Equals(startFlag, "-service", StringComparison.OrdinalIgnoreCase); + var options = new StartupOptions(); + _isRunningAsService = options.ContainsOption("-service"); var applicationPath = Process.GetCurrentProcess().MainModule.FileName; @@ -48,7 +49,7 @@ namespace MediaBrowser.ServerApplication BeginLog(logger, appPaths); // Install directly - if (string.Equals(startFlag, "-installservice", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-installservice")) { logger.Info("Performing service installation"); InstallService(applicationPath, logger); @@ -56,7 +57,7 @@ namespace MediaBrowser.ServerApplication } // Restart with admin rights, then install - if (string.Equals(startFlag, "-installserviceasadmin", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-installserviceasadmin")) { logger.Info("Performing service installation"); RunServiceInstallation(applicationPath); @@ -64,7 +65,7 @@ namespace MediaBrowser.ServerApplication } // Uninstall directly - if (string.Equals(startFlag, "-uninstallservice", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-uninstallservice")) { logger.Info("Performing service uninstallation"); UninstallService(applicationPath, logger); @@ -72,7 +73,7 @@ namespace MediaBrowser.ServerApplication } // Restart with admin rights, then uninstall - if (string.Equals(startFlag, "-uninstallserviceasadmin", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-uninstallserviceasadmin")) { logger.Info("Performing service uninstallation"); RunServiceUninstallation(applicationPath); @@ -99,7 +100,7 @@ namespace MediaBrowser.ServerApplication try { - RunApplication(appPaths, logManager, _isRunningAsService); + RunApplication(appPaths, logManager, _isRunningAsService, options); } finally { @@ -205,9 +206,10 @@ namespace MediaBrowser.ServerApplication /// The app paths. /// The log manager. /// if set to true [run service]. - private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService) + /// The options. + private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService, StartupOptions options) { - _appHost = new ApplicationHost(appPaths, logManager, true, runService); + _appHost = new ApplicationHost(appPaths, logManager, true, runService, options); var initProgress = new Progress(); diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index 6c255f2a87..33bdea0f6c 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -105,6 +105,7 @@ + Form -- cgit v1.2.3