void CheckPackageStatus(Context context, string packageCacheDir, AndroidPackage pkg, List <AndroidPackage> toDownload) { Log.StatusLine($" {context.Characters.Bullet} Installing ", pkg.Component.Name, tailColor: ConsoleColor.White); if (File.Exists(pkg.LocalPackagePath)) { if ((RefreshSdk && !IsNdk(pkg.Component)) || (RefreshNdk && IsNdk(pkg.Component))) { LogStatus("Reinstall requested, deleting cache", 4, ConsoleColor.Magenta); Utilities.DeleteFile(pkg.LocalPackagePath); toDownload.Add(pkg); } else { Log.DebugLine($"Component '{pkg.Component.Name}' package exists: {pkg.LocalPackagePath}"); LogStatus("already downloaded", 4, Log.InfoColor); } } else { Log.DebugLine($"Component '{pkg.Component.Name}' package not downloaded yet: {pkg.LocalPackagePath}"); LogStatus("not downloaded yet", 4, ConsoleColor.Magenta); toDownload.Add(pkg); } }
async Task Unpack(Context context, string tempDirRoot, AndroidPackage pkg) { Log.StatusLine(PadStatus($"unpacking {pkg.PackageName} to ", 4), pkg.DestinationDir, tailColor: Log.DestinationColor); string sevenZip = context.Tools.SevenZipPath; Log.DebugLine($"7z binary path: {sevenZip}"); string tempDir = Path.Combine(tempDirRoot, Path.GetRandomFileName()); if (!await Utilities.Unpack(pkg.LocalPackagePath, tempDir)) { throw new InvalidOperationException($"Failed to unpack {pkg.LocalPackagePath}"); } if (pkg.Component.NoSubdirectory) { Utilities.MoveDirectoryContentsRecursively(tempDir, pkg.DestinationDir); return; } // There should be just a single subdirectory List <string> subdirs = Directory.EnumerateDirectories(tempDir).ToList(); if (subdirs.Count > 1) { throw new InvalidOperationException($"Unexpected contents layout of Android component '{pkg.Component.Name}' - expected a single subdirectory, instead found {subdirs.Count}"); } Utilities.MoveDirectoryContentsRecursively(subdirs [0], pkg.DestinationDir); }
void CheckPackageStatus(Context context, string packageCacheDir, AndroidPackage pkg, List <AndroidPackage> toDownload) { Log.StatusLine($" {context.Characters.Bullet} Installing ", pkg.Component.Name, tailColor: ConsoleColor.White); if (File.Exists(pkg.LocalPackagePath)) { Log.DebugLine($"Component '{pkg.Component.Name}' package exists: {pkg.LocalPackagePath}"); LogStatus("already downloaded", 4, Log.InfoColor); } else { Log.DebugLine($"Component '{pkg.Component.Name}' package not downloaded yet: {pkg.LocalPackagePath}"); LogStatus("not downloaded yet", 4, ConsoleColor.Magenta); toDownload.Add(pkg); } }
void Check(Context context, string packageCacheDir, string sdkRoot, AndroidToolchainComponent component, List <AndroidPackage> toInstall, int padLeft) { Log.StatusLine($" {context.Characters.Bullet} Checking ", component.Name, tailColor: ConsoleColor.White); const string statusMissing = "missing"; const string statusOutdated = "outdated"; const string statusInstalled = "installed"; string path = GetDestinationDir(component, sdkRoot); Log.DebugLine($"Checking if {component.Name} exists in {path}"); bool missing; if (IsInstalled(component, path, out missing)) { LogStatus(statusInstalled, padLeft, Log.InfoColor); return; } if (missing) { LogStatus(statusMissing, padLeft, ConsoleColor.Magenta); } else { LogStatus(statusOutdated, padLeft, ConsoleColor.DarkYellow); } string packageName = $"{component.Name}.zip"; var pkg = new AndroidPackage { Component = component, PackageName = packageName, Url = GetPackageUrl(component, packageName), LocalPackagePath = Path.Combine(packageCacheDir, packageName), DestinationDir = GetDestinationDir(component, sdkRoot), }; toInstall.Add(pkg); }