// --------------------------------------------------------------------------------------------------------------------
//
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
//
// --------------------------------------------------------------------------------------------------------------------
namespace HandBrakeWPF.Commands.DebugTools
{
using System;
using System.IO;
using System.Windows;
using System.Windows.Input;
using HandBrakeWPF.Properties;
using HandBrakeWPF.Services.Interfaces;
using HandBrakeWPF.ViewModels;
using HandBrakeWPF.ViewModels.Interfaces;
public class AddToQueueQualitySweepCommand : ICommand
{
private readonly IUserSettingService userSettingService;
private readonly IErrorService errorService;
private MainViewModel mainViewModel;
private VideoViewModel videoViewModel;
public AddToQueueQualitySweepCommand(IMainViewModel mvm, IVideoViewModel vvm, IUserSettingService userSettingService, IErrorService errorService)
{
this.userSettingService = userSettingService;
this.errorService = errorService;
// Don't want to pollute the API for debug features.
this.mainViewModel = mvm as MainViewModel;
this.videoViewModel = vvm as VideoViewModel;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
if (this.mainViewModel == null || this.videoViewModel == null)
{
return;
}
if (!this.mainViewModel.HasSource || string.IsNullOrEmpty(this.mainViewModel.Destination))
{
this.errorService.ShowMessageBox(Resources.Debug_QueueSweep_NotSetup, Resources.Error, MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
double step = this.userSettingService.GetUserSetting(UserSettingConstants.X264Step);
if (step != 1)
{
this.userSettingService.SetUserSetting(UserSettingConstants.X264Step, (double)1);
this.videoViewModel.RF = 20;
}
string dir = Path.GetDirectoryName(this.mainViewModel.Destination);
int highNumber = this.videoViewModel.QualityMax > this.videoViewModel.QualityMin ? this.videoViewModel.QualityMax : this.videoViewModel.QualityMin;
int lowNumber = this.videoViewModel.QualityMax > this.videoViewModel.QualityMin ? this.videoViewModel.QualityMin : this.videoViewModel.QualityMax;
bool flipMode = this.videoViewModel.QualityMax > this.videoViewModel.QualityMin;
for (int i = lowNumber; i <= highNumber; i++)
{
int cqNumber = i;
if (flipMode)
{
cqNumber = this.videoViewModel.QualityMax - i;
}
string extension = Path.GetExtension(this.mainViewModel.Destination);
string newFileName = string.Format("{0}{1}", cqNumber, extension);
this.mainViewModel.Destination = Path.Combine(dir, newFileName);
this.videoViewModel.RF = i;
this.mainViewModel.AddToQueue(false);
}
if (step != 1)
{
this.userSettingService.SetUserSetting(UserSettingConstants.X264Step, (double)step);
}
}
public event EventHandler CanExecuteChanged;
}
}