(assetUrl, type, progressMessage, decompressProgressMessage)
| 700 | }) |
| 701 | } |
| 702 | downloadGameFile(assetUrl, type, progressMessage, decompressProgressMessage) { |
| 703 | return new Promise(async (resolve, reject) => { |
| 704 | if ((typeof assetUrl !== "string" || !assetUrl.trim()) && !this.toData(assetUrl, true)) { |
| 705 | return resolve(assetUrl); |
| 706 | } |
| 707 | const gotData = async (input) => { |
| 708 | if (this.config.dontExtractBIOS === true) { |
| 709 | this.gameManager.FS.writeFile(assetUrl, new Uint8Array(input)); |
| 710 | return resolve(assetUrl); |
| 711 | } |
| 712 | const data = await this.checkCompression(new Uint8Array(input), decompressProgressMessage); |
| 713 | for (const k in data) { |
| 714 | const coreFilename = "/" + this.fileName; |
| 715 | const coreFilePath = coreFilename.substring(0, coreFilename.length - coreFilename.split("/").pop().length); |
| 716 | if (k === "!!notCompressedData") { |
| 717 | this.gameManager.FS.writeFile(coreFilePath + assetUrl.split("/").pop().split("#")[0].split("?")[0], data[k]); |
| 718 | break; |
| 719 | } |
| 720 | if (k.endsWith("/")) continue; |
| 721 | this.gameManager.FS.writeFile(coreFilePath + k.split("/").pop(), data[k]); |
| 722 | } |
| 723 | } |
| 724 | |
| 725 | this.textElem.innerText = progressMessage; |
| 726 | if (!this.debug) { |
| 727 | const res = await this.downloadFile(assetUrl, null, true, { method: "HEAD" }); |
| 728 | const result = await this.storage.rom.get(assetUrl.split("/").pop()); |
| 729 | if (result && result["content-length"] === res.headers["content-length"] && result.type === type) { |
| 730 | await gotData(result.data); |
| 731 | return resolve(assetUrl); |
| 732 | } |
| 733 | } |
| 734 | const res = await this.downloadFile(assetUrl, (progress) => { |
| 735 | this.textElem.innerText = progressMessage + progress; |
| 736 | }, true, { responseType: "arraybuffer", method: "GET" }); |
| 737 | if (res === -1) { |
| 738 | this.startGameError(this.localization("Network Error")); |
| 739 | resolve(assetUrl); |
| 740 | return; |
| 741 | } |
| 742 | if (assetUrl instanceof File) { |
| 743 | assetUrl = assetUrl.name; |
| 744 | } else if (this.toData(assetUrl, true)) { |
| 745 | assetUrl = "game"; |
| 746 | } |
| 747 | await gotData(res.data); |
| 748 | resolve(assetUrl); |
| 749 | const limit = (typeof this.config.cacheLimit === "number") ? this.config.cacheLimit : 1073741824; |
| 750 | if (parseFloat(res.headers["content-length"]) < limit && this.saveInBrowserSupported() && assetUrl !== "game") { |
| 751 | this.storage.rom.put(assetUrl.split("/").pop(), { |
| 752 | "content-length": res.headers["content-length"], |
| 753 | data: res.data, |
| 754 | type: type |
| 755 | }) |
| 756 | } |
| 757 | }); |
| 758 | } |
| 759 | downloadGamePatch() { |
no test coverage detected