Files
minecraft-modpack-updater/ModpackUpdater.Apps.Client/Program.cs

75 lines
2.4 KiB
C#

using System.Reflection;
using Castle.Core.Logging;
using ModpackUpdater.Manager;
using Pilz.Extensions;
namespace ModpackUpdater.Apps.Client;
public static class Program
{
private static readonly ILogger log = new ConsoleLogger();
public static ILogger Log => log;
internal static Options Options { get; private set; } = null!;
[STAThread]
internal static void Main(string[] args)
{
Options = new Options(args);
if (Options.Help)
{
DrawInfo();
Options.DrawHelp();
return;
}
if (!Options.Silent)
DrawInfo();
InstallWithoutGui(Options.UpdateOptions, Options.Silent);
}
private static void DrawInfo()
{
Console.WriteLine("Minecraft Modpack Updater CLI");
Console.WriteLine("Version " + Assembly.GetExecutingAssembly().GetAppVersion().ToShortHumanString());
Console.WriteLine("------------------------------");
}
private static void InstallWithoutGui(UpdateCheckOptionsAdv updateOptions, bool silent)
{
var info = ModpackInfo.TryLoad(updateOptions.ProfileFolder);
var config = ModpackConfig.LoadFromUrl(CheckModpackConfigUrl(updateOptions.ModpackConfig!, info));
// Check features
if (!string.IsNullOrWhiteSpace(updateOptions.ExtrasKey))
info.ExtrasKey = updateOptions.ExtrasKey;
if (!string.IsNullOrWhiteSpace(info.ExtrasKey))
updateOptions.IncludeExtras = !string.IsNullOrWhiteSpace(info.ExtrasKey) && config.ExtrasKeys.Contains(info.ExtrasKey);
// Check for update
var installer = new ModpackInstaller(config, info)
{
OverwriteRefTag = Options.RefTag,
OverwriteVersion = Options.Version,
Log = Log,
};
var result = installer.Check(updateOptions).Result;
if (result.HasUpdates)
{
var success = installer.Install(result).Result;
if (!silent)
Log.Info($"Installation {(success ?? false ? "completed successfully" : "failed")}!");
}
else if (!silent)
Log.Info("No updates available");
}
private static string CheckModpackConfigUrl(string configUrl, ModpackInfo info)
{
if (string.IsNullOrWhiteSpace(configUrl) && !string.IsNullOrWhiteSpace(info.ConfigUrl))
return info.ConfigUrl;
return configUrl;
}
}