// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // The mini view model. // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.ViewModels { using System; using HandBrakeWPF.EventArgs; using HandBrakeWPF.Properties; using HandBrakeWPF.Services.Queue.Interfaces; using HandBrakeWPF.ViewModels.Interfaces; using EncodeProgressEventArgs = HandBrakeWPF.Services.Encode.EventArgs.EncodeProgressEventArgs; using IEncode = HandBrakeWPF.Services.Encode.Interfaces.IEncode; /// /// The mini view model. /// public class MiniViewModel : ViewModelBase, IMiniViewModel { private readonly IEncode encodeService; private readonly IQueueProcessor queueProcessor; private string queueStatus; private string progress; private string task; private string windowTitle; /// /// Initializes a new instance of the class. /// /// /// The encode Service. /// /// /// The queue Processor. /// public MiniViewModel(IEncode encodeService, IQueueProcessor queueProcessor) { this.encodeService = encodeService; this.queueProcessor = queueProcessor; this.Task = "Ready"; this.Progress = string.Empty; this.QueueStatus = string.Format("{0} jobs pending", this.queueProcessor.Count); } /// /// Gets or sets the task. /// public string Task { get { return this.task; } set { if (value == this.task) { return; } this.task = value; this.NotifyOfPropertyChange(() => this.Task); } } /// /// Gets or sets the progress. /// public string Progress { get { return this.progress; } set { if (value == this.progress) { return; } this.progress = value; this.NotifyOfPropertyChange(() => this.Progress); } } /// /// Gets or sets the queue status. /// public string QueueStatus { get { return this.queueStatus; } set { if (value == this.queueStatus) { return; } this.queueStatus = value; this.NotifyOfPropertyChange(() => this.QueueStatus); } } /// /// Gets or sets the window title. /// public string WindowTitle { get { return this.windowTitle; } set { if (value == this.windowTitle) { return; } this.windowTitle = value; this.NotifyOfPropertyChange(() => this.WindowTitle); } } /// /// The activate. /// public void Activate() { this.encodeService.EncodeStatusChanged += EncodeService_EncodeStatusChanged; this.queueProcessor.QueueChanged += QueueProcessor_QueueChanged; this.queueProcessor.QueueCompleted += QueueProcessor_QueueCompleted; this.WindowTitle = "Mini Status Display"; } /// /// The tear down. /// public void Close() { this.encodeService.EncodeStatusChanged -= EncodeService_EncodeStatusChanged; this.queueProcessor.QueueChanged -= QueueProcessor_QueueChanged; this.queueProcessor.QueueCompleted -= QueueProcessor_QueueCompleted; this.TryClose(); } /// /// The queue processor_ queue completed. /// /// /// The sender. /// /// /// The e. /// private void QueueProcessor_QueueCompleted(object sender, QueueCompletedEventArgs e) { this.Task = "Not Encoding."; this.Progress = string.Empty; this.QueueStatus = string.Format("{0} jobs pending", this.queueProcessor.Count); } /// /// The queue processor_ queue changed. /// /// /// The sender. /// /// /// The e. /// private void QueueProcessor_QueueChanged(object sender, EventArgs e) { this.QueueStatus = string.Format("{0} jobs pending", this.queueProcessor.Count); } /// /// The encode service_ encode status changed. /// /// /// The sender. /// /// /// The e. /// private void EncodeService_EncodeStatusChanged(object sender, EncodeProgressEventArgs e) { this.Task = queueProcessor.LastProcessedJob.ScannedSourcePath; // {0:00.00}% FPS: {1:000.0} Avg FPS: {2:000.0} Time Remaining: {3} Elapsed: {4:hh\:mm\:ss} this.Progress = string.Format( Resources.MainViewModel_EncodeStatusChanged_StatusLabel, e.PercentComplete, e.CurrentFrameRate, e.AverageFrameRate, e.EstimatedTimeLeft, e.ElapsedTime); } } }