/// <summary> /// Initializes a new instance of the <see cref="MainViewModel"/> class. /// The viewmodel for HandBrakes main window. /// </summary> /// <param name="userSettingService"> /// The User Setting Service /// </param> /// <param name="scanService"> /// The scan Service. /// </param> /// <param name="encodeService"> /// The encode Service. /// </param> /// <param name="presetService"> /// The preset Service. /// </param> /// <param name="errorService"> /// The Error Service /// </param> /// <param name="shellViewModel"> /// The shell View Model. /// </param> /// <param name="updateService"> /// The update Service. /// </param> /// <param name="notificationService"> /// The notification Service. /// *** Leave in Constructor. *** /// </param> /// <param name="whenDoneService"> /// The when Done Service. /// *** Leave in Constructor. *** /// </param> public MainViewModel(IUserSettingService userSettingService, IScan scanService, IEncode encodeService, IPresetService presetService, IErrorService errorService, IShellViewModel shellViewModel, IUpdateService updateService, INotificationService notificationService, IPrePostActionService whenDoneService) { this.scanService = scanService; this.encodeService = encodeService; this.presetService = presetService; this.errorService = errorService; this.shellViewModel = shellViewModel; this.updateService = updateService; this.userSettingService = userSettingService; this.queueProcessor = IoC.Get<IQueueProcessor>(); // Setup Properties this.WindowTitle = Resources.HandBrake_Title; this.CurrentTask = new EncodeTask(); this.CurrentTask.PropertyChanged += this.CurrentTask_PropertyChanged; this.ScannedSource = new Source(); // Setup Events this.scanService.ScanStared += this.ScanStared; this.scanService.ScanCompleted += this.ScanCompleted; this.scanService.ScanStatusChanged += this.ScanStatusChanged; this.queueProcessor.JobProcessingStarted += this.QueueProcessorJobProcessingStarted; this.queueProcessor.QueueCompleted += this.QueueCompleted; this.queueProcessor.QueueChanged += this.QueueChanged; this.queueProcessor.EncodeService.EncodeStatusChanged += this.EncodeStatusChanged; this.userSettingService.SettingChanged += this.UserSettingServiceSettingChanged; this.Presets = this.presetService.Presets; this.CancelScanCommand = new CancelScanCommand(this.scanService); this.Drives = new BindingList<SourceMenuItem>(); }
/// <summary> /// Recover a queue from file. /// </summary> /// <param name="encodeQueue"> /// The encode Queue. /// </param> /// <param name="errorService"> /// The error Service. /// </param> public static void RecoverQueue(IQueueProcessor encodeQueue, IErrorService errorService) { string appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"HandBrake\"); List<string> queueFiles = CheckQueueRecovery(); MessageBoxResult result = MessageBoxResult.None; if (queueFiles.Count == 1) { result = errorService.ShowMessageBox( "HandBrake has detected unfinished items on the queue from the last time the application was launched. Would you like to recover these?", "Queue Recovery Possible", MessageBoxButton.YesNo, MessageBoxImage.Question); } else if (queueFiles.Count > 1) { result = MessageBox.Show( "HandBrake has detected multiple unfinished queue files. These will be from multiple instances of HandBrake running. Would you like to recover all unfinished jobs?", "Queue Recovery Possible", MessageBoxButton.YesNo, MessageBoxImage.Question); } if (result == MessageBoxResult.Yes) { foreach (string file in queueFiles) { encodeQueue.RestoreQueue(appDataPath + file); // Start Recovery if (!file.Contains(GeneralUtilities.ProcessId.ToString(CultureInfo.InvariantCulture))) { try { // Once we load it in, remove it as we no longer need it. File.Delete(Path.Combine(appDataPath, file)); } catch (Exception) { // Keep quite, nothing much we can do if there are problems. // We will continue processing files. } } } } else { foreach (string file in queueFiles) { if (File.Exists(Path.Combine(appDataPath, file))) { // Check that the file doesn't belong to another running instance. Match m = Regex.Match(file, @"([0-9]+).xml"); if (m.Success) { int processId = int.Parse(m.Groups[1].ToString()); if (GeneralUtilities.IsPidACurrentHandBrakeInstance(processId)) { continue; } } // Delete it if it doesn't File.Delete(Path.Combine(appDataPath, file)); } } } }
/// <summary> /// Initializes a new instance of the <see cref="NotificationService"/> class. /// </summary> /// <param name="encodeService"> /// The encode Service. /// </param> /// <param name="queueProcessor"> /// The queue Processor. /// </param> /// <param name="userSettingService"> /// The user Setting Service. /// </param> public NotificationService(IEncode encodeService, IQueueProcessor queueProcessor, IUserSettingService userSettingService) { this.userSettingService = userSettingService; // encodeService.EncodeCompleted += this.EncodeServiceEncodeCompleted; // queueProcessor.QueueCompleted += this.QueueProcessorQueueCompleted; }