MCPcopy Index your code
hub / github.com/EmulatorJS/EmulatorJS / downloadGameFile

Method downloadGameFile

data/src/emulator.js:702–758  ·  view source on GitHub ↗
(assetUrl, type, progressMessage, decompressProgressMessage)

Source from the content-addressed store, hash-verified

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() {

Callers 3

downloadGamePatchMethod · 0.95
downloadGameParentMethod · 0.95
downloadBiosMethod · 0.95

Calls 7

toDataMethod · 0.95
downloadFileMethod · 0.95
startGameErrorMethod · 0.95
localizationMethod · 0.95
getMethod · 0.45
putMethod · 0.45

Tested by

no test coverage detected