FileHandlers: Throw error when handler is missing on Windows/Linux

Not awaiting exec() has the side effect that we no longer get errors
if the executable is missing / isn't actually executable. Extract those
checks to prevent problems of the sort fixed in 63f54d3 in the future.
This commit is contained in:
Abe Jellinek 2024-03-27 13:52:15 -04:00
parent 63f54d3184
commit 489cee6b24

View file

@ -278,7 +278,7 @@ Zotero.FileHandlers = {
// PDF-XChange: http://help.tracker-software.com/eu/default.aspx?pageid=PDFXView25:command_line_options
args.unshift('/A', 'page=' + page);
}
Zotero.Utilities.Internal.exec(appPath, args);
await Zotero.FileHandlers._checkAndExecWithoutBlocking(appPath, args);
}
}
],
@ -293,7 +293,7 @@ Zotero.FileHandlers = {
if (location?.position?.value) {
args.push('--open-at=' + location.position.value);
}
Zotero.Utilities.Internal.exec(appPath, args);
await Zotero.FileHandlers._checkAndExecWithoutBlocking(appPath, args);
}
}
]
@ -333,7 +333,7 @@ Zotero.FileHandlers = {
if (page !== undefined) {
args.unshift('-p', page);
}
Zotero.Utilities.Internal.exec(appPath, args);
await Zotero.FileHandlers._checkAndExecWithoutBlocking(appPath, args);
}
}
],
@ -348,7 +348,7 @@ Zotero.FileHandlers = {
if (location?.position?.value) {
args.push('--open-at=' + location.position.value);
}
Zotero.Utilities.Internal.exec(appPath, args);
await Zotero.FileHandlers._checkAndExecWithoutBlocking(appPath, args);
}
}
]
@ -483,7 +483,24 @@ Zotero.FileHandlers = {
return handler.defaultDescription;
}
return false;
}
},
/**
* Check that a command exists and is executable, and run without waiting
* for it to finish
*/
async _checkAndExecWithoutBlocking(command, args) {
// Run the same checks that exec() runs so that we reject if the
// executable doesn't exist or isn't actually executable
if (!await OS.File.exists(command)) {
throw new Error(`${command} not found`);
}
if (!Zotero.File.pathToFile(command).isExecutable()) {
throw new Error(`${command} is not an executable`);
}
// Do not await
Zotero.Utilities.Internal.exec(command, args);
},
};
Zotero.OpenPDF = {