private void migrateDataToRealm() { using (var db = contextFactory.GetForWrite()) using (var usage = realmFactory.GetForWrite()) { // migrate ruleset settings. can be removed 20220315. var existingSettings = db.Context.DatabasedSetting; // only migrate data if the realm database is empty. if (!usage.Realm.All <RealmRulesetSetting>().Any()) { foreach (var dkb in existingSettings) { if (dkb.RulesetID == null) { continue; } usage.Realm.Add(new RealmRulesetSetting { Key = dkb.Key, Value = dkb.StringValue, RulesetID = dkb.RulesetID.Value, Variant = dkb.Variant ?? 0, }); } } db.Context.RemoveRange(existingSettings); usage.Commit(); } }
private void migrateDataToRealm() { using (var db = contextFactory.GetForWrite()) using (var usage = realmFactory.GetForWrite()) { var existingBindings = db.Context.DatabasedKeyBinding; // only migrate data if the realm database is empty. if (!usage.Realm.All <RealmKeyBinding>().Any()) { foreach (var dkb in existingBindings) { usage.Realm.Add(new RealmKeyBinding { KeyCombinationString = dkb.KeyCombination.ToString(), ActionInt = (int)dkb.Action, RulesetID = dkb.RulesetID, Variant = dkb.Variant }); } } db.Context.RemoveRange(existingBindings); usage.Commit(); } }
private void insertDefaults(IEnumerable <IKeyBinding> defaults, int?rulesetId = null, int?variant = null) { using (var usage = realmFactory.GetForWrite()) { // compare counts in database vs defaults foreach (var defaultsForAction in defaults.GroupBy(k => k.Action)) { int existingCount = usage.Realm.All <RealmKeyBinding>().Count(k => k.RulesetID == rulesetId && k.Variant == variant && k.ActionInt == (int)defaultsForAction.Key); if (defaultsForAction.Count() <= existingCount) { continue; } foreach (var k in defaultsForAction.Skip(existingCount)) { // insert any defaults which are missing. usage.Realm.Add(new RealmKeyBinding { KeyCombinationString = k.KeyCombination.ToString(), ActionInt = (int)k.Action, RulesetID = rulesetId, Variant = variant }); } } usage.Commit(); } }
public void Register(KeyBindingContainer container, IEnumerable <RulesetInfo> rulesets) { using (var usage = realmFactory.GetForWrite()) { // intentionally flattened to a list rather than querying against the IQueryable, as nullable fields being queried against aren't indexed. // this is much faster as a result. var existingBindings = usage.Realm.All <RealmKeyBinding>().ToList(); insertDefaults(usage, existingBindings, container.DefaultKeyBindings); foreach (var ruleset in rulesets) { var instance = ruleset.CreateInstance(); foreach (var variant in instance.AvailableVariants) { insertDefaults(usage, existingBindings, instance.GetDefaultKeyBindings(variant), ruleset.ID, variant); } } usage.Commit(); } }