diff --git a/Engines/Wine/QuickScript/Zip Script/script.js b/Engines/Wine/QuickScript/Zip Script/script.js index af9de0e887..71919eba01 100644 --- a/Engines/Wine/QuickScript/Zip Script/script.js +++ b/Engines/Wine/QuickScript/Zip Script/script.js @@ -1,7 +1,8 @@ const QuickScript = include("engines.wine.quick_script.quick_script"); const Downloader = include("utils.functions.net.download"); const Wine = include("engines.wine.engine.object"); -const { Extractor } = include("utils.functions.filesystem.extract"); +const {Extractor} = include("utils.functions.filesystem.extract"); +const {fileExists} = include("utils.functions.filesystem.files"); const Luna = include("engines.wine.verbs.luna"); @@ -15,6 +16,17 @@ module.default = class ZipScript extends QuickScript { return this; } + /** + * If setupPath is provided, ZipScript will try to execute the .exe when the archive is extracted + * + * @param {string} setupPath path of the setup in /drive_c/ + * @returns {ZipScript} This + */ + setupPathInsidePrefix(setupPath) { + this._setupPath = setupPath; + return this; + } + checksum(checksum) { this._checksum = checksum; return this; @@ -43,7 +55,7 @@ module.default = class ZipScript extends QuickScript { if (!this._url) { archive = setupWizard.browse(tr("Please select the .zip file."), wine.prefixDirectory(), ["zip"]); } else { - archive = wine.prefixDirectory() + "/drive_c/archive.zip"; + archive = `${wine.prefixDirectory()}/drive_c/archive.zip`; new Downloader() .wizard(setupWizard) .url(this._url) @@ -55,9 +67,16 @@ module.default = class ZipScript extends QuickScript { new Extractor() .wizard(setupWizard) .archive(archive) - .to(wine.prefixDirectory() + "/drive_c/" + this._name) + .to(`${wine.prefixDirectory()}/drive_c/${this._name}`) .extract(); + if (this._setupPath !== undefined) { + if (!fileExists(`${wine.prefixDirectory()}/drive_c/${this._setupPath}`)) { + throw new Error(tr("File \"{0}\" not found", this._setupPath)); + } + wine.runInsidePrefix(this._setupPath); + } + this._postInstall(wine, setupWizard); this._createShortcut(wine.prefix());