示例#1
0
        public void IsValidWhenTheMinimumNecessaryInformationAreThere()
        {
            var hdasset = new HdAsset();

            using var stream = new MemoryStream();
            hdasset.Write(stream);

            Assert.True(HdAsset.IsValid(stream.SetPosition(0)));
        }
示例#2
0
        public Stream FileOpen(string fileName)
        {
            var stream = _innerDataContext.FileOpen(fileName);

            if (stream == null)
            {
                return(null);
            }

            return(HdAsset.Read(stream).Stream);
        }
示例#3
0
        public void WriteBackTheSameReadStream() => Helpers.UseAsset("ps4archive.bin", stream =>
        {
            Helpers.AssertStream(stream, x =>
            {
                var asset = HdAsset.Read(stream);

                var outStream = new MemoryStream();
                asset.Write(outStream);

                return(outStream);
            });
        });
示例#4
0
        public void IsNotValidWhenTheInnerStreamLengthIsTooBig()
        {
            var hdasset = new HdAsset();

            hdasset.Stream = new MemoryStream(new byte[] { 2, 3, 4, 5, 6, 7, 8 });

            using var stream = new MemoryStream();
            hdasset.Write(stream);

            stream.SetLength(stream.Length - 1);

            Assert.False(HdAsset.IsValid(stream.SetPosition(0)));
        }
示例#5
0
        public void IsNotValidIfThereAreTooManyHdAssets()
        {
            var hdasset = new HdAsset();

            hdasset.Stream  = new MemoryStream(new byte[] { 2, 3, 4, 5, 6, 7, 8 });
            hdasset.Entries = Enumerable
                              .Range(0, 1024)
                              .Select(x => new HdAsset.Entry()
            {
                Name   = "Test",
                Stream = new MemoryStream()
            })
                              .ToList();

            using var stream = new MemoryStream();
            hdasset.Write(stream);

            stream.SetLength(stream.Length - 1);

            Assert.False(HdAsset.IsValid(stream.SetPosition(0)));
        }
示例#6
0
            protected void OnExecute(CommandLineApplication app)
            {
                var prefix = Prefix ?? DefaultPrefix;

                foreach (var filePath in GetFiles(Input, Recursive, prefix))
                {
                    using (var stream = File.OpenRead(filePath))
                    {
                        HdAsset asset;

                        try
                        {
                            // Avoid to crash on files that are not a ReMIX asset
                            asset = HdAsset.Read(stream);
                        }
                        catch
                        {
                            // Not a ReMIX asset
                            continue;
                        }

                        var directoryName = Path.GetDirectoryName(filePath);
                        Console.Write(filePath);

                        foreach (var entry in asset.Entries)
                        {
                            var outDir      = Path.GetFileNameWithoutExtension(filePath);
                            var outFileName = Path.Combine(directoryName, $"{prefix}{outDir}", entry.Name);
                            Directory.CreateDirectory(Path.GetDirectoryName(outFileName));

                            using (var outStream = File.Create(outFileName))
                            {
                                entry.Stream.Position = 0;
                                entry.Stream.CopyTo(outStream);
                            }
                        }
                    }
                }
            }
示例#7
0
            protected void OnExecute(CommandLineApplication app)
            {
                foreach (var filePath in GetFiles(Input, Recursive, DefaultPrefix))
                {
                    HdAsset asset;
                    using (var stream = File.OpenRead(filePath))
                    {
                        try
                        {
                            // Avoid to crash on files that are not a ReMIX asset
                            asset = HdAsset.Read(stream);
                        }
                        catch
                        {
                            // Not a ReMIX asset
                            continue;
                        }
                    }

                    using (var stream = File.Create(filePath))
                        asset.Stream.CopyTo(stream);
                }
            }
示例#8
0
        private static void UnpackFile(string filePath)
        {
            var directoryName = Path.GetDirectoryName(filePath);

            Console.Write($"{filePath}... ");

            using (var stream = File.OpenRead(filePath))
            {
                HdAsset asset;

                try
                {
                    // Avoids to throw a false positive to files that are not an HdAsset
                    asset = HdAsset.Read(stream);
                }
                catch
                {
                    Console.WriteLine("ERROR!");
                    return;
                }

                foreach (var entry in asset.Entries)
                {
                    var outDir      = Path.GetFileNameWithoutExtension(filePath);
                    var outFileName = Path.Combine(directoryName, $"{Prefix}{outDir}", entry.Name);
                    Directory.CreateDirectory(Path.GetDirectoryName(outFileName));

                    using (var outStream = File.Create(outFileName))
                    {
                        entry.Stream.Position = 0;
                        entry.Stream.CopyTo(outStream);
                    }
                }
            }

            Console.WriteLine("Ok!");
        }
示例#9
0
        public void IsNotValidWhenTheHeaderSizeIsTooSmall()
        {
            var stream = new MemoryStream(new byte[15]);

            Assert.False(HdAsset.IsValid(stream));
        }
示例#10
0
 public void IsValid() => Helpers.UseAsset("ps4archive.bin", stream =>
 {
     Assert.True(HdAsset.IsValid(stream));
 });
示例#11
0
 public void CannotAssignNullEntriesListStream()
 {
     Assert.Throws <ArgumentNullException>(() => HdAsset.New().Entries = null);
 }
示例#12
0
 public void CannotAssignNullMainStream()
 {
     Assert.Throws <ArgumentNullException>(() => HdAsset.New().Stream = null);
 }