public BlockImgStream(Stream inStream, TransferList transferList)
        {
            outStream = TempFileStream.Create();

            long total = transferList.TotalBlocks * TransferList.BLOCKSIZE;
            var  done  = 0L;

            foreach (var entry in transferList.Entries)
            {
                done += entry.Perform(inStream, outStream) * TransferList.BLOCKSIZE;
                FileInfoBase.ReportProgress(done, total);
            }
        }
Beispiel #2
0
        public static Stream DecodeTarSin(Stream stream, long totalSize)
        {
            var tarStream = new ReadOnlyStream(stream); // to track Position
            var tarReader = TarReader.Open(tarStream);

            var outStream = TempFileStream.Create();

            while (tarReader.MoveToNextEntry())
            {
                using (var s = new ReadOnlyStream(tarReader.OpenEntryStream()))
                {
                    var sparseStream = new SonySparseStream(s);
                    sparseStream.CopyToEx(outStream, () => { ReportProgress(tarStream.Position, totalSize); });
                }
            }

            return(outStream);
        }
Beispiel #3
0
        public static Stream DecodeSin(Stream stream, long totalSize)
        {
            var rewindable = new RewindableStream(stream);

            rewindable.StartRecording();
            var reader  = new BinaryReader(rewindable);
            var version = reader.ReadByte();

            switch (version)
            {
            case 1:
            case 2:
                throw new Exception($"SIN version 1 and 2 not supported.");

            case 3:
                rewindable.Rewind(true);
                var tempStream = TempFileStream.Create();
                SinParserV3.CopyTo(reader, tempStream);
                return(tempStream);
            }

            rewindable.Rewind(true);
            return(DecodeTarSin(rewindable, totalSize));
        }