sa/Stars Assistant/Program.cs

160 lines
4.5 KiB
C#

using System;
using Avalonia;
using Splat;
using Microsoft.EntityFrameworkCore;
using CsvHelper.Configuration;
using CsvHelper;
using StarsAssistant.Model;
using System.Globalization;
using Avalonia.ReactiveUI;
namespace StarsAssistant;
sealed class Program
{
// Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
[STAThread]
public static void Main(string[] args)
{
ModeDetector.OverrideModeDetector(Splat.ModeDetection.Mode.Run);
var logger = new ConsoleLogger() { Level = LogLevel.Debug };
Locator.CurrentMutable.RegisterConstant(logger, typeof(ILogger));
bool newGame = false;
string dbPath = "/home/torben/Nextcloud/Documents/Stars!/Games/goingth/GOINGTH.sqlite";
Services.Game gameSvc;
using (StarsDatabase starsDB = new(dbPath))
{
if (Path.Exists(dbPath))
{
Model.Game dbGame = starsDB.Game.First();
gameSvc = new Services.Game(dbGame);
}
else
{
starsDB.Database.EnsureCreated();
gameSvc = new()
{
BaseName = "GOINGTH",
GamePath = "/home/torben/Nextcloud/Documents/Stars!/Games/goingth/"
};
gameSvc.SaveToDatabase(starsDB);
newGame = true;
}
}
Locator.CurrentMutable.RegisterConstant(gameSvc, typeof(Services.Game));
Locator.CurrentMutable.RegisterConstant(new Services.CSVDataLoader(), typeof(Services.CSVDataLoader));
Locator.CurrentMutable.Register(() => new StarsDatabase(gameSvc.DatabaseFileName), typeof(StarsDatabase));
if (newGame)
__createTestData();
BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
}
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace()
.UseReactiveUI();
public static void __createTestData ()
{
using var db = Locator.Current.GetService<StarsDatabase>()!;
// Note: This sample requires the database to be created before running.
// Console.WriteLine($"Database path: {db.DbPath}.");
Race r = new()
{
Name = "Atlantis",
PlayerRace = true,
PlayerFileId = 1,
ColonistsPerResource = 1000,
GrowthRatePercent = 19,
PRT = PRT.Other,
HasOBRM = true,
FactoryCost3 = false,
FactoryNumberPer10k = 8,
FactoryResCost = 8,
FactoryResPer10 = 15,
MineResCost = 3,
MineMineralsPer10 = 10,
MineNumberPer10k = 10
};
db.Add(r);
db.SaveChanges();
var loader = new CSV.PlanetLoader();
loader.ImportForRace(Services.Game.Player);
}
}
/*
using Microsoft.EntityFrameworkCore;
using CsvHelper.Configuration;
using CsvHelper;
using StarsAssistant.model;
using var db = new StarsDatabase("stars.sqlite");
db.Database.EnsureDeleted();
db.Database.EnsureCreated();
// Note: This sample requires the database to be created before running.
Console.WriteLine($"Database path: {db.DbPath}.");
var config = CsvConfiguration.FromAttributes<Planet>(CultureInfo.InvariantCulture);
config.Delimiter = "\t";
config.Escape = '\0';
config.MissingFieldFound = null;
using (var reader = new StreamReader("/home/torben/goingth/GOINGTH.p1", Encoding.Latin1))
using (var csv = new CsvReader(reader, config))
{
List<Planet> records = csv.GetRecords<Planet>().ToList();
foreach (Planet p in records)
{
db.Add(p);
}
db.SaveChanges();
}
*/
/*
// Create
Console.WriteLine("Inserting a new blog");
db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
db.SaveChanges();
// Read
Console.WriteLine("Querying for a blog");
var blog = db.Blogs
.OrderBy(b => b.BlogId)
.First();
// Update
Console.WriteLine("Updating the blog and adding a post");
blog.Url = "https://devblogs.microsoft.com/dotnet";
blog.Posts.Add(
new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
db.SaveChanges();
// Delete
// Console.WriteLine("Delete the blog");
// db.Remove(blog);
// db.SaveChanges();
*/