From f86ec49c11556db9764b7ffd71290b318ec37b19 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 22 Aug 2020 13:44:40 +0100 Subject: [PATCH] Update list of ROM sets when adding a new DAT. --- RomRepoMgr.Core/EventArgs/RomSetEventArgs.cs | 34 +++++++++++++++++++ RomRepoMgr.Core/EventArgs/RomSetsEventArgs.cs | 2 +- RomRepoMgr.Core/Workers/DatImporter.cs | 18 ++++++++++ RomRepoMgr/App.xaml.cs | 2 +- RomRepoMgr/ViewModels/ImportDatViewModel.cs | 5 ++- RomRepoMgr/ViewModels/MainWindowViewModel.cs | 18 +++++++--- .../ViewModels/SplashWindowViewModel.cs | 4 +-- 7 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 RomRepoMgr.Core/EventArgs/RomSetEventArgs.cs diff --git a/RomRepoMgr.Core/EventArgs/RomSetEventArgs.cs b/RomRepoMgr.Core/EventArgs/RomSetEventArgs.cs new file mode 100644 index 0000000..9a0b33c --- /dev/null +++ b/RomRepoMgr.Core/EventArgs/RomSetEventArgs.cs @@ -0,0 +1,34 @@ +/****************************************************************************** +// RomRepoMgr - ROM repository manager +// ---------------------------------------------------------------------------- +// +// Author(s) : Natalia Portillo +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2020 Natalia Portillo +*******************************************************************************/ + +using RomRepoMgr.Core.Models; + +namespace RomRepoMgr.Core.EventArgs +{ + public sealed class RomSetEventArgs : System.EventArgs + { + public RomSetModel RomSet { get; set; } + } +} \ No newline at end of file diff --git a/RomRepoMgr.Core/EventArgs/RomSetsEventArgs.cs b/RomRepoMgr.Core/EventArgs/RomSetsEventArgs.cs index 7fcfaaf..b0519af 100644 --- a/RomRepoMgr.Core/EventArgs/RomSetsEventArgs.cs +++ b/RomRepoMgr.Core/EventArgs/RomSetsEventArgs.cs @@ -28,7 +28,7 @@ using RomRepoMgr.Core.Models; namespace RomRepoMgr.Core.EventArgs { - public sealed class RomSetEventArgs : System.EventArgs + public sealed class RomSetsEventArgs : System.EventArgs { public List RomSets { get; set; } } diff --git a/RomRepoMgr.Core/Workers/DatImporter.cs b/RomRepoMgr.Core/Workers/DatImporter.cs index 4ace1c9..32e8520 100644 --- a/RomRepoMgr.Core/Workers/DatImporter.cs +++ b/RomRepoMgr.Core/Workers/DatImporter.cs @@ -28,6 +28,7 @@ using System.Diagnostics; using System.IO; using Aaru.Checksums; using RomRepoMgr.Core.EventArgs; +using RomRepoMgr.Core.Models; using RomRepoMgr.Database; using RomRepoMgr.Database.Models; using SabreTools.Library.DatFiles; @@ -112,6 +113,22 @@ namespace RomRepoMgr.Core.Workers Context.Singleton.RomSets.Add(romSet); Context.Singleton.SaveChanges(); + RomSetAdded?.Invoke(this, new RomSetEventArgs + { + RomSet = new RomSetModel + { + Author = romSet.Author, + Comment = romSet.Comment, + Date = romSet.Date, + Description = romSet.Description, + Filename = romSet.Filename, + Homepage = romSet.Homepage, + Name = romSet.Name, + Sha384 = romSet.Sha384, + Version = romSet.Version + } + }); + SetMessage?.Invoke(this, new MessageEventArgs { Message = "Compressing DAT file..." @@ -144,5 +161,6 @@ namespace RomRepoMgr.Core.Workers public event EventHandler SetProgressBounds; public event EventHandler SetProgress; public event EventHandler SetMessage; + public event EventHandler RomSetAdded; } } \ No newline at end of file diff --git a/RomRepoMgr/App.xaml.cs b/RomRepoMgr/App.xaml.cs index b927c9c..6d9183a 100644 --- a/RomRepoMgr/App.xaml.cs +++ b/RomRepoMgr/App.xaml.cs @@ -57,7 +57,7 @@ namespace RomRepoMgr base.OnFrameworkInitializationCompleted(); } - void OnGotRomSets(object sender, RomSetEventArgs e) => _romSets = e.RomSets; + void OnGotRomSets(object sender, RomSetsEventArgs e) => _romSets = e.RomSets; void OnSplashFinished(object sender, EventArgs e) { diff --git a/RomRepoMgr/ViewModels/ImportDatViewModel.cs b/RomRepoMgr/ViewModels/ImportDatViewModel.cs index d9b7f50..275dda4 100644 --- a/RomRepoMgr/ViewModels/ImportDatViewModel.cs +++ b/RomRepoMgr/ViewModels/ImportDatViewModel.cs @@ -154,8 +154,11 @@ namespace RomRepoMgr.ViewModels internal void OnOpened() { - ProgressVisible = true; + ProgressVisible = true; + _worker.RomSetAdded += RomSetAdded; Task.Run(_worker.Import); } + + public event EventHandler RomSetAdded; } } \ No newline at end of file diff --git a/RomRepoMgr/ViewModels/MainWindowViewModel.cs b/RomRepoMgr/ViewModels/MainWindowViewModel.cs index 0e4c3a4..9fe60fe 100644 --- a/RomRepoMgr/ViewModels/MainWindowViewModel.cs +++ b/RomRepoMgr/ViewModels/MainWindowViewModel.cs @@ -29,7 +29,9 @@ using System.Reactive; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Threading; using ReactiveUI; +using RomRepoMgr.Core.EventArgs; using RomRepoMgr.Core.Models; using RomRepoMgr.Views; @@ -88,9 +90,11 @@ namespace RomRepoMgr.ViewModels internal async void ExecuteImportDatCommand() { - var dlgOpen = new OpenFileDialog(); - dlgOpen.AllowMultiple = false; - dlgOpen.Title = "Import DAT file..."; + var dlgOpen = new OpenFileDialog + { + AllowMultiple = false, + Title = "Import DAT file..." + }; dlgOpen.Filters.Add(new FileDialogFilter { @@ -118,8 +122,14 @@ namespace RomRepoMgr.ViewModels var dialog = new ImportDat(); var importDatViewModel = new ImportDatViewModel(dialog, result[0]); - dialog.DataContext = importDatViewModel; + importDatViewModel.RomSetAdded += ImportDatViewModelOnRomSetAdded; + dialog.DataContext = importDatViewModel; await dialog.ShowDialog(_view); } + + void ImportDatViewModelOnRomSetAdded(object sender, RomSetEventArgs e) => Dispatcher.UIThread.Post(() => + { + RomSets.Add(e.RomSet); + }); } } \ No newline at end of file diff --git a/RomRepoMgr/ViewModels/SplashWindowViewModel.cs b/RomRepoMgr/ViewModels/SplashWindowViewModel.cs index 44f47e5..136884c 100644 --- a/RomRepoMgr/ViewModels/SplashWindowViewModel.cs +++ b/RomRepoMgr/ViewModels/SplashWindowViewModel.cs @@ -306,7 +306,7 @@ namespace RomRepoMgr.ViewModels { try { - GotRomSets?.Invoke(this, new RomSetEventArgs + GotRomSets?.Invoke(this, new RomSetsEventArgs { RomSets = Context.Singleton.RomSets.OrderBy(r => r.Name).ThenBy(r => r.Version). ThenBy(r => r.Date).ThenBy(r => r.Description).ThenBy(r => r.Comment). @@ -351,6 +351,6 @@ namespace RomRepoMgr.ViewModels internal event EventHandler WorkFinished; - internal event EventHandler GotRomSets; + internal event EventHandler GotRomSets; } } \ No newline at end of file