예제 #1
0
 private static void Start(string identifier, bool waitForExit)
 {
     RepoManagement.GetReposFromDisk();
     App[] apps = AppExtras.FindApps(identifier);
     if (apps.Length == 0)
     {
         Console.WriteLine("Package not found.");
     }
     else
     {
         App tmp = apps.First();
         if (tmp.Runnable)
         {
             Console.WriteLine($"Starting {tmp.Name}");
             Process tmp1 = AppExtras.RunApp(tmp);
             if (waitForExit)
             {
                 tmp1.WaitForExit();
             }
         }
         else
         {
             Console.WriteLine($"{tmp.Name} is not runnable");
         }
     }
     Console.WriteLine("Done!");
 }
예제 #2
0
 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);
     }
 }
예제 #3
0
 private static void Show(string identifier)
 {
     RepoManagement.GetReposFromDisk();
     App[] apps = AppExtras.FindApps(identifier);
     if (apps.Length == 0)
     {
         Console.WriteLine("Package not found.");
     }
     else
     {
         Console.WriteLine(apps.First());
     }
 }
예제 #4
0
 private static void List()
 {
     RepoManagement.GetReposFromDisk();
     Console.WriteLine(GlobalVariables.Apps.Where(s => (s.Value.Status & Status.Installed) == Status.Installed)
                       .ToStringTable(new[]
     {
         "Name", "State", "Guid"
     },
                                      u => u.Value.Name,
                                      u => u.Value.Local ? "Local" :
                                      (u.Value.Status & Status.Updatable) == Status.Updatable ? "Updatable" : "None",
                                      u => u.Key));
 }
예제 #5
0
파일: Program.cs 프로젝트: JFronny/UpTool2
        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();
        }
예제 #6
0
 private static void Search(string identifier)
 {
     RepoManagement.GetReposFromDisk();
     App[] apps = AppExtras.FindApps(identifier);
     Console.WriteLine($"Found {apps.Length} app(s)");
     if (apps.Length > 0)
     {
         Console.WriteLine(apps.ToStringTable(new[]
         {
             "Name", "Guid"
         },
                                              u => u.Name,
                                              u => u.Id));
     }
 }
예제 #7
0
 private static void Reinstall(string identifier, bool force)
 {
     RepoManagement.GetReposFromDisk();
     App[] apps = AppExtras.FindApps(identifier);
     if (apps.Length == 0)
     {
         Console.WriteLine("Package not found.");
     }
     else
     {
         App tmp = apps.First();
         Console.WriteLine($"Reinstalling {tmp.Name}");
         AppExtras.Update(tmp, force);
     }
     Console.WriteLine("Done!");
 }
예제 #8
0
        private static void DistUpgrade()
        {
            RepoManagement.GetReposFromDisk();
            foreach (KeyValuePair <Guid, App> app in GlobalVariables.Apps.Where(s =>
                                                                                (s.Value.Status & Status.Updatable) == Status.Updatable))
            {
                Console.WriteLine($"Updating {app.Value.Name}");
                AppExtras.Update(app.Value, false);
            }
#if !DEBUG
            if (Assembly.GetExecutingAssembly().GetName().Version < UpdateCheck.OnlineVersion)
            {
                Console.WriteLine("Updating self");
                Other.UpgradeSelf(false);
            }
#endif
            Console.WriteLine("Done!");
        }
예제 #9
0
 private static void Purge(string identifier)
 {
     RepoManagement.GetReposFromDisk();
     App[] apps = AppExtras.FindApps(identifier);
     if (apps.Length == 0)
     {
         Console.WriteLine("Package not found.");
     }
     else
     {
         App tmp = apps.First();
         if ((tmp.Status & Status.Installed) == Status.Installed)
         {
             Console.WriteLine($"Purging {tmp.Name}");
             AppExtras.Remove(tmp, true);
         }
         else
         {
             Console.WriteLine("Package is not installed");
         }
     }
     Console.WriteLine("Done!");
 }
예제 #10
0
 private static void Upgrade(string identifier, bool force)
 {
     RepoManagement.GetReposFromDisk();
     App[] apps = AppExtras.FindApps(identifier);
     if (apps.Length == 0)
     {
         Console.WriteLine("Package not found.");
     }
     else
     {
         App tmp = apps.First();
         if ((tmp.Status & Status.Updatable) == Status.Updatable)
         {
             Console.WriteLine($"Upgrading {tmp.Name}");
             AppExtras.Update(tmp, force);
         }
         else
         {
             Console.WriteLine("Package is up-to-date");
         }
     }
     Console.WriteLine("Done!");
 }
예제 #11
0
 private static void Install(string identifier, bool force)
 {
     RepoManagement.GetReposFromDisk();
     App[] apps = AppExtras.FindApps(identifier);
     if (apps.Length == 0)
     {
         if (File.Exists(identifier))
         {
             Console.WriteLine("Name:");
             string name = Console.ReadLine();
             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}\"");
         }
         else
         {
             Console.WriteLine("Package not found.");
             Console.WriteLine(identifier);
         }
     }
     else
     {
         App tmp = apps.First();
         if ((tmp.Status & Status.Installed) == Status.Installed)
         {
             Console.WriteLine("Package is already installed");
         }
         else
         {
             Console.WriteLine($"Installing {tmp.Name}");
             AppInstall.Install(tmp, true);
         }
     }
     Console.WriteLine("Done!");
 }
예제 #12
0
        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
        }
예제 #13
0
        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;
            }
        }