mirror of
https://github.com/ppy/osu.git
synced 2025-01-13 13:32:54 +08:00
Ensure scores are cleaned up alongside beatmap so they don't have a null reference
This commit is contained in:
parent
f24b2b1be3
commit
5f7365e8f3
@ -11,6 +11,7 @@ using osu.Game.Database;
|
|||||||
using osu.Game.Models;
|
using osu.Game.Models;
|
||||||
using osu.Game.Online.API.Requests.Responses;
|
using osu.Game.Online.API.Requests.Responses;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
|
using osu.Game.Scoring;
|
||||||
using Realms;
|
using Realms;
|
||||||
|
|
||||||
#nullable enable
|
#nullable enable
|
||||||
@ -36,6 +37,10 @@ namespace osu.Game.Beatmaps
|
|||||||
|
|
||||||
public BeatmapMetadata Metadata { get; set; } = new BeatmapMetadata();
|
public BeatmapMetadata Metadata { get; set; } = new BeatmapMetadata();
|
||||||
|
|
||||||
|
[IgnoreMap]
|
||||||
|
[Backlink(nameof(ScoreInfo.Beatmap))]
|
||||||
|
public IQueryable<ScoreInfo> Scores { get; } = null!;
|
||||||
|
|
||||||
public BeatmapInfo(RulesetInfo ruleset, BeatmapDifficulty difficulty, BeatmapMetadata metadata)
|
public BeatmapInfo(RulesetInfo ruleset, BeatmapDifficulty difficulty, BeatmapMetadata metadata)
|
||||||
{
|
{
|
||||||
Ruleset = ruleset;
|
Ruleset = ruleset;
|
||||||
|
@ -113,12 +113,18 @@ namespace osu.Game.Database
|
|||||||
{
|
{
|
||||||
var pendingDeleteSets = realm.All<BeatmapSetInfo>().Where(s => s.DeletePending);
|
var pendingDeleteSets = realm.All<BeatmapSetInfo>().Where(s => s.DeletePending);
|
||||||
|
|
||||||
foreach (var s in pendingDeleteSets)
|
foreach (var beatmapSet in pendingDeleteSets)
|
||||||
{
|
{
|
||||||
foreach (var b in s.Beatmaps)
|
foreach (var beatmap in beatmapSet.Beatmaps)
|
||||||
realm.Remove(b);
|
{
|
||||||
|
// Cascade delete related scores, else they will have a null beatmap against the model's spec.
|
||||||
|
foreach (var score in beatmap.Scores)
|
||||||
|
realm.Remove(score);
|
||||||
|
|
||||||
realm.Remove(s);
|
realm.Remove(beatmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
realm.Remove(beatmapSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pendingDeleteSkins = realm.All<SkinInfo>().Where(s => s.DeletePending);
|
var pendingDeleteSkins = realm.All<SkinInfo>().Where(s => s.DeletePending);
|
||||||
|
Loading…
Reference in New Issue
Block a user