From 1b3bff6fa5e023c3202a6358fcf57b7cf7328005 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 14 Jan 2020 18:43:06 +0900 Subject: [PATCH] Fix model file infos not being removed --- osu.Game/Database/ArchiveModelManager.cs | 13 +++++++++---- .../Database/DownloadableArchiveModelManager.cs | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index a4c930d888..be20b2c2e9 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -34,7 +34,7 @@ namespace osu.Game.Database /// The associated file join type. public abstract class ArchiveModelManager : ICanAcceptFiles, IModelManager where TModel : class, IHasFiles, IHasPrimaryKey, ISoftDelete - where TFileModel : INamedFileInfo, new() + where TFileModel : class, INamedFileInfo, new() { private const int import_queue_request_concurrency = 1; @@ -366,8 +366,15 @@ namespace osu.Game.Database public void UpdateFile(TModel model, TFileModel file, Stream contents) { - using (ContextFactory.GetForWrite()) + using (var usage = ContextFactory.GetForWrite()) { + // Dereference the existing file info, since the file model will be removed. + Files.Dereference(file.FileInfo); + + // Remove the file model. + usage.Context.Set().Remove(file); + + // Add the new file info and containing file model. model.Files.Remove(file); model.Files.Add(new TFileModel { @@ -375,8 +382,6 @@ namespace osu.Game.Database FileInfo = Files.Add(contents) }); - Files.Dereference(file.FileInfo); - Update(model); } } diff --git a/osu.Game/Database/DownloadableArchiveModelManager.cs b/osu.Game/Database/DownloadableArchiveModelManager.cs index 71bf195a8d..4bd9df5f36 100644 --- a/osu.Game/Database/DownloadableArchiveModelManager.cs +++ b/osu.Game/Database/DownloadableArchiveModelManager.cs @@ -21,7 +21,7 @@ namespace osu.Game.Database /// The associated file join type. public abstract class DownloadableArchiveModelManager : ArchiveModelManager, IModelDownloader where TModel : class, IHasFiles, IHasPrimaryKey, ISoftDelete, IEquatable - where TFileModel : INamedFileInfo, new() + where TFileModel : class, INamedFileInfo, new() { public event Action> DownloadBegan;