From: sr55 Date: Sat, 14 Apr 2018 20:06:15 +0000 (+0100) Subject: WinGui: New start-up command line option. --recover-queue-ids= to recover specific queue files on startup. --- diff --git a/win/CS/HandBrakeWPF/App.xaml.cs b/win/CS/HandBrakeWPF/App.xaml.cs index d9349e567..a3809bea7 100644 --- a/win/CS/HandBrakeWPF/App.xaml.cs +++ b/win/CS/HandBrakeWPF/App.xaml.cs @@ -10,6 +10,7 @@ namespace HandBrakeWPF { using System; + using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows; @@ -17,8 +18,7 @@ namespace HandBrakeWPF using Caliburn.Micro; - using HandBrake.ApplicationServices.Utilities; - + using HandBrakeWPF.Helpers; using HandBrakeWPF.Startup; using HandBrakeWPF.Utilities; using HandBrakeWPF.ViewModels; @@ -74,6 +74,17 @@ namespace HandBrakeWPF return; } + if (e.Args.Any(f => f.StartsWith("--recover-queue-ids"))) + { + string command = e.Args.FirstOrDefault(f => f.StartsWith("--recover-queue-ids")); + if (!string.IsNullOrEmpty(command)) + { + command = command.Replace("--recover-queue-ids=", string.Empty); + List processIds = command.Split(',').ToList(); + StartupOptions.QueueRecoveryIds = processIds; + } + } + if (e.Args.Any(f => f.Equals("--auto-start-queue"))) { StartupOptions.AutoRestartQueue = true; diff --git a/win/CS/HandBrakeWPF/Helpers/QueueRecoveryHelper.cs b/win/CS/HandBrakeWPF/Helpers/QueueRecoveryHelper.cs index 4b9aa4f81..4ce79bec2 100644 --- a/win/CS/HandBrakeWPF/Helpers/QueueRecoveryHelper.cs +++ b/win/CS/HandBrakeWPF/Helpers/QueueRecoveryHelper.cs @@ -39,14 +39,14 @@ namespace HandBrakeWPF.Helpers /// /// True if there is a queue to recover. /// - public static List CheckQueueRecovery() + public static List CheckQueueRecovery(List filterQueueFiles) { try { string tempPath = DirectoryUtilities.GetUserStoragePath(VersionHelper.IsNightly()); DirectoryInfo info = new DirectoryInfo(tempPath); IEnumerable foundFiles = info.GetFiles("*.xml").Where(f => f.Name.StartsWith("hb_queue_recovery")); - var queueFiles = GetFilesExcludingActiveProcesses(foundFiles); + var queueFiles = GetFilesExcludingActiveProcesses(foundFiles, filterQueueFiles); if (!queueFiles.Any()) { @@ -115,10 +115,10 @@ namespace HandBrakeWPF.Helpers /// /// The . /// - public static bool RecoverQueue(IQueueProcessor encodeQueue, IErrorService errorService, bool silentRecovery) + public static bool RecoverQueue(IQueueProcessor encodeQueue, IErrorService errorService, bool silentRecovery, List queueFilter) { string appDataPath = DirectoryUtilities.GetUserStoragePath(VersionHelper.IsNightly()); - List queueFiles = CheckQueueRecovery(); + List queueFiles = CheckQueueRecovery(queueFilter); MessageBoxResult result = MessageBoxResult.None; if (!silentRecovery) { @@ -166,7 +166,7 @@ namespace HandBrakeWPF.Helpers return false; } - private static List GetFilesExcludingActiveProcesses(IEnumerable foundFiles) + private static List GetFilesExcludingActiveProcesses(IEnumerable foundFiles, List filterQueueFiles) { List queueFiles = new List(); @@ -174,12 +174,22 @@ namespace HandBrakeWPF.Helpers foreach (FileInfo file in foundFiles) { string fileProcessId = file.Name.Replace("hb_queue_recovery", string.Empty).Replace(".xml", string.Empty); - int processId = 0; + int processId; if (!string.IsNullOrEmpty(fileProcessId) && int.TryParse(fileProcessId, out processId)) { if (!GeneralUtilities.IsPidACurrentHandBrakeInstance(processId)) { - queueFiles.Add(file.FullName); + if (filterQueueFiles != null && filterQueueFiles.Count > 0) + { + if (filterQueueFiles.Contains(processId.ToString())) + { + queueFiles.Add(file.FullName); + } + } + else + { + queueFiles.Add(file.FullName); + } } } } diff --git a/win/CS/HandBrakeWPF/Startup/StartupOptions.cs b/win/CS/HandBrakeWPF/Startup/StartupOptions.cs index 98634634e..72a350c3d 100644 --- a/win/CS/HandBrakeWPF/Startup/StartupOptions.cs +++ b/win/CS/HandBrakeWPF/Startup/StartupOptions.cs @@ -9,6 +9,8 @@ namespace HandBrakeWPF.Startup { + using System.Collections.Generic; + /// /// The startup options. /// @@ -18,5 +20,6 @@ namespace HandBrakeWPF.Startup /// Gets or sets a value indicating whether auto restart queue. /// public static bool AutoRestartQueue { get; set; } + public static List QueueRecoveryIds { get; set; } } } diff --git a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs index 76e3c026e..8b1eb22e6 100644 --- a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs @@ -1254,7 +1254,7 @@ namespace HandBrakeWPF.ViewModels this.SummaryViewModel.OutputFormatChanged += this.SummaryViewModel_OutputFormatChanged; // Queue Recovery - bool queueRecovered = QueueRecoveryHelper.RecoverQueue(this.queueProcessor, this.errorService, StartupOptions.AutoRestartQueue); + bool queueRecovered = QueueRecoveryHelper.RecoverQueue(this.queueProcessor, this.errorService, StartupOptions.AutoRestartQueue, StartupOptions.QueueRecoveryIds); // If the queue is not recovered, show the source selection window by default. if (!queueRecovered)