Browse Source

Fix engine.js preloadFile() with directories

Leon Krause 7 years ago
parent
commit
6f1bddf4b5
1 changed files with 13 additions and 3 deletions
  1. 13 3
      platform/javascript/engine.js

+ 13 - 3
platform/javascript/engine.js

@@ -1,3 +1,4 @@
+		exposedLibs['PATH'] = PATH;
 		exposedLibs['FS'] = FS;
 		return Module;
 	},
@@ -96,14 +97,14 @@
 			}
 			if (pathOrBuffer instanceof Uint8Array) {
 				preloadedFiles.push({
-					name: bufferFilename,
+					path: bufferFilename,
 					buffer: pathOrBuffer
 				});
 				return Promise.resolve();
 			} else if (typeof pathOrBuffer === 'string') {
 				return loadPromise(pathOrBuffer, preloadProgressTracker).then(function(xhr) {
 					preloadedFiles.push({
-						name: pathOrBuffer,
+						path: pathOrBuffer,
 						buffer: xhr.response
 					});
 				});
@@ -166,7 +167,16 @@
 			this.rtenv.thisProgram = executableName || getBaseName(basePath);
 
 			preloadedFiles.forEach(function(file) {
-				LIBS.FS.createDataFile('/', file.name, new Uint8Array(file.buffer), true, true, true);
+				var dir = LIBS.PATH.dirname(file.path);
+				try {
+					LIBS.FS.stat(dir);
+				} catch (e) {
+					if (e.code !== 'ENOENT') {
+						throw e;
+					}
+					LIBS.FS.mkdirTree(dir);
+				}
+				LIBS.FS.createDataFile('/', file.path, new Uint8Array(file.buffer), true, true, true);
 			}, this);
 
 			preloadedFiles = null;