using Avalonia; using Castle.Core.Logging; using Newtonsoft.Json; using Pilz; using Pilz.Configuration; namespace ModpackUpdater.Apps.Client.Gui; public static class Program { public const string UpdateUrl = "https://git.pilzinsel64.de/litw-refined/minecraft-modpack-updater/-/snippets/3/raw/main/updates-new.json"; private static readonly SettingsManager settingsManager; public static string ProcessPath = EnvironmentEx.ProcessPath!; public static ISettings Settings => settingsManager.Instance; public static ILogger Log { get; } = new ConsoleLogger(); static Program() { settingsManager = new(GetSettingsPath(2), true); MigrateLegacySettings(GetSettingsPath(null)); } [STAThread] internal static void Main(string[] args) { AppGlobals.Initialize(); BuildAvaloniaApp().StartWithClassicDesktopLifetime(args); } public static AppBuilder BuildAvaloniaApp() { return AppBuilder.Configure() .UsePlatformDetect() .WithInterFont() .LogToTrace(); } private static string GetSettingsPath(int? settingsVersion = 3) { const string appDataDirectoryName = "MinecraftModpackUpdater"; var fileNamePostfix = settingsVersion == null ? string.Empty : $"V{settingsVersion}"; var settingsFileName = $"Settings{fileNamePostfix}.json"; var settingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), appDataDirectoryName); Directory.CreateDirectory(settingsPath); settingsPath = Path.Combine(settingsPath, settingsFileName); return settingsPath; } private static void MigrateLegacySettings(string settingsPath) { // Try load legacy config file if (!File.Exists(settingsPath) || JsonConvert.DeserializeObject(File.ReadAllText(settingsPath)) is not AppConfig legacyConfig) return; // Migrate var newConfig = Settings.Get(); newConfig.LastMinecraftProfilePath = legacyConfig.LastMinecraftProfilePath; if (ModpackInfo.TryLoad(legacyConfig.LastMinecraftProfilePath) is ModpackInfo info) #pragma warning disable CS0612 // Typ oder Element ist veraltet info.ConfigUrl = legacyConfig.ConfigFilePath; // Ensure save settings settingsManager.Save(); // Delete legacy config file File.Delete(settingsPath); } }