From cc944a9d3d70338f7f8d0e373964d0d0eab12ace Mon Sep 17 00:00:00 2001 From: Shawn Date: Fri, 11 Jan 2019 12:16:02 -0600 Subject: [PATCH] Update lbry-format --- .../Assets/Editor/LBRY/lbry-format/index.js | 76 +++++++++--------- .../Assets/Editor/LBRY/lbry-format~/index.js | 76 +++++++++--------- lbry.unitypackage | Bin 7809 -> 7788 bytes 3 files changed, 78 insertions(+), 74 deletions(-) diff --git a/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format/index.js b/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format/index.js index 31878ae..c8c8bee 100644 --- a/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format/index.js +++ b/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format/index.js @@ -87,7 +87,6 @@ async function packDirectory(directory, options = {}) { writeFirstEntry(options, tarPack); await walkAndRun(async (file) => { - try{ contents = await readFile(path.normalize(file)); // Must be chunked to avoid issues with fixed memory limits. @@ -113,7 +112,7 @@ async function packDirectory(directory, options = {}) { contents = zstd.compressChunks(chunkIterator, contents.length, COMPRESSION_LEVEL); - let name = path.relative(packRoot, file); + let name = path.relative(packRoot, file).replace('\\', '/'); if(/^\.\//.test(name)) { name = name.slice(2); @@ -126,9 +125,8 @@ async function packDirectory(directory, options = {}) { }); await writeStream(entry, contents); - //console.log(contents) + entry.end(); - }catch (e){console.log(e)} }, directory, packRoot); tarPack.finalize(); }; @@ -154,42 +152,46 @@ function streamToBuffer(stream) { async function unpackDirectory(directory, options = {}) { - if(!fs.existsSync(directory)) { - fs.mkdirSync(directory); - } - - const fileReadStream = getFileReadStream(options); - const zstd = await getZstd(); - - const extract = tar.extract(); - - extract.on('entry', async (header, fileStream, next) => { - let contents = await streamToBuffer(fileStream); - contents = new Uint8Array(contents); - - contents = zstd.decompress(contents); - - if(!/^\./.test(header.name)) { - if(header.name == 'index.html') { - console.log(String.fromCharCode.apply(null, contents)) - } - const writePath = path.join(directory, header.name); - fs.promises.mkdir(path.dirname(writePath), { recursive: true }); - var fileWriteStream = fs.createWriteStream(writePath); - fileWriteStream.write(contents); - fileWriteStream.end(); - next(); - } else { - fileStream.resume(); - next(); + return new Promise(async (resolve) => { + if(!fs.existsSync(directory)) { + fs.mkdirSync(directory); } - }); - extract.on('finish', () => { - // all entries read - }); + const fileReadStream = getFileReadStream(options); + const zstd = await getZstd(); - fileReadStream.pipe(extract); + const extract = tar.extract(); + + extract.on('entry', async (header, fileStream, next) => { + let contents = await streamToBuffer(fileStream); + contents = new Uint8Array(contents); + + contents = zstd.decompress(contents); + + if(!/^\./.test(header.name)) { + const writePath = path.join(directory, header.name); + + try { + fs.mkdirSync(path.dirname(writePath), { recursive: true }); + } catch (e) { + // Directory exists + } + const fileWriteStream = fs.createWriteStream(writePath); + fileWriteStream.write(contents); + fileWriteStream.end(); + next(); + } else { + fileStream.resume(); + next(); + } + }); + + extract.on('finish', () => { + resolve(true); + }); + + fileReadStream.pipe(extract); + }); } /* diff --git a/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format~/index.js b/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format~/index.js index 31878ae..c8c8bee 100644 --- a/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format~/index.js +++ b/LBRY 3D Viewer/Assets/Editor/LBRY/lbry-format~/index.js @@ -87,7 +87,6 @@ async function packDirectory(directory, options = {}) { writeFirstEntry(options, tarPack); await walkAndRun(async (file) => { - try{ contents = await readFile(path.normalize(file)); // Must be chunked to avoid issues with fixed memory limits. @@ -113,7 +112,7 @@ async function packDirectory(directory, options = {}) { contents = zstd.compressChunks(chunkIterator, contents.length, COMPRESSION_LEVEL); - let name = path.relative(packRoot, file); + let name = path.relative(packRoot, file).replace('\\', '/'); if(/^\.\//.test(name)) { name = name.slice(2); @@ -126,9 +125,8 @@ async function packDirectory(directory, options = {}) { }); await writeStream(entry, contents); - //console.log(contents) + entry.end(); - }catch (e){console.log(e)} }, directory, packRoot); tarPack.finalize(); }; @@ -154,42 +152,46 @@ function streamToBuffer(stream) { async function unpackDirectory(directory, options = {}) { - if(!fs.existsSync(directory)) { - fs.mkdirSync(directory); - } - - const fileReadStream = getFileReadStream(options); - const zstd = await getZstd(); - - const extract = tar.extract(); - - extract.on('entry', async (header, fileStream, next) => { - let contents = await streamToBuffer(fileStream); - contents = new Uint8Array(contents); - - contents = zstd.decompress(contents); - - if(!/^\./.test(header.name)) { - if(header.name == 'index.html') { - console.log(String.fromCharCode.apply(null, contents)) - } - const writePath = path.join(directory, header.name); - fs.promises.mkdir(path.dirname(writePath), { recursive: true }); - var fileWriteStream = fs.createWriteStream(writePath); - fileWriteStream.write(contents); - fileWriteStream.end(); - next(); - } else { - fileStream.resume(); - next(); + return new Promise(async (resolve) => { + if(!fs.existsSync(directory)) { + fs.mkdirSync(directory); } - }); - extract.on('finish', () => { - // all entries read - }); + const fileReadStream = getFileReadStream(options); + const zstd = await getZstd(); - fileReadStream.pipe(extract); + const extract = tar.extract(); + + extract.on('entry', async (header, fileStream, next) => { + let contents = await streamToBuffer(fileStream); + contents = new Uint8Array(contents); + + contents = zstd.decompress(contents); + + if(!/^\./.test(header.name)) { + const writePath = path.join(directory, header.name); + + try { + fs.mkdirSync(path.dirname(writePath), { recursive: true }); + } catch (e) { + // Directory exists + } + const fileWriteStream = fs.createWriteStream(writePath); + fileWriteStream.write(contents); + fileWriteStream.end(); + next(); + } else { + fileStream.resume(); + next(); + } + }); + + extract.on('finish', () => { + resolve(true); + }); + + fileReadStream.pipe(extract); + }); } /* diff --git a/lbry.unitypackage b/lbry.unitypackage index cc6ba3ceade193aa4525111fdd4e53228d2c9fc4..7d75013b2aa1a6208cf0c5f24f5207b99dc76954 100644 GIT binary patch literal 7788 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 TC`Bns?<)NP^q_HW0NMZmWo*2>