Пример #1
0
        public static CPackage *pkg_load_file(byte *pathPtr)
        {
            var environment = new NativeEnvironment();

            try
            {
                if (!TryGetExistingFilePath(pathPtr, out var path))
                {
                    return(null);
                }

                using (var stream = File.OpenRead(path))
                    using (var binaryReader = new BinaryReader(stream, Encoding.UTF8))
                    {
                        var package  = _packageReader.ReadFrom(binaryReader);
                        var cpackage = environment.ConvertToCPackage(package);

                        _environments[new IntPtr(cpackage)] = environment;

                        return(cpackage);
                    }
            }
            catch (Exception exception)
            {
                HandleException(exception);
                environment.Dispose();
                return(null);
            }
        }
Пример #2
0
        private static void ExtractPkg(FileInfo file, bool appendFolderName = false, string defaultProjectName = "")
        {
            Console.WriteLine($"\r\n### Extracting package: {file.FullName}");

            // Load package
            Package package;

            using (var reader = new BinaryReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read)))
            {
                package = _packageReader.ReadFrom(reader);
            }

            // Get output directory
            string outputDirectory;
            var    preview = string.Empty;

            if (appendFolderName)
            {
                GetProjectFolderNameAndPreviewImage(file, defaultProjectName, out outputDirectory, out preview);
            }
            else
            {
                outputDirectory = _options.OutputDirectory;
            }

            // Extract package entries
            var entries = FilterEntries(package.Entries);

            foreach (var entry in entries)
            {
                ExtractEntry(entry, ref outputDirectory);
            }

            // Copy project files project.json/preview image
            if (!_options.CopyProject || _options.SingleDir || file.Directory == null)
            {
                return;
            }

            var files = file.Directory.GetFiles().Where(x =>
                                                        x.Name.Equals(preview, StringComparison.OrdinalIgnoreCase) ||
                                                        ProjectFiles.Contains(x.Name, StringComparer.OrdinalIgnoreCase));

            CopyFiles(files, outputDirectory);
        }
Пример #3
0
        private static void InfoPkg(FileInfo file, string name)
        {
            var projectInfo = GetProjectInfo(file);

            if (!MatchesFilter(projectInfo))
            {
                return;
            }

            Console.WriteLine($"\r\n### Package info: {name}");

            if (projectInfo != null && _projectInfoToPrint?.Length > 0)
            {
                IEnumerable <string> projectInfoEnumerator;

                if (_projectInfoToPrint.Length == 1 && _projectInfoToPrint[0] == "*")
                {
                    projectInfoEnumerator = Helper.GetPropertyKeysForDynamic(projectInfo);
                }
                else
                {
                    projectInfoEnumerator = Helper.GetPropertyKeysForDynamic(projectInfo);
                    projectInfoEnumerator = projectInfoEnumerator.Where(x =>
                                                                        _projectInfoToPrint.Contains(x, StringComparer.OrdinalIgnoreCase));
                }

                foreach (var key in projectInfoEnumerator)
                {
                    if (projectInfo[key] == null)
                    {
                        Console.WriteLine(key + @": null");
                    }
                    else
                    {
                        Console.WriteLine(key + @": " + projectInfo[key].ToString());
                    }
                }
            }

            if (_options.PrintEntries)
            {
                Console.WriteLine("Package entries:");

                Package package;
                using (var reader = new BinaryReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read)))
                {
                    package = _reader.ReadFrom(reader);
                }

                var entries = package.Entries;

                if (_options.Sort)
                {
                    if (_options.SortBy == "extension")
                    {
                        entries.Sort((a, b) =>
                                     String.Compare(a.FullPath, b.FullPath, StringComparison.OrdinalIgnoreCase));
                    }
                    else if (_options.SortBy == "size")
                    {
                        entries.Sort((a, b) => a.Length.CompareTo(b.Length));
                    }
                    else
                    {
                        entries.Sort((a, b) =>
                                     String.Compare(a.FullPath, b.FullPath, StringComparison.OrdinalIgnoreCase));
                    }
                }

                foreach (var entry in entries)
                {
                    Console.WriteLine(@"* " + entry.FullPath + $@" - {entry.Length} bytes");
                }
            }
        }