edge-install/Program.Renderers.cs
Robert Morrison 60e06b2144
Another bad commit
Lots of changes here...

- Removed code using RecursivExtractor due to bad usage of /tmp
  Note: the code that used RecursiveExtractor may not have been in the
  previous commit
- Created _functioning_ implementation of DebUnpacker
- Restructured Project layout.

TODO:
- Possibly rewrite how the DebUnpacker works to have the file contents
  part of an entry.
- Further restructuring and refactoring to make the code a little
  neater.
- Add code for the final unpack steps Un-XZ -> untar -> write to disk
- Add code to install
- Add code for modified post-install pre-remove etc..
  This is kinda needed to ensure proper system integration of new
  packages.
2023-06-08 04:36:31 +01:00

151 lines
5.5 KiB
C#

using Spectre.Console;
namespace EdgeInstaller;
public static partial class EdgeInstall
{
static void RenderPackageAsTable(Package package)
{
Table Package = new Table()
.Centered()
.Border(TableBorder.Rounded)
.HideHeaders()
.Title("Package To Install");
AnsiConsole.Live(Package)
.AutoClear(false)
.Start(context =>
{
Package.AddColumns("", "");
context.Refresh();
Thread.Sleep(250);
Package.AddRow("[bold yellow]Package Name : [/]", $"{package.PackageName}");
context.Refresh();
Thread.Sleep(100);
Package.AddRow("[bold yellow]Version : [/]", $"{package.Version.ToString()}");
context.Refresh();
Thread.Sleep(100);
Package.AddRow("[bold yellow]Size : [/]", $"{package.Size.ToString()}B");
context.Refresh();
Thread.Sleep(100);
Package.AddRow("[bold yellow]SHA256 : [/]", $"{package.SHA256}");
context.Refresh();
Thread.Sleep(100);
Package.AddRow("[bold yellow]Filename : [/]", $"{package.Filename}");
context.Refresh();
});
}
static void RenderPackagesTable(List<Package> Packages)
{
Table PackageTable = new Table()
.Centered()
.Expand()
.Border(TableBorder.Rounded)
.Title("Packages");
AnsiConsole.Live(PackageTable)
.AutoClear(false)
.Start(context =>
{
PackageTable
.AddColumn("[bold]PackageName[/]")
.AddColumn("[bold]Version[/]")
.AddColumn("[bold]Size (bytes)[/]")
.AddColumn("[bold]SHA256[/]")
.AddColumn("[bold]Filename[/]");
context.Refresh();
Thread.Sleep(500);
foreach (var pack in Packages)
{
PackageTable.AddRow(
FormatPackageName(pack.PackageName),
$"[i blue]{pack.Version.ToString()}[/]",
$"[grey]{pack.Size.ToString()}[/][b]B[/]",
pack.SHA256,
pack.Filename);
context.Refresh();
Thread.Sleep(100);
}
});
}
static string FormatPackageName(string name)
{
if (name.Contains("dev"))
{
return $"[red]{name}[/]";
}
if (name.Contains("beta"))
{
return $"[yellow]{name}[/]";
}
if (name.Contains("stable"))
{
return $"[green]{name}[/]";
}
return name;
}
static void RenderReleaseTable(ReleaseData data)
{
// Lets output this ReleaseData now
Table ReleaseTable = new Table()
.Centered()
.Border(TableBorder.Rounded)
.Expand()
.Title("Release Data");
AnsiConsole.Live(ReleaseTable)
.AutoClear(false)
.Start(context =>
{
ReleaseTable.AddColumn("[bold]Field[/]");
ReleaseTable.AddColumn("[bold]Value[/]");
context.Refresh();
Thread.Sleep(500);
ReleaseTable.AddRow("[bold yellow]Date:[/]", $"[blue]{data.Date:R}[/]");
context.Refresh();
Thread.Sleep(500);
Table archs = new Table()
.Centered()
.Border(TableBorder.None)
.HideFooters()
.HideHeaders()
.AddColumn(new TableColumn(Text.Empty));
ReleaseTable.AddRow(new Markup("[bold yellow]Architectures:[/]"), archs);
foreach (var arch in data.Architectures)
{
archs.AddRow(arch);
context.Refresh();
Thread.Sleep(250);
}
Table PackageFilesTable = new Table()
.Centered()
.Border(TableBorder.Square)
.BorderColor(Color.Red)
.AddColumn("[bold]Filename[/]")
.AddColumn("[bold]Checksum[/]")
.AddColumn("[bold]Size[/]");
ReleaseTable.AddRow(
new Markup("[bold yellow]Package Files:[/]"),
PackageFilesTable);
context.Refresh();
foreach (var PackageFile in data.PackageFiles)
{
PackageFilesTable.AddRow(PackageFile.filename, PackageFile.Checksum, PackageFile.size.ToString());
context.Refresh();
Thread.Sleep(250);
}
});
}
}