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); }
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(); }
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; } }
public Planner(DSPLogisticsDbContext db) { dspDB = db; }