diff --git a/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs b/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs index 16cbb30ba..3a25bc126 100644 --- a/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs @@ -123,6 +123,22 @@ namespace Aaru.Gui.ViewModels.Windows { var ctx = AaruContext.Create(Settings.Settings.LocalDbPath); ctx.Database.Migrate(); + + // Remove duplicates + foreach(var duplicate in ctx.SeenDevices.AsEnumerable().GroupBy(a => new + { + a.Manufacturer, a.Model, a.Revision, a.Bus + }).Where(a => a.Count() > 1).Distinct().Select(a => a.Key)) + ctx.RemoveRange(ctx.SeenDevices. + Where(d => d.Manufacturer == duplicate.Manufacturer && + d.Model == duplicate.Model && + d.Revision == duplicate.Revision && + d.Bus == duplicate.Bus).Skip(1)); + + // Remove nulls + ctx.RemoveRange(ctx.SeenDevices.Where(d => d.Manufacturer == null && d.Model == null && + d.Revision == null)); + ctx.SaveChanges(); Dispatcher.UIThread.Post(UpdateMasterDatabase); diff --git a/Aaru/Main.cs b/Aaru/Main.cs index c11c2c817..cfd066f2f 100644 --- a/Aaru/Main.cs +++ b/Aaru/Main.cs @@ -81,6 +81,21 @@ namespace Aaru var ctx = AaruContext.Create(Settings.Settings.LocalDbPath); ctx.Database.Migrate(); + + // Remove duplicates + foreach(var duplicate in ctx.SeenDevices.AsEnumerable().GroupBy(a => new + { + a.Manufacturer, a.Model, a.Revision, a.Bus + }).Where(a => a.Count() > 1).Distinct().Select(a => a.Key)) + ctx.RemoveRange(ctx.SeenDevices. + Where(d => d.Manufacturer == duplicate.Manufacturer && d.Model == duplicate.Model && + d.Revision == duplicate.Revision && d.Bus == duplicate.Bus). + Skip(1)); + + // Remove nulls + ctx.RemoveRange(ctx.SeenDevices.Where(d => d.Manufacturer == null && d.Model == null && + d.Revision == null)); + ctx.SaveChanges(); bool masterDbUpdate = false;