Exemplo n.º 1
0
        public KTUserContext GetUpdatedContext()
        {
            if (NeedsUpdate())
            {
                // creates new UDB, clobbers any old or unfinished updates
                var newUdbPath = DBPath + ".new";
                if (File.Exists(newUdbPath))
                {
                    File.Delete(newUdbPath);
                }
                var newUdb = new KTUserContext(newUdbPath);

                IKTContext backup = GetBackupContext();

                // import the rules and user data to the new db
                newUdb.ImportRules(Provider);
                if (backup != null)
                {
                    var replacements = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(Provider.GetReplacementsJSON());
                    Sauvegarde.SetSerializedData(newUdb, Sauvegarde.GetSerializedData(backup), false, replacements);
                }

                // clobber the old db with the new one
                newUdb.Database.CloseConnection();
                OldUdb?.Database?.CloseConnection();
                File.Copy(newUdbPath, DBPath, true);
                File.Delete(newUdbPath);
            }

            return(new KTUserContext(DBPath));
        }
Exemplo n.º 2
0
        private static void DeleteUserData(IKTContext db)
        {
            foreach (MemberTrait MembreTrait in db.MemberTraits.AsTracking())
            {
                db.Entry(MembreTrait).State = EntityState.Deleted;
            }
            foreach (MemberPsychic MembrePsychique in db.MemberPsychics.AsTracking())
            {
                db.Entry(MembrePsychique).State = EntityState.Deleted;
            }
            foreach (MemberWeapon MembreArme in db.MemberWeapons.AsTracking())
            {
                db.Entry(MembreArme).State = EntityState.Deleted;
            }
            foreach (MemberPower MembrePouvoir in db.MemberPowers.AsTracking())
            {
                db.Entry(MembrePouvoir).State = EntityState.Deleted;
            }
            foreach (MemberWarGearOption MembreRemplacement in db.MemberWarGearOptions.AsTracking())
            {
                db.Entry(MembreRemplacement).State = EntityState.Deleted;
            }
            foreach (Member Membre in db.Members.AsTracking())
            {
                db.Entry(Membre).State = EntityState.Deleted;
            }
            foreach (Team equipe in db.Teams.AsTracking())
            {
                db.Entry(equipe).State = EntityState.Deleted;
            }

            db.SaveChanges();
        }
Exemplo n.º 3
0
        public KTUserContext GetUpdatedContext()
        {
            Log("Checking if Database needs update");
            if (NeedsUpdate())
            {
                Log($"Updating Database to {Provider.GetVersion()}");
                // creates new UDB, clobbers any old or unfinished updates
                var newUdbPath = DBPath + ".new";
                if (File.Exists(newUdbPath))
                {
                    File.Delete(newUdbPath);
                }
                var newUdb = new KTUserContext(newUdbPath);

                IKTContext backup = GetBackupContext();

                Log($"Importing rules to new database");
                // import the rules and user data to the new db
                newUdb.ImportRules(Provider);
                if (backup != null)
                {
                    string legacy = (backup is KTLegacyContext ? "legacy " : "");
                    Log($"Backing up old {legacy}Database");
                    var replacements = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(Provider.GetReplacementsJSON());
                    Log($"Applying {legacy}backup to new Database");
                    Sauvegarde.SetSerializedData(
                        newUdb,
                        Sauvegarde.GetSerializedData(backup),
                        false,
                        replacements,
                        (float?p, string s) => Log(null, p, s)
                        );
                }

                Log($"Applying New Database");
                // clobber the old db with the new one
                newUdb.Database.CloseConnection();
                OldUdb?.Database?.CloseConnection();
                File.Copy(newUdbPath, DBPath, true);
                File.Delete(newUdbPath);
            }

            Log($"Loading Database");
            return(new KTUserContext(DBPath));
        }
Exemplo n.º 4
0
        public static async Task <bool> Synchro(IKTContext db)
        {
            byte[] data = await Xamarin.Forms.DependencyService.Get <ICloud>().Synchro(Encoding.UTF8.GetBytes(GetSerializedData(db)));

            if (data != null && data.Length > 0)
            {
                try
                {
                    var dataString = Encoding.UTF8.GetString(data);
                    SetSerializedData(db, dataString);
                } catch (Exception)
                {
                    Xamarin.Forms.DependencyService.Get <ICloud>().Save(Encoding.UTF8.GetBytes(GetSerializedData(db)));
                }
                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
        public static string GetSerializedData(IKTContext db)
        {
            var equipes = db.Teams
                          .Include(e => e.Faction)
                          .Include(e => e.Members)
                          .ThenInclude(m => m.MemberPowers)
                          .Include(e => e.Members)
                          .ThenInclude(m => m.MemberWeapons)
                          .Include(e => e.Members)
                          .ThenInclude(m => m.MemberWarGearOptions)
                          .Include(e => e.Members)
                          .ThenInclude(m => m.ModelProfile)
                          .Include(e => e.Members)
                          .ThenInclude(m => m.Specialist)
                          .Include(e => e.Members)
                          .ThenInclude(m => m.MemberTraits)
                          .Include(e => e.Members)
                          .ThenInclude(m => m.MemberPsychics)
                          .ToList();

            return(CompressString(JsonConvert.SerializeObject(new SaveModel {
                DateTime = DateTime.Now, Teams = equipes
            })));
        }
Exemplo n.º 6
0
        public static void SetSerializedData(IKTContext db, string data, bool deleteFirst = true, Dictionary <string, Dictionary <string, string> > replacements = default)
        {
            SaveModel saveModel = JsonConvert.DeserializeObject <SaveModel>(DecompressString(data));

            if (deleteFirst)
            {
                DeleteUserData(db);
            }

            if (replacements != null && replacements.Count != 0)
            {
                saveModel = ReplaceData(saveModel, replacements);
            }

            var existing_options = db.Set <WarGearOption>()
                                   .Where(wgo => saveModel.Teams
                                          .SelectMany(t => t.Members)
                                          .SelectMany(m => m.MemberWarGearOptions)
                                          .Select(m => m.WarGearOptionId)
                                          .Contains(wgo.Id)
                                          )
                                   .Select(wgo => wgo.Id)
                                   .ToList();

            // import everything
            List <Team> equipes = saveModel.Teams;

            foreach (Team equipe in equipes)
            {
                db.Entry(equipe).State = EntityState.Added;
                foreach (Member membre in equipe.Members)
                {
                    db.Entry(membre).State = EntityState.Added;
                    foreach (MemberTrait MembreTrait in membre.MemberTraits)
                    {
                        db.Entry(MembreTrait).State = EntityState.Added;
                    }
                    foreach (MemberPsychic MembrePsychique in membre.MemberPsychics)
                    {
                        db.Entry(MembrePsychique).State = EntityState.Added;
                    }
                    foreach (MemberWeapon MembreArme in membre.MemberWeapons)
                    {
                        db.Entry(MembreArme).State = EntityState.Added;
                    }
                    foreach (MemberPower MembrePouvoir in membre.MemberPowers)
                    {
                        db.Entry(MembrePouvoir).State = EntityState.Added;
                    }
                    foreach (MemberWarGearOption MembreRemplacement in membre.MemberWarGearOptions)
                    {
                        // if the id still exists add it, otherwise skip
                        if (existing_options.Contains(MembreRemplacement.WarGearOptionId))
                        {
                            db.Entry(MembreRemplacement).State = EntityState.Added;
                        }
                    }
                }
            }

            db.SaveChanges();
        }
Exemplo n.º 7
0
        public static void SetSerializedData(
            IKTContext db,
            string data,
            bool deleteFirst = true,
            Dictionary <string, Dictionary <string, string> > replacements = default,
            Action <float?, string> callback = null
            )
        {
            callback?.Invoke(0, "Reading backup");
            SaveModel saveModel = JsonConvert.DeserializeObject <SaveModel>(DecompressString(data));
            int       size      = saveModel.Size;

            if (deleteFirst)
            {
                DeleteUserData(db);
            }

            callback?.Invoke(0, "Cleaning up old data");
            if (replacements != null && replacements.Count != 0)
            {
                saveModel = ReplaceData(saveModel, replacements);
            }

            var existing_options = db.Set <WarGearOption>()
                                   .Where(wgo => saveModel.Teams
                                          .SelectMany(t => t.Members)
                                          .SelectMany(m => m.MemberWarGearOptions)
                                          .Select(m => m.WarGearOptionId)
                                          .Contains(wgo.Id)
                                          )
                                   .Select(wgo => wgo.Id)
                                   .ToList();

            // import everything
            int         progress = 0;
            List <Team> equipes  = saveModel.Teams;

            foreach (Team equipe in equipes)
            {
                db.Entry(equipe).State = EntityState.Added;
                foreach (Member membre in equipe.Members)
                {
                    float percent = (float)progress / size;
                    callback?.Invoke(percent, $"Adding {membre.Name} from {equipe.Name}");
                    progress += 1;

                    db.Entry(membre).State = EntityState.Added;
                    foreach (MemberTrait MembreTrait in membre.MemberTraits)
                    {
                        db.Entry(MembreTrait).State = EntityState.Added;
                    }
                    foreach (MemberPsychic MembrePsychique in membre.MemberPsychics)
                    {
                        db.Entry(MembrePsychique).State = EntityState.Added;
                    }
                    foreach (MemberWeapon MembreArme in membre.MemberWeapons)
                    {
                        db.Entry(MembreArme).State = EntityState.Added;
                    }
                    foreach (MemberPower MembrePouvoir in membre.MemberPowers)
                    {
                        db.Entry(MembrePouvoir).State = EntityState.Added;
                    }
                    foreach (MemberWarGearOption MembreRemplacement in membre.MemberWarGearOptions)
                    {
                        // if the id still exists add it, otherwise skip
                        if (existing_options.Contains(MembreRemplacement.WarGearOptionId))
                        {
                            db.Entry(MembreRemplacement).State = EntityState.Added;
                        }
                    }
                }
            }

            db.SaveChanges();
        }