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.
151 lines
5.5 KiB
C#
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);
|
|
}
|
|
});
|
|
}
|
|
}
|