diff options
Diffstat (limited to 'tools/file_packager.py')
-rw-r--r-- | tools/file_packager.py | 97 |
1 files changed, 13 insertions, 84 deletions
diff --git a/tools/file_packager.py b/tools/file_packager.py index 8c1e0a43..b02eac24 100644 --- a/tools/file_packager.py +++ b/tools/file_packager.py @@ -92,27 +92,10 @@ for arg in sys.argv[1:]: code = ''' function assert(check, msg) { - if (!check) throw msg; + if (!check) throw msg + new Error().stack; } ''' -if has_preloaded: - code += ''' - var BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : console.log("warning: cannot build blobs")); - var URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : console.log("warning: cannot create object URLs"); - var hasBlobConstructor; - try { - new Blob(); - hasBlobConstructor = true; - } catch(e) { - hasBlobConstructor = false; - console.log("warning: no blob constructor, cannot create blobs with mimetypes"); - } -''' - - code += 'Module["preloadedImages"] = {}; // maps url to image data\n' - code += 'Module["preloadedAudios"] = {}; // maps url to audio data\n' - # Expand directories into individual files def add(mode, dirname, names): for name in names: @@ -244,67 +227,12 @@ for file_ in data_files: # Preload varname = 'filePreload%d' % counter counter += 1 - image = filename.endswith(IMAGE_SUFFIXES) - audio = filename.endswith(AUDIO_SUFFIXES) dds = crunch and filename.endswith(CRUNCH_INPUT_SUFFIX) prepare = '' - finish = "Module['removeRunDependency']();\n" - - if image: - finish = ''' - var bb = new BlobBuilder(); - bb.append(byteArray.buffer); - var b = bb.getBlob(); - var url = URLObject.createObjectURL(b); - var img = new Image(); - img.onload = function() { - assert(img.complete, 'Image %(filename)s could not be decoded'); - var canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - Module["preloadedImages"]['%(filename)s'] = canvas; - URLObject.revokeObjectURL(url); - Module['removeRunDependency'](); - }; - img.onerror = function(event) { - console.log('Image %(filename)s could not be decoded'); - }; - img.src = url; -''' % { 'filename': filename } - elif audio: - # Need actual blob constructor here, to set the mimetype or else audios fail to decode - finish = ''' - if (hasBlobConstructor) { - var b = new Blob([byteArray.buffer], { type: '%(mimetype)s' }); - var url = URLObject.createObjectURL(b); // XXX we never revoke this! - var audio = new Audio(); - audio.removedDependency = false; - audio['oncanplaythrough'] = function() { // XXX string for closure - audio['oncanplaythrough'] = null; - Module["preloadedAudios"]['%(filename)s'] = audio; - if (!audio.removedDependency) { - Module['removeRunDependency'](); - audio.removedDependency = true; - } - }; - audio.onerror = function(event) { - if (!audio.removedDependency) { - console.log('Audio %(filename)s could not be decoded or timed out trying to decode'); - Module['removeRunDependency'](); - audio.removedDependency = true; - } - }; - setTimeout(audio.onerror, 2000); // workaround for chromium bug 124926 (still no audio with this, but at least we don't hang) - audio.src = url; - } else { - Module["preloadedAudios"]['%(filename)s'] = new Audio(); // empty shim - Module['removeRunDependency'](); - } -''' % { 'filename': filename, 'mimetype': AUDIO_MIMETYPES[suffix(filename)] } - elif dds: + finish = "Module['removeRunDependency']('fp %s');\n" % filename + + if dds: # decompress crunch format into dds prepare = ''' var ddsHeader = byteArray.subarray(0, %(dds_header_size)d); @@ -314,8 +242,7 @@ for file_ in data_files: byteArray.set(ddsData, %(dds_header_size)d); ''' % { 'filename': filename, 'dds_header_size': DDS_HEADER_SIZE } - finish = ''' - Module['removeRunDependency'](); + finish += ''' }); ''' @@ -328,10 +255,11 @@ for file_ in data_files: assert(arrayBuffer, 'Loading file %(filename)s failed.'); var byteArray = arrayBuffer.byteLength ? new Uint8Array(arrayBuffer) : arrayBuffer; %(prepare)s - Module['FS_createDataFile']('/%(dirname)s', '%(basename)s', byteArray, true, true); - %(finish)s + Module['FS_createPreloadedFile']('/%(dirname)s', '%(basename)s', byteArray, true, true, function() { + %(finish)s + }%(fail)s); }; - Module['addRunDependency'](); + Module['addRunDependency']('fp %(filename)s'); %(varname)s.send(null); ''' % { 'request': 'DataRequest', # In the past we also supported XHRs here @@ -340,7 +268,8 @@ for file_ in data_files: 'dirname': os.path.dirname(filename), 'basename': os.path.basename(filename), 'prepare': prepare, - 'finish': finish + 'finish': finish, + 'fail': '' if filename[-4:] not in AUDIO_SUFFIXES else ''', function() { Module['removeRunDependency']('fp %s') }''' % filename # workaround for chromium bug 124926 (still no audio with this, but at least we don't hang) } else: assert 0 @@ -355,7 +284,7 @@ if has_preloaded: curr.response = byteArray.subarray(%d,%d); curr.onload(); ''' % (file_['name'], file_['data_start'], file_['data_end']) - use_data += " Module['removeRunDependency']();\n" + use_data += " Module['removeRunDependency']('datafile');\n" if Compression.on: use_data = ''' @@ -376,7 +305,7 @@ if has_preloaded: var curr; %s }; - Module['addRunDependency'](); + Module['addRunDependency']('datafile'); dataFile.send(null); if (Module['setStatus']) Module['setStatus']('Downloading...'); ''' % (Compression.compressed_name(data_target) if Compression.on else data_target, use_data) |