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);
        }
Exemplo n.º 3
0
        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);
        }