Correct and simplify KeyBindingStore

This commit is contained in:
Dean Herbert 2017-10-16 17:58:17 +09:00
parent acc299c7b9
commit 9ee6d1e3f9
2 changed files with 19 additions and 15 deletions

View File

@ -38,11 +38,13 @@ private void insertDefaults(IEnumerable<KeyBinding> defaults, int? rulesetId = n
// compare counts in database vs defaults
foreach (var group in defaults.GroupBy(k => k.Action))
{
int count;
while (group.Count() > (count = Query(rulesetId, variant).Count(k => (int)k.Action == (int)group.Key)))
{
var insertable = group.Skip(count).First();
int count = Query(rulesetId, variant).Count(k => (int)k.Action == (int)group.Key);
int aimCount = group.Count();
if (aimCount <= count)
continue;
foreach (var insertable in group.Skip(count).Take(aimCount - count))
// insert any defaults which are missing.
Connection.DatabasedKeyBinding.Add(new DatabasedKeyBinding
{
@ -51,22 +53,22 @@ private void insertDefaults(IEnumerable<KeyBinding> defaults, int? rulesetId = n
RulesetID = rulesetId,
Variant = variant
});
Connection.SaveChanges();
}
}
Connection.SaveChanges();
}
public List<KeyBinding> Query(int? rulesetId = null, int? variant = null) =>
new List<KeyBinding>(Connection.DatabasedKeyBinding.Where(b => b.RulesetID == rulesetId && b.Variant == variant));
/// <summary>
/// Retrieve <see cref="KeyBinding"/>s for a specified ruleset/variant content.
/// </summary>
/// <param name="rulesetId">The ruleset's internal ID.</param>
/// <param name="variant">An optional variant.</param>
/// <returns></returns>
public IEnumerable<KeyBinding> Query(int? rulesetId = null, int? variant = null) => Connection.DatabasedKeyBinding.Where(b => b.RulesetID == rulesetId && b.Variant == variant);
public void Update(KeyBinding keyBinding)
{
var dbKeyBinding = Connection.DatabasedKeyBinding.FirstOrDefault(kb => kb.ToString() == keyBinding.ToString());
if (dbKeyBinding != null)
{
dbKeyBinding.KeyCombination = keyBinding.KeyCombination;
dbKeyBinding.Action = keyBinding.Action;
}
Connection.Update(keyBinding);
Connection.SaveChanges();
}
}

View File

@ -37,8 +37,10 @@ private void load(KeyBindingStore store)
foreach (var defaultGroup in Defaults.GroupBy(d => d.Action))
{
int intKey = (int)defaultGroup.Key;
// one row per valid action.
Add(new KeyBindingRow(defaultGroup.Key, bindings.Where(b => b.Action.Equals((int)defaultGroup.Key)))
Add(new KeyBindingRow(defaultGroup.Key, bindings.Where(b => ((int)b.Action).Equals(intKey)))
{
AllowMainMouseButtons = Ruleset != null,
Defaults = defaultGroup.Select(d => d.KeyCombination)