mirror of
https://github.com/osukey/osukey.git
synced 2025-05-29 09:27:18 +09:00
Merge pull request #11892 from peppy/allow-collection-name-collisions
Fix crash on two collections existing with the same name
This commit is contained in:
commit
3e2b21a9b4
@ -44,7 +44,7 @@ namespace osu.Game.Tests.Visual.Collections
|
|||||||
{
|
{
|
||||||
manager = new CollectionManager(LocalStorage),
|
manager = new CollectionManager(LocalStorage),
|
||||||
Content,
|
Content,
|
||||||
dialogOverlay = new DialogOverlay()
|
dialogOverlay = new DialogOverlay(),
|
||||||
});
|
});
|
||||||
|
|
||||||
Dependencies.Cache(manager);
|
Dependencies.Cache(manager);
|
||||||
@ -134,6 +134,27 @@ namespace osu.Game.Tests.Visual.Collections
|
|||||||
assertCollectionName(0, "2");
|
assertCollectionName(0, "2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestCollectionNameCollisions()
|
||||||
|
{
|
||||||
|
AddStep("add dropdown", () =>
|
||||||
|
{
|
||||||
|
Add(new CollectionFilterDropdown
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopRight,
|
||||||
|
Origin = Anchor.TopRight,
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
Width = 0.4f,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
AddStep("add two collections with same name", () => manager.Collections.AddRange(new[]
|
||||||
|
{
|
||||||
|
new BeatmapCollection { Name = { Value = "1" } },
|
||||||
|
new BeatmapCollection { Name = { Value = "1" }, Beatmaps = { beatmapManager.GetAllUsableBeatmapSets().First().Beatmaps[0] } },
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestRemoveCollectionViaButton()
|
public void TestRemoveCollectionViaButton()
|
||||||
{
|
{
|
||||||
|
@ -36,7 +36,19 @@ namespace osu.Game.Collections
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool Equals(CollectionFilterMenuItem other)
|
public bool Equals(CollectionFilterMenuItem other)
|
||||||
=> other != null && CollectionName.Value == other.CollectionName.Value;
|
{
|
||||||
|
if (other == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// collections may have the same name, so compare first on reference equality.
|
||||||
|
// this relies on the assumption that only one instance of the BeatmapCollection exists game-wide, managed by CollectionManager.
|
||||||
|
if (Collection != null)
|
||||||
|
return Collection == other.Collection;
|
||||||
|
|
||||||
|
// fallback to name-based comparison.
|
||||||
|
// this is required for special dropdown items which don't have a collection (all beatmaps / manage collections items below).
|
||||||
|
return CollectionName.Value == other.CollectionName.Value;
|
||||||
|
}
|
||||||
|
|
||||||
public override int GetHashCode() => CollectionName.Value.GetHashCode();
|
public override int GetHashCode() => CollectionName.Value.GetHashCode();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user