Implement method to deduplicate keybindings

This commit is contained in:
Bartłomiej Dach 2023-10-16 20:46:20 +02:00
parent 79273b88f6
commit 90c44cee54
No known key found for this signature in database
2 changed files with 19 additions and 3 deletions

View File

@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using osu.Framework.Input.Bindings;
using osu.Game.Input;
@ -24,7 +25,7 @@ public void TestBindingsWithoutDuplicatesAreNotModified()
new RealmKeyBinding(GlobalAction.MusicNext, KeyCombination.FromKey(Key.F5))
};
bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings);
bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings.AsQueryable());
Assert.Multiple(() =>
{
@ -58,7 +59,7 @@ public void TestDuplicateBindingsAreCleared()
new RealmKeyBinding(GlobalAction.TakeScreenshot, KeyCombination.FromKey(Key.PrintScreen)),
};
bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings);
bool anyCleared = RealmKeyBindingStore.ClearDuplicateBindings(bindings.AsQueryable());
Assert.Multiple(() =>
{

View File

@ -139,7 +139,22 @@ public static bool CheckValidForGameplay(KeyCombination combination)
/// <returns>Whether any bindings have been cleared.</returns>
public static bool ClearDuplicateBindings(IQueryable<RealmKeyBinding> keyBindings)
{
return false;
bool anyRemoved = false;
var lookup = keyBindings.ToLookup(kb => kb.KeyCombination);
foreach (var group in lookup)
{
if (group.Count() <= 1)
continue;
foreach (var binding in group)
binding.KeyCombination = new KeyCombination(InputKey.None);
anyRemoved = true;
}
return anyRemoved;
}
}
}