mirror of
https://github.com/marcrobledo/RomPatcher.js.git
synced 2025-07-27 16:48:31 +00:00
feat: add tauri file saving handling
This commit is contained in:
parent
1e2e84264e
commit
8f31944230
7 changed files with 158 additions and 54 deletions
|
@ -139,10 +139,10 @@ MarcFile.prototype.save=function(){
|
|||
blob=bb.getBlob(this.fileType);
|
||||
}else{
|
||||
throw new Error('Incompatible Browser');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
saveAs(blob,this.fileName);
|
||||
|
||||
tauriSaveFile(this.fileName, blob)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -704,56 +704,34 @@ function createPatch(sourceFile, modifiedFile, mode){
|
|||
return false;
|
||||
}
|
||||
|
||||
try{
|
||||
sourceFile.seek(0);
|
||||
modifiedFile.seek(0);
|
||||
|
||||
if(CAN_USE_WEB_WORKERS){
|
||||
setTabCreateEnabled(false);
|
||||
|
||||
setMessage('create', 'creating_patch', 'loading');
|
||||
|
||||
webWorkerCreate.postMessage(
|
||||
{
|
||||
sourceFileU8Array:sourceFile._u8array,
|
||||
modifiedFileU8Array:modifiedFile._u8array,
|
||||
modifiedFileName:modifiedFile.fileName,
|
||||
patchMode:mode
|
||||
},[
|
||||
sourceFile._u8array.buffer,
|
||||
modifiedFile._u8array.buffer
|
||||
]
|
||||
);
|
||||
|
||||
romFile1=new MarcFile(el('input-file-rom1'));
|
||||
romFile2=new MarcFile(el('input-file-rom2'));
|
||||
}else{
|
||||
try{
|
||||
sourceFile.seek(0);
|
||||
modifiedFile.seek(0);
|
||||
|
||||
var newPatch;
|
||||
if(mode==='ips'){
|
||||
newPatch=createIPSFromFiles(sourceFile, modifiedFile);
|
||||
}else if(mode==='bps'){
|
||||
newPatch=createBPSFromFiles(sourceFile, modifiedFile, (sourceFile.fileSize<=4194304));
|
||||
}else if(mode==='ups'){
|
||||
newPatch=createUPSFromFiles(sourceFile, modifiedFile);
|
||||
}else if(mode==='aps'){
|
||||
newPatch=createAPSFromFiles(sourceFile, modifiedFile);
|
||||
}else if(mode==='rup'){
|
||||
newPatch=createRUPFromFiles(sourceFile, modifiedFile);
|
||||
}else{
|
||||
setMessage('create', 'error_invalid_patch', 'error');
|
||||
}
|
||||
|
||||
|
||||
if(crc32(modifiedFile)===crc32(newPatch.apply(sourceFile))){
|
||||
newPatch.export(modifiedFile.fileName.replace(/\.[^\.]+$/,'')).save();
|
||||
}else{
|
||||
setMessage('create', 'Unexpected error: verification failed. Patched file and modified file mismatch. Please report this bug.', 'error');
|
||||
}
|
||||
|
||||
}catch(e){
|
||||
setMessage('create', 'Error: '+_(e.message), 'error');
|
||||
var newPatch;
|
||||
if(mode==='ips'){
|
||||
newPatch=createIPSFromFiles(sourceFile, modifiedFile);
|
||||
}else if(mode==='bps'){
|
||||
newPatch=createBPSFromFiles(sourceFile, modifiedFile, (sourceFile.fileSize<=4194304));
|
||||
}else if(mode==='ups'){
|
||||
newPatch=createUPSFromFiles(sourceFile, modifiedFile);
|
||||
}else if(mode==='aps'){
|
||||
newPatch=createAPSFromFiles(sourceFile, modifiedFile);
|
||||
}else if(mode==='rup'){
|
||||
newPatch=createRUPFromFiles(sourceFile, modifiedFile);
|
||||
}else{
|
||||
setMessage('create', 'error_invalid_patch', 'error');
|
||||
}
|
||||
|
||||
|
||||
if(crc32(modifiedFile)===crc32(newPatch.apply(sourceFile))){
|
||||
newPatch.export(modifiedFile.fileName.replace(/\.[^\.]+$/,'')).save();
|
||||
}else{
|
||||
setMessage('create', 'Unexpected error: verification failed. Patched file and modified file mismatch. Please report this bug.', 'error');
|
||||
}
|
||||
|
||||
}catch(e){
|
||||
setMessage('create', 'Error: '+_(e.message), 'error');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
14
public/scripts/tauriSaveFile.js
Normal file
14
public/scripts/tauriSaveFile.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
const { save } = window.__TAURI__.dialog;
|
||||
const { writeBinaryFile } = window.__TAURI__.fs;
|
||||
|
||||
const tauriSaveFile = async (filename, blob) => {
|
||||
try {
|
||||
const path = await save({ defaultPath: filename });
|
||||
const contents = await blob.arrayBuffer();
|
||||
if (path && contents) {
|
||||
await writeBinaryFile({ path, contents });
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue