mirror of
https://github.com/EmulatorJS/EmulatorJS.git
synced 2024-09-20 02:46:23 +00:00
update ROM file search order
This commit is contained in:
parent
c59831c774
commit
61019d929d
1 changed files with 61 additions and 42 deletions
|
@ -860,27 +860,37 @@ class EmulatorJS {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
downloadRom() {
|
downloadRom() {
|
||||||
return new Promise((resolve, reject) => {
|
const extractFileNameFromUrl = url => {
|
||||||
|
if (!url) return null;
|
||||||
|
return url.split('/').pop().split("#")[0].split("?")[0];
|
||||||
|
};
|
||||||
|
const supportsExt = (ext) => {
|
||||||
|
const core = this.getCore();
|
||||||
|
if (!this.extensions[core]) return false;
|
||||||
|
return this.extensions[core].includes(ext);
|
||||||
|
};
|
||||||
|
|
||||||
|
return new Promise(resolve => {
|
||||||
this.textElem.innerText = this.localization("Download Game Data");
|
this.textElem.innerText = this.localization("Download Game Data");
|
||||||
|
|
||||||
const gotGameData = (data) => {
|
const gotGameData = (data) => {
|
||||||
if (['arcade', 'mame2003'].includes(this.getCore(true))) {
|
if (['arcade', 'mame2003'].includes(this.getCore(true))) {
|
||||||
this.fileName = this.config.gameUrl.split('/').pop().split("#")[0].split("?")[0];
|
this.fileName = extractFileNameFromUrl(this.config.gameUrl);
|
||||||
FS.writeFile(this.fileName, new Uint8Array(data));
|
FS.writeFile(this.fileName, new Uint8Array(data));
|
||||||
resolve();
|
resolve();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let resData = {};
|
const altName = this.config.gameUrl.startsWith("blob:") ? (this.config.gameName || "game") : extractFileNameFromUrl(this.config.gameUrl);
|
||||||
const needsCue = (["mednafen_psx", "mednafen_psx_hw", "mednafen_pce", "mednafen_pcfx"].includes(this.getCore())) && !this.config.disableCue;
|
|
||||||
const altName = this.config.gameUrl.startsWith("blob:") ? (this.config.gameName || "game") : this.config.gameUrl.split('/').pop().split("#")[0].split("?")[0];
|
let fileNames = [];
|
||||||
this.checkCompression(new Uint8Array(data), this.localization("Decompress Game Data"), (fileName, fileData) => {
|
this.checkCompression(new Uint8Array(data), this.localization("Decompress Game Data"), (fileName, fileData) => {
|
||||||
if (fileName.includes("/")) {
|
if (fileName.includes("/")) {
|
||||||
const paths = fileName.split("/");
|
const paths = fileName.split("/");
|
||||||
let cp = "";
|
let cp = "";
|
||||||
for (let i=0; i<paths.length-1; i++) {
|
for (let i=0; i<paths.length-1; i++) {
|
||||||
if (paths[i] === "") continue;
|
if (paths[i] === "") continue;
|
||||||
cp += "/"+paths[i];
|
cp += `/${paths[i]}`;
|
||||||
if (!FS.analyzePath(cp).exists) {
|
if (!FS.analyzePath(cp).exists) {
|
||||||
FS.mkdir(cp);
|
FS.mkdir(cp);
|
||||||
}
|
}
|
||||||
|
@ -890,49 +900,58 @@ class EmulatorJS {
|
||||||
FS.mkdir(fileName);
|
FS.mkdir(fileName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (needsCue && ["m3u", "cue"].includes(fileName.split(".").pop().toLowerCase())) {
|
|
||||||
resData[fileName] = fileData;
|
|
||||||
} else if (fileName !== "!!notCompressedData") {
|
|
||||||
resData[fileName] = true;
|
|
||||||
}
|
|
||||||
if (fileName === "!!notCompressedData") {
|
if (fileName === "!!notCompressedData") {
|
||||||
FS.writeFile(altName, fileData);
|
FS.writeFile(altName, fileData);
|
||||||
resData[altName] = true;
|
fileNames.push(altName);
|
||||||
} else {
|
} else {
|
||||||
FS.writeFile("/"+fileName, fileData);
|
FS.writeFile(`/${fileName}`, fileData);
|
||||||
|
fileNames.push(fileName);
|
||||||
}
|
}
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
const fileNames = (() => {
|
let isoFile = null;
|
||||||
let rv = [];
|
let supportedFile = null;
|
||||||
for (const k in resData) rv.push(k);
|
let cueFile = null;
|
||||||
return rv;
|
let selectedCueExt = null;
|
||||||
})();
|
fileNames.forEach(fileName => {
|
||||||
if (fileNames.length === 1) fileNames[0] = altName;
|
const ext = fileName.split('.').pop().toLowerCase();
|
||||||
let execFile = null;
|
if (supportsExt(ext)) {
|
||||||
if (needsCue) {
|
supportedFile = fileName;
|
||||||
execFile = this.gameManager.createCueFile(fileNames);
|
|
||||||
}
|
}
|
||||||
|
if (['iso', 'cso', 'chd', 'elf'].includes(ext)) {
|
||||||
for (const k in resData) {
|
isoFile = fileName;
|
||||||
if (k === "!!notCompressedData") {
|
|
||||||
if (needsCue && execFile !== null) {
|
|
||||||
this.fileName = execFile;
|
|
||||||
} else {
|
|
||||||
this.fileName = altName;
|
|
||||||
}
|
}
|
||||||
break;
|
if (['cue', 'ccd', 'toc', 'm3u'].includes(ext)) {
|
||||||
}
|
if (this.getCore(true) === 'psx') {
|
||||||
if (!this.fileName || ((this.extensions[this.getCore()] || []).includes(k.split(".").pop()) &&
|
|
||||||
//always prefer m3u files for psx cores
|
//always prefer m3u files for psx cores
|
||||||
!(this.getCore(true) === "psx" && ["m3u", "ccd"].includes(this.fileName.split(".").pop())))) {
|
if (selectedCueExt !== 'm3u') {
|
||||||
this.fileName = k;
|
if (ext === 'm3u' || cueFile === null) {
|
||||||
}
|
cueFile = fileName;
|
||||||
if (needsCue && execFile === null && ["m3u", "cue"].includes(k.split(".").pop().toLowerCase())) {
|
selectedCueExt = ext;
|
||||||
FS.writeFile("/"+k, resData[k]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (needsCue && execFile !== null) {
|
} else {
|
||||||
this.fileName = execFile;
|
//prefer cue or ccd files over toc or m3u
|
||||||
|
if (!['cue', 'ccd'].includes(selectedCueExt)) {
|
||||||
|
if (['cue', 'ccd'].includes(ext) || cueFile === null) {
|
||||||
|
cueFile = fileName;
|
||||||
|
selectedCueExt = ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (isoFile !== null && (supportsExt('iso') || supportsExt('cso') || supportsExt('chd') || supportsExt('elf'))) {
|
||||||
|
this.fileName = isoFile;
|
||||||
|
} else if (!this.config.disableCue && (supportsExt('cue') || supportsExt('ccd') || supportsExt('toc') || supportsExt('m3u'))) {
|
||||||
|
if (cueFile !== null) {
|
||||||
|
this.fileName = cueFile;
|
||||||
|
} else {
|
||||||
|
this.fileName = this.gameManager.createCueFile(fileNames);
|
||||||
|
}
|
||||||
|
} else if (supportedFile !== null) {
|
||||||
|
this.fileName = supportedFile;
|
||||||
|
} else {
|
||||||
|
this.fileName = fileNames[0];
|
||||||
}
|
}
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue