From dd7e2b14643dc9c4a11f9fd44c2d2033898e2ad1 Mon Sep 17 00:00:00 2001 From: Flaky Date: Sun, 29 Mar 2026 10:21:42 +0100 Subject: [PATCH] fix #5 by not updating tags cache until transaction is complete --- .../Models/TagDatabase/TagDatabase.WriteMethods.cs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Core/Models/TagDatabase/TagDatabase.WriteMethods.cs b/Core/Models/TagDatabase/TagDatabase.WriteMethods.cs index b3a8c26..62b0af7 100644 --- a/Core/Models/TagDatabase/TagDatabase.WriteMethods.cs +++ b/Core/Models/TagDatabase/TagDatabase.WriteMethods.cs @@ -21,6 +21,9 @@ public partial class TagDatabase List updatedTags = []; List newlyAddedTags = []; + List<(int index, Tag tag)> pendingUpdates = []; + List pendingAdditions = []; + try { foreach (var tag in tags) @@ -42,21 +45,26 @@ public partial class TagDatabase int index = this.Tags.FindIndex(t => t.Id == tag.Id); if (index != -1) { - this.Tags[index] = tag; + pendingUpdates.Add((index, tag)); updatedTags.Add(tag); } else { - this.Tags.Add(tag); + pendingAdditions.Add(tag); newlyAddedTags.Add(tag); } } if (isTransactionOwner) await transaction.CommitAsync().ConfigureAwait(false); + + foreach (var (index, tag) in pendingUpdates) + this.Tags[index] = tag; + foreach (var tag in pendingAdditions) + this.Tags.Add(tag); TagsWritten?.Invoke(this, new DatabaseEditResult(newlyAddedTags, updatedTags, [])); } - catch (SqliteException) + catch (Exception) { await transaction.RollbackAsync().ConfigureAwait(false); throw; -- 2.51.2