mirror of
https://github.com/ppy/osu.git
synced 2024-11-14 15:17:27 +08:00
Merge pull request #24060 from peppy/fix-editor-save-failure
Fix incorrect realm copy logic when a beatmap becomes detached from its set
This commit is contained in:
commit
05f1526c48
@ -3,10 +3,12 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using AutoMapper;
|
||||
using AutoMapper.Internal;
|
||||
using osu.Framework.Logging;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Input.Bindings;
|
||||
using osu.Game.Models;
|
||||
@ -52,10 +54,23 @@ namespace osu.Game.Database
|
||||
{
|
||||
foreach (var beatmap in s.Beatmaps)
|
||||
{
|
||||
var existing = d.Beatmaps.FirstOrDefault(b => b.ID == beatmap.ID);
|
||||
// Importantly, search all of realm for the beatmap (not just the set's beatmaps).
|
||||
// It may have gotten detached, and if that's the case let's use this opportunity to fix
|
||||
// things up.
|
||||
var existingBeatmap = d.Realm.Find<BeatmapInfo>(beatmap.ID);
|
||||
|
||||
if (existing != null)
|
||||
copyChangesToRealm(beatmap, existing);
|
||||
if (existingBeatmap != null)
|
||||
{
|
||||
// As above, reattach if it happens to not be in the set's beatmaps.
|
||||
if (!d.Beatmaps.Contains(existingBeatmap))
|
||||
{
|
||||
Debug.Fail("Beatmaps should never become detached under normal circumstances. If this ever triggers, it should be investigated further.");
|
||||
Logger.Log("WARNING: One of the difficulties in a beatmap was detached from its set. Please save a copy of logs and report this to devs.", LoggingTarget.Database, LogLevel.Important);
|
||||
d.Beatmaps.Add(existingBeatmap);
|
||||
}
|
||||
|
||||
copyChangesToRealm(beatmap, existingBeatmap);
|
||||
}
|
||||
else
|
||||
{
|
||||
var newBeatmap = new BeatmapInfo
|
||||
@ -64,6 +79,7 @@ namespace osu.Game.Database
|
||||
BeatmapSet = d,
|
||||
Ruleset = d.Realm.Find<RulesetInfo>(beatmap.Ruleset.ShortName)
|
||||
};
|
||||
|
||||
d.Beatmaps.Add(newBeatmap);
|
||||
copyChangesToRealm(beatmap, newBeatmap);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user