// --------------------------------------------------------------------------------------------------------------------
//
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
//
//
// The Queue Selection View Model
//
// --------------------------------------------------------------------------------------------------------------------
namespace HandBrakeWPF.ViewModels
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using HandBrakeWPF.Model;
using HandBrakeWPF.Model.Queue;
using HandBrakeWPF.Properties;
using HandBrakeWPF.Services.Encode.Model.Models;
using HandBrakeWPF.Services.Interfaces;
using HandBrakeWPF.Services.Presets.Model;
using HandBrakeWPF.Services.Scan.Model;
using HandBrakeWPF.ViewModels.Interfaces;
///
/// The Queue Selection View Model
///
public class QueueSelectionViewModel : ViewModelBase, IQueueSelectionViewModel
{
private readonly IErrorService errorService;
private readonly IUserSettingService userSettingService;
private Action, QueueAddRangeLimit> addToQueue;
private BindingList startEndRangeItems1;
private string currentPreset;
public bool titleDesc = true;
public bool durationDesc = true;
public bool nameDesc = true;
///
/// Initializes a new instance of the class.
///
///
/// The Error Service
///
///
/// The user Setting Service.
///
public QueueSelectionViewModel(IErrorService errorService, IUserSettingService userSettingService)
{
this.errorService = errorService;
this.userSettingService = userSettingService;
this.Title = Resources.QueueSelectionViewModel_AddToQueue;
this.TitleList = new BindingList();
this.RangeLimits = new QueueAddRangeLimit();
List startEndRangeItems = new List();
for (int i = 1; i <= 99; i++)
{
startEndRangeItems.Add(i);
}
this.StartEndRangeItems = new BindingList(startEndRangeItems);
}
///
/// Gets or sets the source.
///
public string Source { get; set; }
///
/// Gets or sets the selected titles.
///
public BindingList TitleList { get; set; }
///
/// Gets or sets the current preset.
///
public string CurrentPreset
{
get
{
return this.currentPreset;
}
set
{
if (value == this.currentPreset)
{
return;
}
this.currentPreset = value;
this.NotifyOfPropertyChange(() => this.CurrentPreset);
}
}
///
/// Gets a value indicating whether is auto naming enabled.
///
public bool IsAutoNamingEnabled
{
get
{
return this.userSettingService.GetUserSetting(UserSettingConstants.AutoNaming);
}
}
public QueueAddRangeLimit RangeLimits { get; set; }
public BindingList RangeMode { get; } = new BindingList { PointToPointMode.Chapters, PointToPointMode.Seconds, PointToPointMode.Frames };
public BindingList StartEndRangeItems
{
get => this.startEndRangeItems1;
private set
{
if (Equals(value, this.startEndRangeItems1))
{
return;
}
this.startEndRangeItems1 = value;
this.NotifyOfPropertyChange(() => this.StartEndRangeItems);
}
}
public void OrderByTitle()
{
if (this.titleDesc)
{
TitleList = new BindingList(TitleList.OrderByDescending(o => o.Title.TitleNumber).ToList());
}
else
{
TitleList = new BindingList(TitleList.OrderBy(o => o.Title.TitleNumber).ToList());
}
this.NotifyOfPropertyChange(() => TitleList);
this.titleDesc = !this.titleDesc;
}
public void OrderByDuration()
{
if (this.durationDesc)
{
TitleList = new BindingList(TitleList.OrderByDescending(o => o.Title.Duration).ToList());
}
else
{
TitleList = new BindingList(TitleList.OrderBy(o => o.Title.Duration).ToList());
}
this.NotifyOfPropertyChange(() => TitleList);
this.durationDesc = !this.durationDesc;
}
public void OrderByName()
{
if (this.nameDesc)
{
TitleList = new BindingList(TitleList.OrderByDescending(o => o.Title.SourcePath).ToList());
}
else
{
TitleList = new BindingList(TitleList.OrderBy(o => o.Title.SourcePath).ToList());
}
this.NotifyOfPropertyChange(() => TitleList);
this.nameDesc = !this.nameDesc;
}
///
/// The select all.
///
public void SelectAll()
{
foreach (var item in TitleList)
{
item.IsSelected = true;
}
}
///
/// The unselect all.
///
public void UnSelectAll()
{
foreach (var item in TitleList)
{
item.IsSelected = false;
}
}
///
/// Invert selection
///
public void InvertSelection()
{
foreach (var item in TitleList)
{
item.IsSelected = !item.IsSelected;
}
}
///
/// Add a Preset
///
public void Add()
{
this.addToQueue(this.TitleList.Where(c => c.IsSelected), this.RangeLimits);
this.Close();
}
///
/// Cancel adding a preset
///
public void Cancel()
{
this.TitleList.Clear();
this.Close();
}
///
/// Close this window.
///
public void Close()
{
this.TryClose();
}
///
/// The setup.
///
///
/// The scanned source.
///
///
/// The add Action.
///
///
/// The preset.
///
public void Setup(Source scannedSource, Action, QueueAddRangeLimit> addAction, Preset preset)
{
this.TitleList.Clear();
this.addToQueue = addAction;
if (scannedSource != null)
{
IEnumerable titles = scannedSource.Titles;
foreach (Title item in titles)
{
string srcName = item.DisplaySourceName ?? item.SourcePath;
SelectionTitle title = new SelectionTitle(item, srcName) { IsSelected = true };
TitleList.Add(title);
}
}
if (preset != null)
{
this.CurrentPreset = string.Format(Resources.QueueSelection_UsingPreset, preset.Name);
}
this.NotifyOfPropertyChange(() => this.IsAutoNamingEnabled);
}
}
}