From 80ff7e675635d328c1fab9b2ee028d32e12288da Mon Sep 17 00:00:00 2001 From: Ray Schamp Date: Wed, 2 Jan 2019 11:41:13 -0500 Subject: [PATCH] Generate md5s for uploaded assets Without this, we were erroneously setting uploaded assets as clean, so they wouldn't be saved when uploaded from an .sb2/3 file. --- src/serialization/deserialize-assets.js | 20 ++++++++++++++++---- src/serialization/sb2.js | 6 ++---- src/serialization/sb3.js | 5 +---- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/serialization/deserialize-assets.js b/src/serialization/deserialize-assets.js index 45164364..be48db12 100644 --- a/src/serialization/deserialize-assets.js +++ b/src/serialization/deserialize-assets.js @@ -43,8 +43,14 @@ const deserializeSound = function (sound, runtime, zip, assetFileName) { storage.AssetType.Sound, dataFormat, data, - sound.assetId - )); + null, + true + )) + .then(asset => { + sound.asset = asset; + sound.assetId = asset.assetId; + sound.md5 = `${asset.assetId}.${asset.dataFormat}`; + }); }; /** @@ -80,9 +86,12 @@ const deserializeCostume = function (costume, runtime, zip, assetFileName, textL costume.asset.assetType, costume.asset.dataFormat, new Uint8Array(Object.keys(costume.asset.data).map(key => costume.asset.data[key])), - costume.asset.assetId + null, + true )).then(asset => { costume.asset = asset; + costume.assetId = asset.assetId; + costume.md5 = `${asset.assetId}.${asset.dataFormat}`; }); } @@ -140,10 +149,13 @@ const deserializeCostume = function (costume, runtime, zip, assetFileName, textL // TODO eventually we want to map non-png's to their actual file types? costumeFormat, data, - assetId + null, + true )) .then(asset => { costume.asset = asset; + costume.assetId = asset.assetId; + costume.md5 = `${asset.assetId}.${asset.dataFormat}`; }) ]); }; diff --git a/src/serialization/sb2.js b/src/serialization/sb2.js index 945c183d..7b6defd1 100644 --- a/src/serialization/sb2.js +++ b/src/serialization/sb2.js @@ -497,10 +497,8 @@ const parseScratchObject = function (object, runtime, extensions, topLevel, zip) // followed by the file ext const assetFileName = `${soundSource.soundID}.${ext}`; soundPromises.push(deserializeSound(sound, runtime, zip, assetFileName) - .then(asset => { - sound.asset = asset; - return loadSound(sound, runtime, sprite); - })); + .then(() => loadSound(sound, runtime, sprite)) + ); } } diff --git a/src/serialization/sb3.js b/src/serialization/sb3.js index ccbe4d1d..2eace3c3 100644 --- a/src/serialization/sb3.js +++ b/src/serialization/sb3.js @@ -905,10 +905,7 @@ const parseScratchObject = function (object, runtime, extensions, zip) { // any translation that needs to happen will happen in the process // of building up the costume object into an sb3 format return deserializeSound(sound, runtime, zip) - .then(asset => { - sound.asset = asset; - return loadSound(sound, runtime, sprite); - }); + .then(() => loadSound(sound, runtime, sprite)); // Only attempt to load the sound after the deserialization // process has been completed. });