// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // The Meta Data Tab // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.ViewModels { using System; using System.Collections.ObjectModel; using System.Linq; using System.Windows.Forms; using HandBrake.Interop.Interop.Json.Shared; using HandBrakeWPF.Commands; using HandBrakeWPF.EventArgs; using HandBrakeWPF.Model; using HandBrakeWPF.Services.Encode.Model; using HandBrakeWPF.Services.Encode.Model.Models; using HandBrakeWPF.Services.Interfaces; using HandBrakeWPF.Services.Presets.Model; using HandBrakeWPF.Services.Scan.Interfaces; using HandBrakeWPF.Services.Scan.Model; using HandBrakeWPF.ViewModels.Interfaces; /// /// The meta data view model. /// public class MetaDataViewModel : ViewModelBase, IMetaDataViewModel { private readonly IScan scanService; private EncodeTask task; private CoverArtImage coverArtImage; private Title currentTitle; private bool isNextAvailable; private bool isBackAvailable; private bool isCovertArtPreviewEnabled = true; /// /// Initializes a new instance of the class. /// /// /// The window Manager. /// /// /// The user Setting Service. /// public MetaDataViewModel(IWindowManager windowManager, IUserSettingService userSettingService, IScan scanService) { this.scanService = scanService; this.task = new EncodeTask(); this.RemoveCommand = new SimpleRelayCommand(this.Delete); this.CoverArtImage = new CoverArtImage(null); } public event EventHandler TabStatusChanged { add { } remove { } } public SimpleRelayCommand RemoveCommand { get; set; } public ObservableCollection SourceMetadata { get => this.task.MetaData; set { if (Equals(value, this.task.MetaData)) { return; } this.task.MetaData = value; this.OnPropertyChanged(); } } public ObservableCollection SourceCoverArts { get => this.task.CoverArts; set { if (Equals(value, this.task.CoverArts)) { return; } this.task.CoverArts = value; this.OnPropertyChanged(); } } public int CoverArtIndex { get; set; } public CoverArtImage CoverArtImage { get => this.coverArtImage; set { if (Equals(value, this.coverArtImage)) { return; } this.coverArtImage = value; this.NotifyOfPropertyChange(() => this.CoverArtImage); } } public bool IsNextAvailable { get => this.isNextAvailable; set { if (value == this.isNextAvailable) { return; } this.isNextAvailable = value; this.NotifyOfPropertyChange(() => this.IsNextAvailable); } } public bool IsBackAvailable { get => this.isBackAvailable; set { if (value == this.isBackAvailable) { return; } this.isBackAvailable = value; this.NotifyOfPropertyChange(() => this.IsBackAvailable); } } public void NextCoverArt() { if (this.SourceCoverArts.Count > (this.CoverArtIndex + 1)) { this.CoverArtIndex += 1; this.CoverArtImage = CreateCoverArtImage(this.SourceCoverArts[this.CoverArtIndex], this.currentTitle); } // Update the Next Button Status this.IsNextAvailable = this.SourceCoverArts.Count > (this.CoverArtIndex + 1); } public void PreviousCoverArt() { if (this.SourceCoverArts.Count > (this.CoverArtIndex + 1)) { this.CoverArtIndex = this.CoverArtIndex - 1; this.CoverArtImage = CreateCoverArtImage(this.SourceCoverArts[this.CoverArtIndex], this.currentTitle); } this.IsBackAvailable = this.CoverArtIndex > 1; } public void Add() { MetaDataValue value = new MetaDataValue("", ""); value.IsNew = true; this.SourceMetadata.Add(value); } public void Delete(MetaDataValue row) { if (SourceMetadata.Contains(row) && row.IsNew) { this.SourceMetadata.Remove(row); } } /// /// Setup the window after a scan. /// /// /// The source. /// /// /// The selected title. /// /// /// The Current preset /// /// /// The task. /// public void SetSource(Source source, Title selectedTitle, Preset currentPreset, EncodeTask encodeTask) { this.task = encodeTask; this.currentTitle = selectedTitle; this.SourceMetadata.Clear(); if (selectedTitle.Metadata != null) { foreach (var item in selectedTitle.Metadata) { this.SourceMetadata.Add(new MetaDataValue(item.Key, item.Value)); } } this.SourceCoverArts.Clear(); if (selectedTitle.CoverArts != null) { foreach (var item in selectedTitle.CoverArts) { this.SourceCoverArts.Add(item); } } this.CoverArtImage = new CoverArtImage(null); if (this.SourceCoverArts != null && this.SourceCoverArts.Count > 0) { this.CoverArtIndex = this.SourceCoverArts.First().ID; this.CoverArtImage = CreateCoverArtImage(this.SourceCoverArts.First(), selectedTitle); } // Update the Next Button Status this.IsNextAvailable = this.SourceCoverArts.Count > (this.CoverArtIndex + 1); this.IsBackAvailable = this.CoverArtIndex > 1; this.NotifyOfPropertyChange(() => this.SourceMetadata); this.NotifyOfPropertyChange(() => this.SourceCoverArts); } /// /// Set the selected preset /// /// /// The preset. /// /// /// The task. /// public void SetPreset(Preset preset, EncodeTask encodeTask) { } /// /// Update all the UI controls based on the encode task passed in. /// /// /// The task. /// public void UpdateTask(EncodeTask encodeTask) { this.task = encodeTask; this.NotifyOfPropertyChange(() => this.SourceMetadata); } public bool MatchesPreset(Preset preset) { return true; } private CoverArtImage CreateCoverArtImage(CoverArt covertArt, Title selectedTitle) { if (isCovertArtPreviewEnabled) { CoverArtImage newImage = new CoverArtImage(covertArt); newImage.Image = this.scanService.GetCoverArt(covertArt, selectedTitle.TitleNumber); this.CoverArtImage = newImage; return newImage; } return new CoverArtImage(null); } } }