using SinMaiLauncher.ChildProcessHolder; using static System.IO.Path; namespace SinMaiLauncher.Models; internal class SettingReader { public readonly string BaseDir = Environment.CurrentDirectory; public readonly string InfraDir; public IProcessStartInfo Maria; public IProcessStartInfo AquaDx; public IProcessStartInfo Injector; public IProcessStartInfo SinMai; public string ExternalAppsDir { get; } public string SinMaiAimeFileDir { get; } public string SinMaiAimeFilePath { get; } public string ReplaceAppDataFileDir { get; } public string ReplaceAppDataFilePath { get; } public string SinMaiAppFileDir { get; } public string SinMaiAppFilePath { get; } public string FfmpegBinPath { get; } public SinMaiLauncherSettingModel Settings { get; } public SettingReader(SinMaiLauncherSettingModel settings) { ExternalAppsDir = GetFullPath(Combine(BaseDir, "ExternalApps")); Settings = settings; FfmpegBinPath = GetFullPath(Combine(BaseDir, settings.FfmpegBinPath)); ReplaceAppDataFileDir = GetFullPath(Combine(BaseDir, settings.ReplaceAppDataFileDir)); ReplaceAppDataFilePath = GetFullPath(Combine(ReplaceAppDataFileDir, settings.ReplaceAppDataFileName)); InfraDir = GetFullPath(Combine(BaseDir, settings.Infra.InfraDir)); var mariaDir = GetFullPath(Combine(InfraDir, settings.Infra.MariaDb.WorkingDir)); var mariaExe = GetFullPath(Combine(mariaDir, settings.Infra.MariaDb.MySqlServerExe)); var mariaArg = settings.Infra.MariaDb.MySqlServerArgs; Maria = new ProcessStartInfoImpl(mariaDir, mariaExe, mariaArg); var aquaDxDir = GetFullPath(Combine(InfraDir, settings.Infra.AquaDx.WorkingDir)); var aquaDxJavaExe = GetFullPath(Combine(aquaDxDir, settings.Infra.AquaDx.JavaPath)); var aquaDxJavaArg = settings.Infra.AquaDx.JavaArgs; AquaDx = new ProcessStartInfoImpl(aquaDxDir, aquaDxJavaExe, aquaDxJavaArg); var sinMaiDir = GetFullPath(Combine(InfraDir, settings.SinMai.WorkingDir)); var injectorExe = GetFullPath(Combine(sinMaiDir, settings.SinMai.InjectExe)); var injectorArg = settings.SinMai.InjectArgs; Injector = new ProcessStartInfoImpl(sinMaiDir, injectorExe, injectorArg); var sinMaiExe = GetFullPath(Combine(sinMaiDir, settings.SinMai.SinMaiExe)); var sinMaiArg = settings.SinMai.SinMaiArgs; SinMai = new ProcessStartInfoImpl(sinMaiDir, sinMaiExe, sinMaiArg); SinMaiAimeFileDir = GetFullPath(Combine(sinMaiDir, settings.SinMai.AimeFileDir)); SinMaiAimeFilePath = GetFullPath(Combine(SinMaiAimeFileDir, settings.SinMai.AimeFileName)); SinMaiAppFileDir = GetFullPath(Combine(sinMaiDir, settings.SinMai.AppFileDir)); SinMaiAppFilePath = GetFullPath(Combine(SinMaiAppFileDir, settings.SinMai.AppFileName)); } private class ProcessStartInfoImpl(string workingDir, string exe, string arg) : IProcessStartInfo { public string WorkingDir { get; } = workingDir; public string Exe { get; } = exe; public string Arg { get; } = arg; } }