public MainForm() { InitializeComponent(); _tasks = new List <IAppTask>(); _help = MainForm_HelpRequested; HelpRequested += _help; filterBox.DataSource = Enum.GetValues(typeof(Status)); if (Program.Online) { RepoManagement.FetchRepos(); } else { MessageBox.Show("Starting in offline mode!"); controls_reload.Enabled = false; filterBox.Enabled = false; filterBox.SelectedIndex = 2; } Program.SetSplash(8, "Reloading data"); ReloadElements(); if (!Directory.Exists(PathTool.AppsPath)) { Directory.CreateDirectory(PathTool.AppsPath); } }
private static void Install(bool noPrep) { WebClient client = new WebClient(); Console.WriteLine("Downloading metadata"); UpdateCheck.Reload("https://github.com/JFronny/UpTool2/releases/latest/download/meta.xml"); Console.WriteLine("Downloading binary"); byte[] dl = client.DownloadData(UpdateCheck.App); Console.WriteLine("Verifying integrity"); using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider()) { 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} Online: {UpdateCheck.AppHash}"); } } Console.WriteLine("Extracting"); if (Directory.Exists(PathTool.GetRelative("Install"))) { foreach (string file in Directory.GetFiles(PathTool.GetRelative("Install"))) { File.Delete(file); } foreach (string dir in Directory.GetDirectories(PathTool.GetRelative("Install"))) { if (Path.GetFileName(dir) != "tmp") { Directory.Delete(dir, true); } } } Directory.CreateDirectory(PathTool.GetRelative("Install")); using (MemoryStream ms = new MemoryStream(dl)) { using ZipArchive ar = new ZipArchive(ms); ar.ExtractToDirectory(PathTool.GetRelative("Install"), true); } if (noPrep) { return; } Console.WriteLine("Preparing Repos"); XmlTool.FixXml(); RepoManagement.FetchRepos(); }
private static void Update() { Console.WriteLine("Fetching Repos..."); RepoManagement.FetchRepos(); RepoManagement.GetReposFromDisk(); Console.WriteLine(); IEnumerable <App> tmp = GlobalVariables.Apps.Where(s => (s.Value.Status & Status.Updatable) == Status.Updatable).Select(s => s.Value); IEnumerable <App> apps = tmp as App[] ?? tmp.ToArray(); int updatableCount = apps.Count(); Console.WriteLine(updatableCount == 0 ? "All up-to-date" : $@"Found {updatableCount} Updates: {string.Join(Environment.NewLine, apps.Select(s => $"- {s.Name} ({s.Version})"))}"); #if !DEBUG Version vLocal = Assembly.GetExecutingAssembly().GetName().Version; Version vOnline = UpdateCheck.OnlineVersion; if (vLocal < vOnline) { Console.WriteLine($"uptool is outdated ({vLocal} vs {vOnline}), update using \"uptool upgrade-self\""); } #endif }
private void install_Click(object sender, EventArgs e) { log.Visible = false; try { progress.Visible = true; WebClient client = new WebClient(); Step(1, "Downloading metadata"); XElement meta = XDocument.Load("https://github.com/JFronny/UpTool2/releases/latest/download/meta.xml") .Element("meta"); Step(2, "Downloading binary"); byte[] dl = client.DownloadData(meta.Element("File").Value); Step(3, "Verifying integrity"); using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider()) { 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: Package: {pkgHash} Online: {meta.Element("Hash").Value.ToUpper()}"); } } Step(4, "Extracting"); if (Directory.Exists(PathTool.GetRelative("Install"))) { Directory.Delete(PathTool.GetRelative("Install"), true); } Directory.CreateDirectory(PathTool.GetRelative("Install")); using (MemoryStream ms = new MemoryStream(dl)) { using ZipArchive ar = new ZipArchive(ms); ar.ExtractToDirectory(PathTool.GetRelative("Install"), true); } Step(5, "Creating shortcut"); Shortcut.Make(PathTool.GetRelative("Install", "UpTool2.exe"), 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, updateAppsBox.Checked ? "uptool dist-upgrade" : "uptool upgrade-self"); } else if (_rkApp.GetValue(AppName) != null) { _rkApp.DeleteValue(AppName, false); } } Step(8, "Done!"); } catch (Exception ex) { Step(progress.Value, $"Failed!{Environment.NewLine}{ex}"); BackColor = Color.Red; processLabel.Text = "Failed"; new Thread(() => { Thread.Sleep(1000); Invoke(new Action(() => { BackColor = SystemColors.Control; progress.Visible = false; })); }).Start(); } finally { log.Visible = true; } }