Example #1
0
        private void LoadJarMetadata()
        {
            var knownMetadata = new[]
            {
                "rt",                //Base Java classes
                "spigot-api-1.14.4", //Spigot API classes
                "skript-mirror",     //skript-mirror classes
                "Skript",            //Skript classes
            };

            var archives = new List <JarArchive>();

            foreach (var metaName in knownMetadata)
            {
                var assembly     = typeof(SkriptWorkspace).Assembly;
                var resourceName = assembly.GetManifestResourceNames()
                                   .SingleOrDefault(str => str.EndsWith($"{metaName}.simeta"));
                if (resourceName == null)
                {
                    continue;
                }

                using var stream = assembly.GetManifestResourceStream(resourceName);
                if (stream == null)
                {
                    continue;
                }

                //Load metadata
                archives.Add(MetadataIo.ReadArchiveMetadataFromStream(stream).ToDataClass());
            }

            archives.ForEach(a => a.LoadDataProperties());
        }
Example #2
0
        static void Main(string[] args)
        {
            var parser = new Parser(with => with.HelpWriter = null);
            var result = parser.ParseArguments <Options>(args);

            var helpText = HelpText.AutoBuild(result, h =>
            {
                h.Heading   = "SkriptInsight Metadata Extractor - Console Tool";
                h.Copyright = "Copyright (c) 2019 SkriptInsight";
                return(HelpText.DefaultParsingErrorsHandler(result, h));
            }, e => e);

            result
            .WithNotParsed(errs => Console.WriteLine(helpText))
            .WithParsed(o =>
            {
                if (o.None)
                {
                    currentLevel = LogLevel.None;
                }
                else if (o.Verbose)
                {
                    currentLevel = LogLevel.Verbose;
                }
                else if (o.Debug)
                {
                    currentLevel = LogLevel.Debug;
                }


                MetadataIo.LogMessage += (_, s) => Log(s.level, s.message);

                if (File.Exists(JreMetadataFile))
                {
                    //Load the JRE's rt metadata from an existing file.
                    var metaJre = MetadataIo.ReadArchiveMetadata("jre-rt.simeta");
                    var dataJre = metaJre.ToDataClass();
                    dataJre.LoadDataProperties();
                }
                else
                {
                    //Try to load it from the java install
                    if (!MetadataExtractor.ReadJreStandardFile(out _))
                    {
                        Log(
                            "ERROR: Unable to find the rt.jar file and there's no metadata in the current working directory!");
                        Log("ERROR: Do you have the JAVA_HOME variable setup correctly?");
                        return;
                    }
                }

                GC.Collect();

                foreach (var s in o.ClassPath)
                {
                    if (!File.Exists(s))
                    {
                        Log($"WARN: File \"{s}\" doesn't exist and was skipped.");
                        continue;
                    }

                    switch (Path.GetExtension(s))
                    {
                    case JarExtension:
                        MetadataExtractor.ReadFile(s);
                        break;

                    case SkriptInsightMetaExtension:
                        MetadataIo.ReadArchiveMetadata(s).ToDataClass();
                        break;

                    default:
                        Log($"WARN: File \"{s}\" has an unknown file extension and got skipped.");
                        break;
                    }
                }

                foreach (var s in o.Files)
                {
                    if (!File.Exists(s))
                    {
                        Log($"WARN: File \"{s}\" doesn't exist and was skipped.");
                        continue;
                    }

                    var finalFileName = Path.Combine(o.OutputDirectory,
                                                     Path.GetFileName(Path.ChangeExtension(s, SkriptInsightMetaExtension)));

                    if (File.Exists(finalFileName))
                    {
                        if (o.SkipExistingFiles)
                        {
                            Log(
                                $"INFO: Skipping writing file \"{s}\" because it already exists and the \"skip-existing\" option is enabled.");
                            continue;
                        }

                        File.Delete(finalFileName);
                    }

                    LogVerbose($"Starting to write archive metadata for \"{finalFileName}\"");
                    MetadataIo.WriteArchiveMetadata(finalFileName, MetadataExtractor.ReadFile(s).ToMetadata());
                    LogVerbose($"Finished writing archive metadata for \"{finalFileName}\"");
                    GC.Collect();
                }

                Log("Finished processing all files.");
            });
        }