Пример #1
0
        static async Task <DSPLogisticsDbContext> LoadGameDatabase()
        {
            DSPLogisticsDbContext dSPLogisticsDb;

            if (File.Exists(DBPath))
            {
                var connectionString = new SqliteConnectionStringBuilder()
                {
                    Mode       = SqliteOpenMode.ReadOnly,
                    DataSource = DBPath
                }.ToString();
                dSPLogisticsDb = new DSPLogisticsDbContext(connectionString);
                // TODO: handle migration later
            }
            else
            {
                Directory.CreateDirectory(AppDataPath);
                var connectionString = new SqliteConnectionStringBuilder()
                {
                    Mode       = SqliteOpenMode.ReadWriteCreate,
                    DataSource = DBPath
                }.ToString();
                dSPLogisticsDb = new DSPLogisticsDbContext(connectionString);
                await dSPLogisticsDb.Database.EnsureCreatedAsync();
                await LoadGameData(dSPLogisticsDb);
            }
            return(dSPLogisticsDb);
        }
Пример #2
0
        public async Task SaveTo(DSPLogisticsDbContext logisticsDb)
        {
            foreach (var strProto in StringSet)
            {
                await logisticsDb.LocalizedStrings.AddAsync(new LocalizedString(strProto.Name, strProto.ZHCN, strProto.ENUS, strProto.FRFR));
            }

            await logisticsDb.SaveChangesAsync();

            foreach (var itemProto in ItemSet)
            {
                await logisticsDb.AddAsync(
                    new Item(
                        itemProto.ID,
                        logisticsDb.LocalizedStrings.Single(x => x.Name == itemProto.Name),
                        itemProto.IconPath,
                        itemProto.GridIndex,
                        logisticsDb.LocalizedStrings.Single(x => x.Name == itemProto.Description)));
            }

            await logisticsDb.SaveChangesAsync();

            foreach (var recipeProto in RecipeSet)
            {
                var inputs =
                    Enumerable
                    .Zip(recipeProto.Items, recipeProto.ItemCounts)
                    .Select(input => new RecipeInput(logisticsDb.Items.Single(x => x.ID == input.First), input.Second))
                    .ToList();

                var outputs =
                    Enumerable
                    .Zip(recipeProto.Results, recipeProto.ResultCounts)
                    .Select(input => new RecipeOutput(logisticsDb.Items.Single(x => x.ID == input.First), input.Second))
                    .ToList();

                await logisticsDb.AddAsync(
                    new Recipe(
                        recipeProto.ID,
                        logisticsDb.LocalizedStrings.Single(x => x.Name == recipeProto.Name),
                        recipeProto.TimeSpend,
                        inputs,
                        outputs));
            }
            await logisticsDb.SaveChangesAsync();
        }
Пример #3
0
 static async Task LoadGameData(DSPLogisticsDbContext dspLogisticsDb)
 {
     try
     {
         var finder       = new GameLocationFinder();
         var gameLocation = finder.TryFindGame();
         if (gameLocation is null)
         {
             throw new FileNotFoundException();
         }
         else
         {
             var gameDb = GameDataBase.Load(gameLocation);
             await gameDb.SaveTo(dspLogisticsDb);
         }
     }
     catch (Exception)
     {
         dspLogisticsDb.Database.EnsureDeleted();
         throw;
     }
 }
Пример #4
0
 public Planner(DSPLogisticsDbContext db)
 {
     dspDB = db;
 }