From 7c7b3ed56191e7cc675ad6645cea8a54a53146b7 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Sat, 15 Apr 2023 21:11:27 +0200 Subject: [PATCH] Add config file --- Elwig/App.xaml.cs | 14 ++++++++-- Elwig/Documents/Html.cs | 1 + Elwig/Documents/Pdf.cs | 4 +-- Elwig/Elwig.csproj | 12 ++++---- Elwig/Helpers/AppDbContext.cs | 3 +- Elwig/Helpers/Config.cs | 37 +++++++++++++++++++++++++ Elwig/Windows/MainWindow.xaml.cs | 1 - Elwig/Windows/MemberAdminWindow.xaml.cs | 1 - 8 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 Elwig/Helpers/Config.cs diff --git a/Elwig/App.xaml.cs b/Elwig/App.xaml.cs index d56280f..73832a0 100644 --- a/Elwig/App.xaml.cs +++ b/Elwig/App.xaml.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using System.Configuration; using System.Data; using System.Linq; -using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.IO; @@ -12,16 +9,27 @@ using Elwig.Helpers; namespace Elwig { public partial class App : Application { + public static readonly string DataPath = @"C:\ProgramData\Elwig\"; + public static readonly string ExePath = @"C:\Program Files\Elwig\"; + public static readonly Config Config = new(DataPath + "config.ini"); + public static bool IsPrintingReady => Documents.Html.IsReady && Documents.Pdf.IsReady; public static System.Windows.Threading.Dispatcher MainDispatcher { get; private set; } public App() : base() { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "Elwig")); + Directory.CreateDirectory(DataPath); MainDispatcher = Dispatcher; } protected override void OnStartup(StartupEventArgs evt) { + using (var ctx = new AppDbContext()) { + if (!ctx.Database.CanConnect()) { + MessageBox.Show($"Invalid Database:\n\n{Config.DatabasePath}", "Invalid Database", MessageBoxButton.OK, MessageBoxImage.Error); + Shutdown(); + } + } Utils.RunBackground("HTML Initialization", () => Documents.Html.Init(PrintingReadyChanged)); Utils.RunBackground("PDF Initialization", () => Documents.Pdf.Init(PrintingReadyChanged)); base.OnStartup(evt); diff --git a/Elwig/Documents/Html.cs b/Elwig/Documents/Html.cs index f93c9b8..fae40f8 100644 --- a/Elwig/Documents/Html.cs +++ b/Elwig/Documents/Html.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; namespace Elwig.Documents { public static class Html { + private static RazorLightEngine? Engine = null; public static bool IsReady => Engine != null; diff --git a/Elwig/Documents/Pdf.cs b/Elwig/Documents/Pdf.cs index 9983cb1..a9432df 100644 --- a/Elwig/Documents/Pdf.cs +++ b/Elwig/Documents/Pdf.cs @@ -18,14 +18,14 @@ using Elwig.Windows; namespace Elwig.Documents { public static class Pdf { - private static readonly string CHROMIUM = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"; + private static readonly string Chromium = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"; private static IBrowser? Browser = null; public static bool IsReady => Browser != null; public static async Task Init(Action evtHandler) { Browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true, - ExecutablePath = CHROMIUM, + ExecutablePath = Chromium, }); evtHandler(); } diff --git a/Elwig/Elwig.csproj b/Elwig/Elwig.csproj index dbaf881..14aa95f 100644 --- a/Elwig/Elwig.csproj +++ b/Elwig/Elwig.csproj @@ -14,15 +14,15 @@ + - - - - - + + + + - + diff --git a/Elwig/Helpers/AppDbContext.cs b/Elwig/Helpers/AppDbContext.cs index 3b392f3..bf0fb46 100644 --- a/Elwig/Helpers/AppDbContext.cs +++ b/Elwig/Helpers/AppDbContext.cs @@ -3,6 +3,7 @@ using Elwig.Models; namespace Elwig.Helpers { public class AppDbContext : DbContext { + public DbSet Countries { get; set; } public DbSet Members { get; set; } public DbSet BillingAddresses { get; set; } @@ -22,7 +23,7 @@ namespace Elwig.Helpers { public DbSet WineVarieties { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - optionsBuilder.UseSqlite("Data Source=\"C:\\Users\\lorenz\\Desktop\\wgprod.sqlite3\"; foreign keys=true"); + optionsBuilder.UseSqlite($"Data Source=\"{App.Config.DatabasePath}\"; Foreign Keys=True; Mode=ReadWrite; Cache=Default"); optionsBuilder.UseLazyLoadingProxies(); base.OnConfiguring(optionsBuilder); } diff --git a/Elwig/Helpers/Config.cs b/Elwig/Helpers/Config.cs new file mode 100644 index 0000000..6d67c95 --- /dev/null +++ b/Elwig/Helpers/Config.cs @@ -0,0 +1,37 @@ +using System; +using System.Text; +using IniParser; +using IniParser.Model; + +namespace Elwig.Helpers { + public class Config { + + private readonly string FileName; + public string DatabasePath; + + public Config(string filename) { + FileName = filename; + Read(); + } + + public void Read() { + var parser = new FileIniDataParser(); + IniData? ini = null; + try { + ini = parser.ReadFile(FileName, Encoding.UTF8); + } catch {} + + if (ini == null || !ini.TryGetKey("database.path", out string db)) { + DatabasePath = App.DataPath + "database.sqlite3"; + } else if (db.Length > 1 && db[1] == ':') { + DatabasePath = db; + } else { + DatabasePath = App.DataPath + db; + } + } + + public void Write() { + throw new NotImplementedException(); + } + } +} diff --git a/Elwig/Windows/MainWindow.xaml.cs b/Elwig/Windows/MainWindow.xaml.cs index 19ddd33..3cf6b4e 100644 --- a/Elwig/Windows/MainWindow.xaml.cs +++ b/Elwig/Windows/MainWindow.xaml.cs @@ -19,7 +19,6 @@ namespace Elwig.Windows { } private void Window_Loaded(object sender, RoutedEventArgs evt) { - Context.Countries.Load(); Button4.IsEnabled = App.IsPrintingReady; } diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index 9c1c979..37866f5 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -1,5 +1,4 @@ using Microsoft.EntityFrameworkCore; -using ModernWpf.Controls; using System; using System.Collections.Generic; using System.ComponentModel;