From 3738d75202a41bac2d1fa3ad19dcd00823763e9b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 7 Apr 2025 19:37:16 +0900 Subject: [PATCH] Avoid saving a state when clearly not dirty --- osu.Game/Screens/Edit/Editor.cs | 4 ++++ osu.Game/Screens/Edit/Setup/MetadataSection.cs | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index f56380a34d..572c4ce283 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -573,6 +573,9 @@ namespace osu.Game.Screens.Edit return true; } + [CanBeNull] + internal event Action Saved; + /// /// Saves the currently edited beatmap. /// @@ -601,6 +604,7 @@ namespace osu.Game.Screens.Edit isNewBeatmap = false; updateLastSavedHash(); onScreenDisplay?.Display(new BeatmapEditorToast(ToastStrings.BeatmapSaved, editorBeatmap.BeatmapInfo.GetDisplayTitle())); + Saved?.Invoke(); return true; } diff --git a/osu.Game/Screens/Edit/Setup/MetadataSection.cs b/osu.Game/Screens/Edit/Setup/MetadataSection.cs index ef9657f32e..323cdcfc3d 100644 --- a/osu.Game/Screens/Edit/Setup/MetadataSection.cs +++ b/osu.Game/Screens/Edit/Setup/MetadataSection.cs @@ -25,8 +25,13 @@ namespace osu.Game.Screens.Edit.Setup private FormTextBox sourceTextBox = null!; private FormTextBox tagsTextBox = null!; + private bool dirty = false; + public override LocalisableString Title => EditorSetupStrings.MetadataHeader; + [Resolved] + private Editor editor { get; set; } + [BackgroundDependencyLoader] private void load(SetupScreen? setupScreen) { @@ -73,11 +78,13 @@ namespace osu.Game.Screens.Edit.Setup item.Current.BindValueChanged(_ => applyMetadata()); item.OnCommit += (_, newText) => { - if (newText) + if (newText && dirty) Beatmap.SaveState(); }; } + editor.Saved += () => dirty = false; + updateReadOnlyState(); } @@ -124,6 +131,8 @@ namespace osu.Game.Screens.Edit.Setup Beatmap.BeatmapInfo.DifficultyName = difficultyTextBox.Current.Value; Beatmap.Metadata.Source = sourceTextBox.Current.Value; Beatmap.Metadata.Tags = tagsTextBox.Current.Value; + + dirty = true; } private partial class FormRomanisedTextBox : FormTextBox