示例#1
0
        private void PrintScript(RegistryPackage script, RegistryPackageVersion version, IReadOnlyCollection <Script> localFiles)
        {
            Renderer.Write(script.Name, ConsoleColor.Green);
            Renderer.Write(" ");
            Renderer.Write($"v{version.Version}", ConsoleColor.Gray);
            var nonInstalledLocalFiles = localFiles.Where(l => !l.FullPath.StartsWith(Config.VirtAMate.PackagesFolder)).ToList();

            if (nonInstalledLocalFiles.Count > 0)
            {
                var filesSummary = nonInstalledLocalFiles.Select(l => l.FullPath).Select(Controller.GetDisplayPath).OrderBy(p => p.Length).ToList();
                Renderer.Write(" ");
                if (filesSummary.Count == 1)
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\"", ConsoleColor.DarkGray);
                }
                else
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\" and {filesSummary.Count - 1} others...", ConsoleColor.DarkGray);
                }
            }
            Renderer.Write(" ");
            Renderer.Write($"referenced by {Pluralize(localFiles.Sum(l => l.Scenes?.Count() ?? 0), "scene", "scenes")}", ConsoleColor.DarkCyan);
            var latestVersion = script.GetLatestVersion();

            if (version != latestVersion)
            {
                Renderer.Write($" [update available: v{latestVersion.Version}]", ConsoleColor.Yellow);
            }
            else
            {
                Renderer.Write($" [up to date]", ConsoleColor.Cyan);
            }
            Renderer.WriteLine();
        }
示例#2
0
 public void Deconstruct(out Registry registry, out RegistryPackage package, out RegistryPackageVersion version, out RegistryFile file)
 {
     registry = Registry;
     package  = Package;
     version  = Version;
     file     = File;
 }
示例#3
0
        public void CanGetLatestVersion()
        {
            RegistryPackageVersion version = TestFactory.RegVer("1.0.0");
            RegistryPackage        package = TestFactory.RegScript("script1", version);
            var registry = TestFactory.Reg(package);

            var success = registry.TryGetPackageVersion(RegistryPackageType.Scripts, "script1", null, out var context);

            Assert.That(success, Is.True);
            Assert.That(context.Registry, Is.SameAs(registry));
            Assert.That(context.Package, Is.SameAs(package));
            Assert.That(context.Version, Is.SameAs(version));
        }
示例#4
0
        private void PrintScript(RegistryPackage script, RegistryPackageVersion version, IReadOnlyCollection <LocalScriptFile> localFiles)
        {
            Renderer.Write(script.Name, ConsoleColor.Green);

            Renderer.Write(" ");
            Renderer.Write($"v{version.Version}", ConsoleColor.Gray);

            if (localFiles.Count > 0)
            {
                var filesSummary = localFiles.Select(l => l.FullPath).Select(Path.GetFileName).OrderBy(p => p.Length).ToList();
                Renderer.Write(" ");
                if (filesSummary.Count == 1)
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\"", ConsoleColor.DarkGray);
                }
                else
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\" and {filesSummary.Count - 1} others...", ConsoleColor.DarkGray);
                }
            }

            Renderer.Write(" ");
            Renderer.Write($"referenced by {Pluralize(localFiles.Sum(l => l.Scenes?.Count() ?? 0), "scene", "scenes")}", ConsoleColor.DarkCyan);

            var latestVersion = script.GetLatestVersion();

            if (version != latestVersion)
            {
                Renderer.Write($" [update available: v{latestVersion.Version}]", ConsoleColor.Yellow);
            }
            else
            {
                Renderer.Write($" [up to date]", ConsoleColor.Cyan);
            }

            var errors = localFiles.Max(l => l.Status);

            if (errors == LocalFileErrorLevel.Warning)
            {
                Renderer.Write(" [warnings]", ConsoleColor.Yellow);
            }
            else if (errors >= LocalFileErrorLevel.Error)
            {
                Renderer.Write(" [errors]", ConsoleColor.Red);
            }

            Renderer.WriteLine();
        }
示例#5
0
 private void PrintScriptToPackage(RegistrySavesMatch match, RegistryPackageVersion updateToVersion)
 {
     Renderer.Write($"Script ");
     Renderer.Write(Controller.GetDisplayPath(match.Local.FullPath), ConsoleColor.Blue);
     Renderer.Write($" is ");
     Renderer.Write($"{match.Script.Name} v{match.Version.Version}", ConsoleColor.Cyan);
     Renderer.Write($" > ");
     if (updateToVersion == null)
     {
         Renderer.Write($"already up to date", ConsoleColor.DarkGray);
         Renderer.WriteLine();
     }
     else
     {
         Renderer.Write($"new version available: v{updateToVersion.Version}", ConsoleColor.Magenta);
         Renderer.WriteLine();
         Renderer.WriteLine($"  Released {updateToVersion.Created.ToLocalTime().ToString("D")}: {updateToVersion.Notes ?? "No release notes"}");
     }
 }
示例#6
0
        public void DoesNotMatchByFilenameWhenMatchedByHash()
        {
            var saves = ResultFactory.SavesMap()
                        .WithScript(new Script($"{_vam}1.cs", "1"), out var local1)
                        .Build();
            RegistryFile           file    = ResultFactory.RegFile("1.cs", "1");
            RegistryPackageVersion version = ResultFactory.RegVer("1.0.0", file);
            RegistryPackage        script  = ResultFactory.RegScript("my-script", version);
            var registry = ResultFactory.Reg(script);

            var result = _handler.Match(saves, registry);

            PartyAssertions.AreDeepEqual(new RegistrySavesMatches
            {
                HashMatches = new[] { new RegistrySavesMatch {
                                          Script = script, Version = version, File = file, Local = local1
                                      } },
                FilenameMatches = new RegistrySavesMatch[0],
                NoMatches       = new Script[0]
            }, result);
        }
示例#7
0
        public async Task <LocalPackageInfo> GetInstalledPackageInfoAsync(string name, RegistryPackageVersion version)
        {
            var basePath = _fs.Path.GetFullPath(_packagesFolder, _savesDirectory);

            if (!basePath.StartsWith(_savesDirectory))
            {
                throw new UnauthorizedAccessException($"The packages folder must be within the saves directory: '{basePath}'");
            }
            var installPath = Path.Combine(basePath, name, version.Version);
            var files       = new List <LocalPackageInfo.InstalledFileInfo>();

            foreach (var file in version.Files.Where(f => !f.Ignore && f.Filename != null))
            {
                files.Add(await GetPackageFileInfo(installPath, file).ConfigureAwait(false));
            }
            return(new LocalPackageInfo
            {
                InstallFolder = basePath,
                Files = files.ToArray()
            });
        }
 public void Deconstruct(out Registry registry, out RegistryPackage package, out RegistryPackageVersion version)
 {
     registry = Registry;
     package  = Package;
     version  = Version;
 }
 public RegistryPackageVersionContext WithVersion(RegistryPackageVersion version)
 {
     return(Version == version ? this : new RegistryPackageVersionContext(Registry, Package, version));
 }
 public RegistryPackageVersionContext(Registry registry, RegistryPackage package, RegistryPackageVersion version)
 {
     Registry = registry ?? throw new System.ArgumentNullException(nameof(registry));
     Package  = package ?? throw new System.ArgumentNullException(nameof(package));
     Version  = version ?? throw new System.ArgumentNullException(nameof(version));
 }
示例#11
0
 public Task <LocalPackageInfo> GetInstalledPackageInfoAsync(string name, RegistryPackageVersion version)
 {
     return(new PackageStatusHandler(_fs, SavesDirectory, _config.VirtAMate.PackagesFolder)
            .GetInstalledPackageInfoAsync(name, version));
 }
示例#12
0
 public RegistryPackageFileContext(Registry registry, RegistryPackage package, RegistryPackageVersion version, RegistryFile file)
     : base(registry, package, version)
 {
     File = file ?? throw new System.ArgumentNullException(nameof(file));
 }