예제 #1
0
        public override Task Execute(Pipeline pipeline)
        {
            var resolvedArtifactPath = PathReference.ResolvePath(assemblyArtifactPath, pipeline, this);

            var definitionDatums = pipeline.Manifest.Data.OfType <AssemblyDefinitions>().ToArray();

            if (!definitionDatums.Any())
            {
                var scriptPath = UnityWebRequest.EscapeURL(AssetDatabase.GetAssetPath(MonoScript.FromScriptableObject(this)));
                pipeline.Log(LogLevel.Warning, $"No AssemblyDefinitions found, skipping.");
                return(Task.CompletedTask);
            }

            for (int i = 0; i < definitionDatums.Length; i++)
            {
                var datum = definitionDatums[i];
                if (!datum)
                {
                    continue;
                }

                var hasUnassignedDefinition = datum.definitions.Any(def => !(bool)def);
                if (hasUnassignedDefinition)
                {
                    pipeline.Log(LogLevel.Warning, $"AssemblyDefinitions with unassigned definition at index {i}");
                }
            }

            return(Task.CompletedTask);
        }
예제 #2
0
        public override string GetPath(PathReference output, Pipeline pipeline)
        {
            string resolvedPath = PathReference.ResolvePath(path, pipeline, this);
            string first        = Directory.EnumerateDirectories(resolvedPath, searchPattern, searchOption).First();

            return(first);
        }
예제 #3
0
        public override string GetPath(PathReference output, Pipeline pipeline)
        {
            string resolvedPath = PathReference.ResolvePath(path, pipeline, this);
            string first        = Directory.EnumerateDirectories(resolvedPath, searchPattern, searchOption)
                                  .FirstOrDefault() ?? string.Empty;

            return(first);
            //return Directory.EnumerateDirectories("Packages", "bbepis-BepInExPack*", SearchOption.TopDirectoryOnly).First();
        }
예제 #4
0
            public PathReference GetOrCreateChildPath(string name)
            {
                if (!_subPaths.TryGetValue(name, out var zpr))
                {
                    zpr = new PathReference();
                    _subPaths.Add(name, zpr);
                }

                return(zpr);
            }
예제 #5
0
        private void Initialize()
        {
            if (Directory.Exists(_root))
            {
                var files = Directory.GetFiles(_root, "*", SearchOption.AllDirectories);

                if (files.Length > 0)
                {
                    _rootZipDir = new PathReference();
                }

                foreach (var file in files)
                {
                    if (!_cacheNormalFiles && !file.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
                    {
                        // skip any files that are not .zip files if we do not cache them all
                        continue;
                    }

                    var current      = _rootZipDir;
                    var relativePath = file.ToLowerInvariant().MakeRelativePath(_root);
                    var parts        = relativePath.Split(PathSeparators, StringSplitOptions.RemoveEmptyEntries);

                    for (int i = 0; i < parts.Length; i++)
                    {
                        var part = parts[i];

                        if (i == parts.Length - 1)
                        {
                            if (part.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
                            {
                                // this is the zip file, read the metadata!
                                var start = current;

                                var zf = new ZipFile(file);
                                _zipFiles.Add(zf);

                                foreach (ZipEntry entry in zf)
                                {
                                    current = start;
                                    var internalPath  = entry.Name.Replace('/', '\\').ToLowerInvariant();
                                    var internalParts = internalPath.Split(PathSeparators, StringSplitOptions.RemoveEmptyEntries);
                                    for (int j = 0; j < internalParts.Length; j++)
                                    {
                                        var internalPart = internalParts[j];
                                        if (j == internalParts.Length - 1)
                                        {
                                            if (entry.IsFile)
                                            {
                                                current.AddFile(internalPart, new FileEntry(internalPath, file, zf, entry));
                                            }
                                            else
                                            {
                                                current = current.GetOrCreateChildPath(internalPart);
                                            }
                                        }
                                        else
                                        {
                                            current = current.GetOrCreateChildPath(internalPart);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                current.AddFile(part, new FileEntry(file));
                            }
                        }
                        else
                        {
                            current = current.GetOrCreateChildPath(part);
                        }
                    }
                }
            }
        }
예제 #6
0
파일: Path.cs 프로젝트: sladen/openbve2
 // static functions
 /// <summary>Determines whether two path references are equal.</summary>
 /// <param name="a">The first path reference.</param>
 /// <param name="b">The second path reference.</param>
 /// <returns>A boolean indicating whether the path references are equal.</returns>
 public static bool Equals(PathReference a, PathReference b)
 {
     if (a == null & b == null) {
         return true;
     } else if (a == null | b == null) {
         return false;
     } if (a is FileReference & b is FileReference) {
         FileReference x = (FileReference)a;
         FileReference y = (FileReference)b;
         return x.Path == y.Path;
     } else if (a is FolderReference & b is FolderReference) {
         FolderReference x = (FolderReference)a;
         FolderReference y = (FolderReference)b;
         return x.Path == y.Path;
     } else {
         return false;
     }
 }
예제 #7
0
 public override string GetPath(PathReference output, Pipeline pipeline) => "ThunderKit";
예제 #8
0
 public override string GetPath(PathReference output, Pipeline pipeline) => ThunderKitSettings.GetOrCreateSettings <ThunderKitSettings>().GameExecutable;
예제 #9
0
 public override string GetPath(PathReference output, Pipeline pipeline)
 {
     return(pipeline.Manifest.Identity.Version);
 }
예제 #10
0
 public override string GetPath(PathReference output, Pipeline pipeline) => AssetDatabase.GetAssetPath(Asset);
 public override string GetPath(PathReference output, Pipeline pipeline) => pipeline.Manifest.Data.OfType <ThunderstoreManifest>().FirstOrDefault().versionNumber;
예제 #12
0
 public override string GetPath(PathReference output, Pipeline pipeline) => Value;
예제 #13
0
 public override string GetPath(PathReference output, Pipeline pipeline) => reference.GetPath(pipeline);
예제 #14
0
 public override string GetPath(PathReference output, Pipeline pipeline) => pipeline.Manifest.Data.OfType <ManifestIdentity>().First().Name;
예제 #15
0
 public override string GetPath(PathReference output, Pipeline pipeline) => pipeline.Manifest.name;
예제 #16
0
 public override string GetPath(PathReference output, Pipeline pipeline) => value.Resolve(pipeline, this);
예제 #17
0
        public override Task Execute(Pipeline pipeline)
        {
            AssetDatabase.SaveAssets();

            var mainManifest = pipeline.Manifest;
            var folderTrees  = mainManifest.Data.OfType <LanguageFolderTree>().ToList();

            var hasValidTreeFolders = folderTrees.Any(ft => ft.languageFolders.Any(lf => !lf.languageName.IsNullOrEmptyOrWhitespace() && lf.languageFiles.Any()));

            if (!hasValidTreeFolders)
            {
                var scriptPath = UnityWebRequest.EscapeURL(AssetDatabase.GetAssetPath(MonoScript.FromScriptableObject(this)));
                pipeline.Log(LogLevel.Warning, $"No valid LanguageTreeFolder defined, skipping {MarkdownUtils.GenerateAssetLink(nameof(StageLanguageFiles), scriptPath)} PipelineJob");
                return(Task.CompletedTask);
            }

            var languageArtifactPath = PathReference.ResolvePath(LanguageArtifactPath, pipeline, this);

            IOUtils.EnsureDirectory(languageArtifactPath);

            var allLanguageFiles = folderTrees
                                   .SelectMany(lft => lft.languageFolders)
                                   .SelectMany(lf => lf.languageFiles)
                                   .ToArray();

            var logBuilder = new List <string>();

            if (CheckForInvalidFiles(allLanguageFiles, out var invalidFiles))
            {
                foreach (var(asset, error) in invalidFiles)
                {
                    var scriptPath = UnityWebRequest.EscapeURL(AssetDatabase.GetAssetPath(MonoScript.FromScriptableObject(this)));
                    switch (error)
                    {
                    case InvalidLangfile.InvalidExtension:
                        logBuilder.Add($"* File {MarkdownUtils.GenerateAssetLink(asset)} has an invalid extension ({Path.GetExtension(AssetDatabase.GetAssetPath(asset))}), extension should be either **\".txt\"** or **\".json\"**, skipping {MarkdownUtils.GenerateAssetLink(nameof(StageLanguageFiles), scriptPath)} PipelineJob");
                        break;

                    case InvalidLangfile.FormatError:
                        logBuilder.Add($"* File {MarkdownUtils.GenerateAssetLink(asset)} has JSON related format errors, skipping {MarkdownUtils.GenerateAssetLink(nameof(StageLanguageFiles), scriptPath)} PipelineJob");
                        break;

                    case InvalidLangfile.NodeError:
                        logBuilder.Add($"* File {MarkdownUtils.GenerateAssetLink(asset)} has an invalid JSON Node, the name for the json dictionary needs to be **\"strings\"**, skipping {MarkdownUtils.GenerateAssetLink(nameof(StageLanguageFiles), scriptPath)} PipelineJob");
                        break;
                    }
                }
                pipeline.Log(LogLevel.Warning, $"Found a total of {invalidFiles.Length} invalid language files on manifest {MarkdownUtils.GenerateAssetLink(mainManifest)}", logBuilder.ToArray());
                logBuilder.Clear();
                return(Task.CompletedTask);
            }

            foreach (var languageFolderTree in folderTrees)
            {
                string rootLanguageFolderPath = Path.Combine(languageArtifactPath, languageFolderTree.rootFolderName);
                IOUtils.EnsureDirectory(rootLanguageFolderPath);

                foreach (LanguageFolder languageFolder in languageFolderTree.languageFolders)
                {
                    string langFolder = Path.Combine(rootLanguageFolderPath, languageFolder.languageName);
                    IOUtils.EnsureDirectory(langFolder);
                    foreach (TextAsset asset in languageFolder.languageFiles)
                    {
                        string relativeAssetPath = AssetDatabase.GetAssetPath(asset);
                        string fullAssetPath     = Path.GetFullPath(relativeAssetPath);
                        string fullAssetName     = Path.GetFileName(fullAssetPath);
                        string destPath          = Path.Combine(langFolder, fullAssetName);
                        FileUtil.ReplaceFile(relativeAssetPath, destPath);
                        logBuilder.Add($"* Moved {MarkdownUtils.GenerateAssetLink(asset)} from ***{relativeAssetPath}*** to ***{destPath}***");
                    }
                }
            }
            pipeline.Log(LogLevel.Information, $"Finished moving language files to {LanguageArtifactPath} ({languageArtifactPath})", logBuilder.ToArray());
            logBuilder.Clear();

            foreach (var languageFolderTree in folderTrees)
            {
                var languageNames = languageFolderTree.languageFolders.Select(lf => lf.languageName).ToArray();
                foreach (var outputPath in languageFolderTree.StagingPaths.Select(path => path.Resolve(pipeline, this)))
                {
                    foreach (string dirPath in Directory.GetDirectories(languageArtifactPath, "*", SearchOption.AllDirectories))
                    {
                        IOUtils.EnsureDirectory(dirPath.Replace(languageArtifactPath, outputPath));
                    }

                    foreach (string filePath in Directory.GetFiles(languageArtifactPath, "*", SearchOption.AllDirectories))
                    {
                        bool found = false;
                        foreach (var languageName in languageNames)
                        {
                            if (filePath.IndexOf(languageName, StringComparison.OrdinalIgnoreCase) >= 0)
                            {
                                found = true;
                                break;
                            }
                        }
                        if (!found)
                        {
                            continue;
                        }

                        string destFileName = filePath.Replace(languageArtifactPath, outputPath);
                        Directory.CreateDirectory(Path.GetDirectoryName(destFileName));
                        FileUtil.ReplaceFile(filePath, destFileName);
                        logBuilder.Add($"* Moved {Path.GetFileName(filePath)} from ***{filePath}*** to ***{destFileName}***");
                    }
                }
            }
            pipeline.Log(LogLevel.Information, $"Finished moving language files to manifest's Staging Paths.", logBuilder.ToArray());
            return(Task.CompletedTask);
        }
 public override string GetPath(PathReference output, Pipeline pipeline) => System.IO.Directory.GetCurrentDirectory();