Add installer-option for PATH and self-updating on logon

This commit is contained in:
CreepyCrafter24 2020-04-08 19:16:14 +02:00
parent 0fc0b9eead
commit a76a09051b
20 changed files with 182 additions and 99 deletions

View File

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

View File

@ -27,50 +27,62 @@
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources =
new System.ComponentModel.ComponentResourceManager(typeof(Installer.InstallerForm));
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InstallerForm));
this.install = new System.Windows.Forms.Button();
this.installLabel = new System.Windows.Forms.Label();
this.progress = new System.Windows.Forms.ProgressBar();
this.processLabel = new System.Windows.Forms.Label();
this.log = new System.Windows.Forms.Button();
this.startupBox = new System.Windows.Forms.CheckBox();
this.pathBox = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
this.install.Anchor =
((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Bottom |
System.Windows.Forms.AnchorStyles.Left) |
System.Windows.Forms.AnchorStyles.Right)));
this.install.Location = new System.Drawing.Point(12, 92);
//
// install
//
this.install.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.install.Location = new System.Drawing.Point(12, 116);
this.install.Name = "install";
this.install.Size = new System.Drawing.Size(539, 27);
this.install.TabIndex = 0;
this.install.Text = "Install";
this.install.UseVisualStyleBackColor = true;
this.install.Click += new System.EventHandler(this.install_Click);
//
// installLabel
//
this.installLabel.AutoSize = true;
this.installLabel.Location = new System.Drawing.Point(12, 9);
this.installLabel.Name = "installLabel";
this.installLabel.Size = new System.Drawing.Size(550, 75);
this.installLabel.TabIndex = 1;
this.installLabel.Text = resources.GetString("installLabel.Text");
this.progress.Anchor =
((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Bottom |
System.Windows.Forms.AnchorStyles.Left) |
System.Windows.Forms.AnchorStyles.Right)));
this.progress.Location = new System.Drawing.Point(12, 92);
//
// progress
//
this.progress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progress.Location = new System.Drawing.Point(12, 116);
this.progress.Maximum = 8;
this.progress.Name = "progress";
this.progress.Size = new System.Drawing.Size(539, 27);
this.progress.TabIndex = 2;
this.progress.Visible = false;
//
// processLabel
//
this.processLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.processLabel.ForeColor = System.Drawing.SystemColors.ControlText;
this.processLabel.Location = new System.Drawing.Point(422, 70);
this.processLabel.Location = new System.Drawing.Point(258, 94);
this.processLabel.Name = "processLabel";
this.processLabel.Size = new System.Drawing.Size(129, 19);
this.processLabel.Size = new System.Drawing.Size(293, 19);
this.processLabel.TabIndex = 3;
this.processLabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.log.Anchor =
((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
//
// log
//
this.log.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.log.Location = new System.Drawing.Point(524, 3);
this.log.Name = "log";
this.log.Size = new System.Drawing.Size(36, 23);
@ -79,21 +91,49 @@
this.log.UseVisualStyleBackColor = true;
this.log.Visible = false;
this.log.Click += new System.EventHandler(this.log_Click);
//
// startupBox
//
this.startupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.startupBox.AutoSize = true;
this.startupBox.Enabled = false;
this.startupBox.Location = new System.Drawing.Point(130, 91);
this.startupBox.Name = "startupBox";
this.startupBox.Size = new System.Drawing.Size(122, 19);
this.startupBox.TabIndex = 5;
this.startupBox.Text = "Update on Startup";
//
// pathBox
//
this.pathBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.pathBox.AutoSize = true;
this.pathBox.Location = new System.Drawing.Point(12, 91);
this.pathBox.Name = "pathBox";
this.pathBox.Size = new System.Drawing.Size(112, 19);
this.pathBox.TabIndex = 6;
this.pathBox.Text = "Register in PATH";
this.pathBox.CheckedChanged += new System.EventHandler(this.pathBox_CheckedChanged);
//
// InstallerForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(563, 132);
this.ClientSize = new System.Drawing.Size(563, 156);
this.Controls.Add(this.log);
this.Controls.Add(this.processLabel);
this.Controls.Add(this.progress);
this.Controls.Add(this.installLabel);
this.Controls.Add(this.install);
this.Controls.Add(this.startupBox);
this.Controls.Add(this.pathBox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon) (resources.GetObject("$this.Icon")));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "InstallerForm";
this.ShowIcon = false;
this.Text = "UpTool2 Installer";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
@ -102,6 +142,8 @@
private System.Windows.Forms.ProgressBar progress;
private System.Windows.Forms.Label processLabel;
private System.Windows.Forms.Button log;
private System.Windows.Forms.CheckBox pathBox;
private System.Windows.Forms.CheckBox startupBox;
}
}

View File

@ -1,4 +1,5 @@
using System;
using Microsoft.Win32;
using System;
using System.Drawing;
using System.Globalization;
using System.IO;
@ -17,6 +18,8 @@ namespace Installer
public partial class InstallerForm : Form
{
private string _log = "";
private const string AppName = "UpTool2";
private readonly RegistryKey _rkApp;
public InstallerForm()
{
@ -24,6 +27,9 @@ namespace Installer
InitializeComponent();
Step(0, "Initialized");
_log = _log.TrimStart(Environment.NewLine.ToCharArray());
_rkApp = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
startupBox.Checked = _rkApp.GetValue(AppName) != null;
pathBox.Checked = Path.Content.Contains(Path.GetName(PathTool.GetRelative("Install")));
}
private void install_Click(object sender, EventArgs e)
@ -44,7 +50,9 @@ namespace Installer
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
if (pkgHash != meta.Element("Hash").Value.ToUpper())
throw new Exception(
$"The hash is not equal to the one stored in the repo:\r\nPackage: {pkgHash}\r\nOnline: {meta.Element("Hash").Value.ToUpper()}");
$@"The hash is not equal to the one stored in the repo:
Package: {pkgHash}
Online: {meta.Element("Hash").Value.ToUpper()}");
}
Step(4, "Extracting");
if (Directory.Exists(PathTool.GetRelative("Install")))
@ -57,13 +65,21 @@ namespace Installer
}
Step(5, "Creating shortcut");
Shortcut.Make(PathTool.GetRelative("Install", "UpTool2.exe"),
System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), "UpTool2.lnk"));
Step(6, "Creating PATH entry");
if (!Path.Content.Contains(Path.GetName(PathTool.GetRelative("Install"))))
Path.Append(PathTool.GetRelative("Install"));
Step(7, "Preparing Repos");
System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
"UpTool2.lnk"));
Step(6, "Preparing Repos");
XmlTool.FixXml();
RepoManagement.FetchRepos();
if (pathBox.Checked)
{
Step(7, startupBox.Checked ? "Creating PATH & Autostart entry" : "Creating PATH entry");
if (!Path.Content.Contains(Path.GetName(PathTool.GetRelative("Install"))))
Path.Append(PathTool.GetRelative("Install"));
if (startupBox.Checked)
_rkApp.SetValue(AppName, "uptool upgrade-self");
else if (_rkApp.GetValue(AppName) != null)
_rkApp.DeleteValue(AppName, false);
}
Step(8, "Done!");
}
catch (Exception ex)
@ -94,8 +110,16 @@ namespace Installer
Log(text);
}
private void Log(string text) => _log += $"{Environment.NewLine}[{DateTime.Now.ToString(CultureInfo.InvariantCulture).Split(' ')[1]}] {text}";
private void Log(string text) => _log +=
$"{Environment.NewLine}[{DateTime.Now.ToString(CultureInfo.InvariantCulture).Split(' ')[1]}] {text}";
private void log_Click(object sender, EventArgs e) => new Thread(() => MessageBox.Show(_log)).Start();
private void pathBox_CheckedChanged(object sender, EventArgs e)
{
startupBox.Enabled = pathBox.Checked;
if (!pathBox.Checked)
startupBox.Checked = false;
}
}
}

View File

@ -1,5 +1,4 @@
using System;
using System.IO;
using System.Linq;
namespace Installer

View File

@ -6,7 +6,6 @@ using System.Net;
using System.Security.Cryptography;
using System.Threading;
using System.Windows.Forms;
using System.Xml.Linq;
using UpToolLib;
using UpToolLib.Tool;
@ -43,7 +42,8 @@ namespace Installer
Console.WriteLine("Verifying integrity");
using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider())
{
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty)
.ToUpper();
if (pkgHash != UpdateCheck.AppHash)
throw new Exception($@"The hash is not equal to the one stored in the repo:
Package: {pkgHash}
@ -65,7 +65,8 @@ Online: {UpdateCheck.AppHash}");
}
Console.WriteLine("Creating shortcut");
Shortcut.Make(PathTool.GetRelative("Install", "UpTool2.exe"),
System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), "UpTool2.lnk"));
System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
"UpTool2.lnk"));
Console.WriteLine("Creating PATH entry");
if (!Path.Content.Contains(Path.GetName(PathTool.GetRelative("Install"))))
Path.Append(PathTool.GetRelative("Install"));

View File

@ -27,7 +27,7 @@ namespace Installer
client.DownloadProgressChanged += (sender, e) =>
{
Console.Write(
$"{new string('=', e.ProgressPercentage / 10)}[{e.ProgressPercentage}]{new string('-', 10 - (e.ProgressPercentage / 10))}");
$"{new string('=', e.ProgressPercentage / 10)}[{e.ProgressPercentage}]{new string('-', 10 - e.ProgressPercentage / 10)}");
Console.CursorLeft = 0;
};
client.DownloadDataAsync(link);
@ -108,7 +108,9 @@ namespace Installer
public object GetDefaultIcon() => 0;
public object ImageFromB64(string b64) => (Bitmap) new ImageConverter().ConvertFrom(Convert.FromBase64String(b64));
public object ImageFromB64(string b64) =>
(Bitmap) new ImageConverter().ConvertFrom(Convert.FromBase64String(b64));
public void Log(string text) => Console.WriteLine(text);
}
}

View File

@ -11,7 +11,7 @@ namespace Installer
{
internal class UtLibFunctionsGui : IExternalFunctionality
{
private Action<string> _log;
private readonly Action<string> _log;
public UtLibFunctionsGui(Action<string> log) => _log = log;
public Tuple<bool, byte[]> Download(Uri link)

View File

@ -5,7 +5,8 @@ namespace UpTool_build_tool
{
internal static class BatchScripts
{
public static Tuple<string, string> Create(bool shortcuts, string? mainBin, string programName, string? postInstall, string? postRemove)
public static Tuple<string, string> Create(bool shortcuts, string? mainBin, string programName,
string? postInstall, string? postRemove)
{
string installBat = "@echo off\r\necho INSTALL";
string removeBat = "@echo off\r\necho REMOVE";

View File

@ -19,15 +19,18 @@ namespace UpTool_build_tool
new Option<string>("--binDir", "Directory to package"),
new Option<string>("--mainBin", () => "FIND_BIN", "The applications main binary"),
new Option<string>("--packageFile", "Directory to package"),
new Option<string>("--postInstall", () => "", "Command(s) to run after installing the package (This will be pasted into the .bat AND .sh file)"),
new Option<string>("--postRemove", () => "", "Command(s) to run after removing the package (This will be pasted into the .bat AND .sh file)"),
new Option<string>("--postInstall", () => "",
"Command(s) to run after installing the package (This will be pasted into the .bat AND .sh file)"),
new Option<string>("--postRemove", () => "",
"Command(s) to run after removing the package (This will be pasted into the .bat AND .sh file)"),
new Option<bool>("--noLogo", "Disables the logo"),
new Option<bool>("--noShortcuts",
"When this is enabled the scripts will not generate a start-menu item"),
new Option<bool>("--noWine",
"This indicates that your program supports multiple platforms natively and doesn't require WINE")
};
build.Handler = CommandHandler.Create((Action<string, string, string, string, string, bool, bool, bool>)Build);
build.Handler =
CommandHandler.Create((Action<string, string, string, string, string, bool, bool, bool>) Build);
rootCommand.AddCommand(build);
return rootCommand.InvokeAsync(args).Result;
}
@ -71,11 +74,11 @@ namespace UpTool_build_tool
}
}
string programName = Path.GetFileNameWithoutExtension(mainBin);
(string installBat, string removeBat) = BatchScripts.Create(!noShortcuts, mainBin, programName, postInstall, postRemove);
(string installBat, string removeBat) =
BatchScripts.Create(!noShortcuts, mainBin, programName, postInstall, postRemove);
archive.AddFile("Install.bat", installBat);
archive.AddFile("Remove.bat", removeBat);
ShScripts.Create(archive.AddFile, !noShortcuts, mainBin, programName, postInstall, postRemove, !noWine);
}
watch.Stop();
Console.WriteLine($"Completed package creation in {watch.Elapsed}");

View File

@ -5,7 +5,8 @@ namespace UpTool_build_tool
{
internal static class ShScripts
{
public static void Create(Action<string, string> fileSave, bool shortcuts, string? mainBin, string programName, string? postInstall, string? postRemove, bool wine)
public static void Create(Action<string, string> fileSave, bool shortcuts, string? mainBin, string programName,
string? postInstall, string? postRemove, bool wine)
{
Regex rgx = new Regex("[^a-z0-9]");
Regex upRgx = new Regex("[^a-zA-Z0-9 -]");

View File

@ -27,9 +27,7 @@ namespace UpTool2
HelpRequested += _help;
filterBox.DataSource = Enum.GetValues(typeof(Status));
if (Program.Online)
{
RepoManagement.FetchRepos();
}
else
{
MessageBox.Show("Starting in offline mode!");
@ -240,9 +238,7 @@ namespace UpTool2
private void MainForm_Load(object sender, EventArgs e)
{
if (Program.Splash.IsDisposed)
{
Close();
}
else
{
Program.Splash.Invoke((Action) Program.Splash.Hide);

View File

@ -5,11 +5,8 @@ using System.IO;
using System.IO.Compression;
using System.Reflection;
using System.Security.Cryptography;
using System.Threading;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using CC_Functions.Misc;
using UpTool2.Tool;
using UpToolLib;
using UpToolLib.Tool;
@ -118,7 +115,7 @@ namespace UpTool2
const int barWidth = 50;
const int topOffset = 100;
for (int i = 0; i < Splash.Width + topOffset; i += barWidth)
g.FillPolygon(brushes[(i / barWidth) % brushes.Length], new[]
g.FillPolygon(brushes[i / barWidth % brushes.Length], new[]
{
new PointF(i, 0),
new PointF(i + barWidth, 0),
@ -129,8 +126,8 @@ namespace UpTool2
Font font = new Font(FontFamily.GenericSansSerif, 40, FontStyle.Bold);
const string text = "UpTool2";
SizeF size = g.MeasureString(text, font);
RectangleF rect = new RectangleF((Splash.Width / 2f) - (size.Width / 2),
(Splash.Height / 2f) - (size.Height / 2), size.Width, size.Height);
RectangleF rect = new RectangleF(Splash.Width / 2f - size.Width / 2,
Splash.Height / 2f - size.Height / 2, size.Width, size.Height);
g.DrawString(text, font, Brushes.White, rect);
Font smallFont = new Font(FontFamily.GenericSansSerif, 10);
const string subtitle = "by JFronny";
@ -138,11 +135,11 @@ namespace UpTool2
g.DrawString(subtitle, smallFont, Brushes.White,
new RectangleF(rect.Right - size2.Width, rect.Bottom - size2.Height, size2.Width, size2.Height));
//Draw progress bar
Rectangle bar = new Rectangle((3 * Splash.Width) / 8, ((Splash.Height * 3) / 4) - 10, Splash.Width / 4,
Rectangle bar = new Rectangle(3 * Splash.Width / 8, Splash.Height * 3 / 4 - 10, Splash.Width / 4,
20);
g.FillRectangle(Brushes.Gray, bar);
g.FillRectangle(Brushes.Black,
new Rectangle(bar.X, bar.Y, (bar.Width * _splashProgress) / 10, bar.Height));
new Rectangle(bar.X, bar.Y, bar.Width * _splashProgress / 10, bar.Height));
g.DrawRectangle(Pens.DimGray, bar);
//g.DrawString(SplashMessage, smallFont, Brushes.White, new PointF(bar.Left, bar.Bottom));
g.DrawString(_splashMessage, smallFont, Brushes.White, bar,
@ -233,4 +230,4 @@ namespace UpTool2
return false;
}
}
}
}

View File

@ -7,7 +7,6 @@ namespace UpTool2
public partial class SettingsForms : Form
{
private readonly XDocument _doc;
private readonly XElement _meta;
private readonly XElement _repos;
public SettingsForms()
@ -15,8 +14,7 @@ namespace UpTool2
InitializeComponent();
Program.FixXml();
_doc = XDocument.Load(PathTool.InfoXml);
_meta = _doc.Element("meta");
_repos = _meta.Element("Repos");
_repos = _doc.Element("meta").Element("Repos");
foreach (XElement repo in _repos.Elements("Repo"))
sourceGrid.Rows.Add(repo.Element("Name").Value, repo.Element("Link").Value);
}

View File

@ -9,17 +9,17 @@ using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography;
using System.Xml.Linq;
using UpToolLib;
using UpToolLib.DataStructures;
using UpToolLib.Tool;
using Process = System.CommandLine.Invocation.Process;
using Process = System.Diagnostics.Process;
namespace UpToolCLI
{
public static class Program
{
private static readonly UtLibFunctions Functions = new UtLibFunctions();
public static int Main(string[] args)
{
MutexLock.Lock();
@ -122,37 +122,42 @@ namespace UpToolCLI
#if DEBUG
Console.WriteLine("Not enabled in debug builds");
#else
Console.WriteLine("Downloading latest");
(bool success, byte[] dl) = Functions.Download(UpdateCheck.Installer);
if (!success)
throw new Exception("Failed to update");
Console.WriteLine("Verifying");
using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider())
if (!force && Assembly.GetExecutingAssembly().GetName().Version >= UpdateCheck.OnlineVersion)
Console.WriteLine("Already up-to-date");
else
{
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
if (pkgHash != UpdateCheck.InstallerHash)
throw new Exception($@"The hash is not equal to the one stored in the repo:
Console.WriteLine("Downloading latest");
(bool success, byte[] dl) = Functions.Download(UpdateCheck.Installer);
if (!success)
throw new Exception("Failed to update");
Console.WriteLine("Verifying");
using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider())
{
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
if (pkgHash != UpdateCheck.InstallerHash)
throw new Exception($@"The hash is not equal to the one stored in the repo:
Package: {pkgHash}
Online: {UpdateCheck.InstallerHash}");
}
Console.WriteLine("Installing");
if (Directory.Exists(PathTool.GetRelative("Install", "tmp")))
Directory.Delete(PathTool.GetRelative("Install", "tmp"), true);
Directory.CreateDirectory(PathTool.GetRelative("Install", "tmp"));
using (MemoryStream ms = new MemoryStream(dl))
{
using ZipArchive ar = new ZipArchive(ms);
ar.ExtractToDirectory(PathTool.GetRelative("Install", "tmp"), true);
}
string file = PathTool.GetRelative("Install", "tmp", "Installer.exe");
Console.WriteLine($"Starting {file}");
Process.Start(new ProcessStartInfo
{
FileName = file,
Arguments = "-i",
WorkingDirectory = PathTool.GetRelative("Install"),
UseShellExecute = false
});
}
Console.WriteLine("Installing");
if (Directory.Exists(PathTool.GetRelative("Install", "tmp")))
Directory.Delete(PathTool.GetRelative("Install", "tmp"), true);
Directory.CreateDirectory(PathTool.GetRelative("Install", "tmp"));
using (MemoryStream ms = new MemoryStream(dl))
{
using ZipArchive ar = new ZipArchive(ms);
ar.ExtractToDirectory(PathTool.GetRelative("Install", "tmp"), true);
}
string file = PathTool.GetRelative("Install", "tmp", "Installer.exe");
Console.WriteLine($"Starting {file}");
System.Diagnostics.Process.Start(new ProcessStartInfo
{
FileName = file,
Arguments = "-i",
WorkingDirectory = PathTool.GetRelative("Install"),
UseShellExecute = false
});
#endif
}
@ -316,7 +321,8 @@ Online: {UpdateCheck.InstallerHash}");
{
Console.WriteLine("Name:");
string name = Console.ReadLine();
AppInstall.InstallZip(identifier, new App(name, "Locally installed package, removal only", GlobalVariables.MinimumVer, "", true, "",
AppInstall.InstallZip(identifier, new App(name, "Locally installed package, removal only",
GlobalVariables.MinimumVer, "", true, "",
Guid.NewGuid(), Color.Red, "", false, ""), force);
Console.WriteLine($"Successfully installed \"{name}\"");
}
@ -352,7 +358,7 @@ Online: {UpdateCheck.InstallerHash}");
if (tmp.Runnable)
{
Console.WriteLine($"Starting {tmp.Name}");
System.Diagnostics.Process tmp1 = AppExtras.RunApp(tmp);
Process tmp1 = AppExtras.RunApp(tmp);
if (waitForExit)
tmp1.WaitForExit();
}

View File

@ -26,7 +26,7 @@ namespace UpToolCLI
client.DownloadProgressChanged += (sender, e) =>
{
Console.Write(
$"{new string('=', e.ProgressPercentage / 10)}[{e.ProgressPercentage}]{new string('-', 10 - (e.ProgressPercentage / 10))}");
$"{new string('=', e.ProgressPercentage / 10)}[{e.ProgressPercentage}]{new string('-', 10 - e.ProgressPercentage / 10)}");
Console.CursorLeft = 0;
};
client.DownloadDataAsync(link);

View File

@ -6,12 +6,13 @@ namespace UpToolLib
{
public static class GlobalVariables
{
public static readonly Dictionary<Guid, App> Apps = new Dictionary<Guid, App>();
public static Version MinimumVer => Version.Parse("0.0.0.0");
public const string Windows = "WINDOWS";
public const string Posix = "POSIX";
public static readonly Dictionary<Guid, App> Apps = new Dictionary<Guid, App>();
public static Version MinimumVer => Version.Parse("0.0.0.0");
public static string CurrentPlatform =>
PlatformCheck.IsWindows ? Windows : PlatformCheck.IsPosix ? Posix : throw new Exception("Unexpeccted PlatformCheck");
PlatformCheck.IsWindows ? Windows :
PlatformCheck.IsPosix ? Posix : throw new Exception("Unexpeccted PlatformCheck");
}
}

View File

@ -72,9 +72,9 @@ namespace UpToolLib.Tool
File.Delete(app.InfoPath);
if (File.Exists(Path.Combine(app.AppPath, "package.zip")))
File.Delete(Path.Combine(app.AppPath, "package.zip"));
if (deleteAll || (Directory.Exists(app.DataPath) &&
Directory.GetFiles(app.DataPath).Length + Directory.GetDirectories(app.DataPath).Length ==
0))
if (deleteAll || Directory.Exists(app.DataPath) &&
Directory.GetFiles(app.DataPath).Length + Directory.GetDirectories(app.DataPath).Length ==
0)
Directory.Delete(app.AppPath, true);
}

View File

@ -1,6 +1,5 @@
using System;
using System.Diagnostics;
using System.Linq;
using System.IO;
using System.IO.Compression;
using System.Security.Cryptography;

View File

@ -4,7 +4,6 @@ using System.Drawing;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using CC_Functions.Misc;
using UpToolLib.DataStructures;
namespace UpToolLib.Tool
@ -69,7 +68,12 @@ namespace UpToolLib.Tool
{
// ignored
}
tmpAppsList.Last().Add(new XElement("Platform", app.Element("Platform") == null || !new[]{GlobalVariables.Posix, GlobalVariables.Windows}.Contains(app.Element("Platform").Value) ? GlobalVariables.CurrentPlatform : app.Element("Platform").Value));
tmpAppsList.Last().Add(new XElement("Platform",
app.Element("Platform") == null ||
!new[] {GlobalVariables.Posix, GlobalVariables.Windows}.Contains(app.Element("Platform")
.Value)
? GlobalVariables.CurrentPlatform
: app.Element("Platform").Value));
XElement app1 = app;
if (tmpAppsList.Count(a => a.Element("ID").Value == app1.Element("ID").Value) > 1)
tmpAppsList.Where(a => a.Element("ID").Value == app.Element("ID").Value).Reverse()

View File

@ -17,12 +17,16 @@ namespace UpToolLib
}
set => _meta = value;
}
public static Version OnlineVersion => Version.Parse(Meta.Element("Version").Value);
public static Uri Installer => new Uri(Meta.Element("Installer").Value).TryUnshorten();
public static string InstallerHash => Meta.Element("InstallerHash").Value.ToUpper();
public static Uri App => new Uri(Meta.Element("File").Value).TryUnshorten();
public static string AppHash => Meta.Element("Hash").Value.ToUpper();
public static void Reload() => Reload(XDocument.Load(PathTool.InfoXml).Element("meta").Element("UpdateSource").Value);
public static void Reload() =>
Reload(XDocument.Load(PathTool.InfoXml).Element("meta").Element("UpdateSource").Value);
public static void Reload(string source) => Meta = XDocument.Load(source).Element("meta");
}
}