diff --git a/src/containers/backpack.jsx b/src/containers/backpack.jsx index 1a22a185e956db246d371aa8e1a10eb5ca883e6c..b4f33ab43a1eae95ac082767b79fe801f5ee970f 100644 --- a/src/containers/backpack.jsx +++ b/src/containers/backpack.jsx @@ -83,12 +83,15 @@ class Backpack extends React.Component { } handleDrop (dragInfo) { let payloader = null; + let presaveAsset = null; switch (dragInfo.dragType) { case DragConstants.COSTUME: payloader = costumePayload; + presaveAsset = dragInfo.payload.asset; break; case DragConstants.SOUND: payloader = soundPayload; + presaveAsset = dragInfo.payload.asset; break; case DragConstants.SPRITE: payloader = spritePayload; @@ -102,6 +105,19 @@ class Backpack extends React.Component { // Creating the payload is async, so set loading before starting this.setState({loading: true}, () => { payloader(dragInfo.payload, this.props.vm) + .then(payload => { + // Force the asset to save to the asset server before storing in backpack + // Ensures any asset present in the backpack is also on the asset server + if (presaveAsset && !presaveAsset.clean) { + return storage.store( + presaveAsset.assetType, + presaveAsset.dataFormat, + presaveAsset.data, + presaveAsset.assetId + ).then(() => payload); + } + return payload; + }) .then(payload => saveBackpackObject({ host: this.props.host, token: this.props.token,