Esempio n. 1
0
        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();
                }
        }
Esempio n. 2
0
        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();
                }
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 4
0
        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();
            }
        }