Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 24 additions & 25 deletions Engines/Wine/Engine/Implementation/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,33 @@ const Downloader = include("utils.functions.net.download");
const Resource = include("utils.functions.net.resource");
const {WINE_PREFIX_DIR} = include("engines.wine.engine.constants");

const configFactory = Bean("compatibleConfigFileFormatFactory");
const exeAnalyser = Bean("exeAnalyser");
const propertyReader = Bean("propertyReader")
const operatingSystemFetcher = Bean("operatingSystemFetcher");

const FileClass = Java.type("java.io.File");
const ProcessBuilderClass = Java.type("java.lang.ProcessBuilder");
const IOUtils = Java.type("org.apache.commons.io.IOUtils");
const Optional = Java.type("java.util.Optional");

/**
* Wine engine
*/
// eslint-disable-next-line no-unused-vars
module.default = class WineEngine {
constructor() {
this._configFactory = Bean("compatibleConfigFileFormatFactory");
this._containerRegex = /[^a-z0-9_\- ]/gi;
this._ExeAnalyser = Bean("exeAnalyser");
this._ldPath = Bean("propertyReader").getProperty("application.environment.ld");
this._operatingSystemFetcher = Bean("operatingSystemFetcher");
this._wineEnginesDirectory = Bean("propertyReader").getProperty("application.user.engines") + "/wine";
this._winePrefixesDirectory =
Bean("propertyReader").getProperty("application.user.containers") + "/" + WINE_PREFIX_DIR + "/";
this._wineWebServiceUrl = Bean("propertyReader").getProperty("webservice.wine.url");
this._ldPath = propertyReader.getProperty("application.environment.ld");
this._wineEnginesDirectory = propertyReader.getProperty("application.user.engines") + "/wine";
this._winePrefixesDirectory = propertyReader.getProperty("application.user.containers") + "/" + WINE_PREFIX_DIR + "/";
this._wineWebServiceUrl = propertyReader.getProperty("webservice.wine.url");
this._wizard = null;
this._workingContainer = "";
}

getLocalDirectory(subCategory, version) {
const [distribution, , architecture] = subCategory.split("-");
const operatingSystem = this._operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();
const operatingSystem = operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();

const fullDistributionName = distribution + "-" + operatingSystem + "-" + architecture;

Expand All @@ -49,7 +54,7 @@ module.default = class WineEngine {
if (!wizard) {
const wizardTitle = `Wine ${version} ${distribution} (${architecture})`;

wizard = SetupWizard(InstallationType.ENGINES, wizardTitle, java.util.Optional.empty());
wizard = SetupWizard(InstallationType.ENGINES, wizardTitle, Optional.empty());
ownWizard = true;
}

Expand Down Expand Up @@ -271,7 +276,6 @@ module.default = class WineEngine {

const wineGeckoDir = localDirectory + "/share/wine/gecko";

const FileClass = Java.type("java.io.File");
lns(new FileClass(gecko).getParent(), wineGeckoDir);
}
}
Expand All @@ -289,7 +293,6 @@ module.default = class WineEngine {

const wineMonoDir = localDirectory + "/share/wine/mono";

const FileClass = Java.type("java.io.File");
lns(new FileClass(mono).getParent(), wineMonoDir);
}
}
Expand Down Expand Up @@ -340,29 +343,27 @@ module.default = class WineEngine {

mkdir(containerDirectory);

const containerConfiguration = this._configFactory.open(containerDirectory + "/phoenicis.cfg");
const containerConfiguration = configFactory.open(containerDirectory + "/phoenicis.cfg");

containerConfiguration.writeValue("wineVersion", version);
containerConfiguration.writeValue("wineDistribution", distribution);
containerConfiguration.writeValue("wineArchitecture", architecture);
}

run(executable, args, workingDir, captureOutput, wait, userData) {
const FileClass = Java.type("java.io.File");

let subCategory = "";
let version = "";
let architecture = "";
let workingContainerDirectory = this.getContainerDirectory(this.getWorkingContainer());
let distribution = "";

if (fileExists(workingContainerDirectory)) {
const containerConfiguration = this._configFactory.open(workingContainerDirectory + "/phoenicis.cfg");
const containerConfiguration = configFactory.open(workingContainerDirectory + "/phoenicis.cfg");

distribution = containerConfiguration.readValue("wineDistribution", "upstream");
architecture = containerConfiguration.readValue("wineArchitecture", "x86");

const operatingSystem = this._operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();
const operatingSystem = operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();

subCategory = distribution + "-" + operatingSystem + "-" + architecture;
version = containerConfiguration.readValue("wineVersion");
Expand Down Expand Up @@ -398,7 +399,7 @@ module.default = class WineEngine {

// do not run 64bit executable in 32bit prefix
if (extensionFile == "exe") {
if (architecture == "x86" && this._ExeAnalyser.is64Bits(new FileClass(executable))) {
if (architecture == "x86" && exeAnalyser.is64Bits(new FileClass(executable))) {
throw tr("Cannot run 64bit executable in a 32bit Wine prefix.");
}
}
Expand All @@ -407,7 +408,6 @@ module.default = class WineEngine {

const wineBinary = this.getLocalDirectory(subCategory, version) + "/bin/wine";
const command = [wineBinary, executable].concat(args);
const ProcessBuilderClass = Java.type("java.lang.ProcessBuilder");
const processBuilder = new ProcessBuilderClass(Java.to(command, Java.type("java.lang.String[]")));

if (workingDir) {
Expand Down Expand Up @@ -457,7 +457,7 @@ module.default = class WineEngine {
}
environment.put("LD_LIBRARY_PATH", ldPath);

if (this._operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage() === "darwin") {
if (operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage() === "darwin") {
environment.put("DYLD_FALLBACK_LIBRARY_PATH", ldPath);
environment.put("FREETYPE_PROPERTIES", "truetype:interpreter-version=35");
}
Expand All @@ -474,7 +474,6 @@ module.default = class WineEngine {
}

if (captureOutput) {
const IOUtils = Java.type("org.apache.commons.io.IOUtils");
return IOUtils.toString(process.getInputStream());
} else {
return "";
Expand All @@ -483,16 +482,16 @@ module.default = class WineEngine {

changeVersion(containerName) {
const wizardTitle = tr("Change {0} container Wine version", containerName);
const wizard = SetupWizard(InstallationType.ENGINES, wizardTitle, java.util.Optional.empty());
const wizard = SetupWizard(InstallationType.ENGINES, wizardTitle, Optional.empty());

this._wizard = wizard;

const containerNameCleaned = containerName.replace(this._containerRegex, "");
const containerDirectory = this._winePrefixesDirectory + "/" + containerNameCleaned + "/";
const containerConfiguration = this._configFactory.open(containerDirectory + "/phoenicis.cfg");
const containerConfiguration = configFactory.open(containerDirectory + "/phoenicis.cfg");

const architecture = containerConfiguration.readValue("wineArchitecture", "x86");
const operatingSystem = this._operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();
const operatingSystem = operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();

const wineJson = JSON.parse(this.getAvailableVersions());

Expand Down
20 changes: 10 additions & 10 deletions Engines/Wine/Engine/Object/script.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
const WineEngine = include("engines.wine.engine.implementation");
const {fileExists} = include("utils.functions.filesystem.files");

const configFactory = Bean("compatibleConfigFileFormatFactory");
const operatingSystemFetcher = Bean("operatingSystemFetcher");

const FilenameUtils = Java.type("org.apache.commons.io.FilenameUtils");
const ProcessBuilderClass = Java.type("java.lang.ProcessBuilder");

/**
* Wine main prototype
Expand All @@ -10,9 +14,6 @@ const FilenameUtils = Java.type("org.apache.commons.io.FilenameUtils");
module.default = class Wine {
constructor() {
this._implementation = new WineEngine();

this.configFactory = Bean("compatibleConfigFileFormatFactory");
this.operatingSystemFetcher = Bean("operatingSystemFetcher");
}

/**
Expand All @@ -21,7 +22,7 @@ module.default = class Wine {
*/
architecture() {
if (fileExists(this.prefixDirectory())) {
const containerConfiguration = this.configFactory.open(this.prefixDirectory() + "/phoenicis.cfg");
const containerConfiguration = configFactory.open(this.prefixDirectory() + "/phoenicis.cfg");
const architecture = containerConfiguration.readValue("wineArchitecture", "x86");

return architecture;
Expand Down Expand Up @@ -72,7 +73,7 @@ module.default = class Wine {
else if (arguments.length == 1) {
this._implementation.setWorkingContainer(prefix);
} else {
const operatingSystem = this.operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();
const operatingSystem = operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();
const subCategory = distribution + "-" + operatingSystem + "-" + architecture;

this._implementation.createContainer(subCategory, version, prefix);
Expand Down Expand Up @@ -100,12 +101,12 @@ module.default = class Wine {
binPath(subCategory, version) {
if (0 == arguments.length) {
if (fileExists(this.prefixDirectory())) {
const containerConfiguration = this.configFactory.open(this.prefixDirectory() + "/phoenicis.cfg");
const containerConfiguration = configFactory.open(this.prefixDirectory() + "/phoenicis.cfg");

const distribution = containerConfiguration.readValue("wineDistribution", "upstream");
const architecture = containerConfiguration.readValue("wineArchitecture", "x86");

const operatingSystem = this.operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();
const operatingSystem = operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();

subCategory = distribution + "-" + operatingSystem + "-" + architecture;
version = containerConfiguration.readValue("wineVersion");
Expand Down Expand Up @@ -231,19 +232,18 @@ module.default = class Wine {
const workingContainerDirectory = this.prefixDirectory();

if (fileExists(workingContainerDirectory)) {
const containerConfiguration = this.configFactory.open(workingContainerDirectory + "/phoenicis.cfg");
const containerConfiguration = configFactory.open(workingContainerDirectory + "/phoenicis.cfg");

const distribution = containerConfiguration.readValue("wineDistribution", "upstream");
const architecture = containerConfiguration.readValue("wineArchitecture", "x86");
const version = containerConfiguration.readValue("wineVersion");

const operatingSystem = this.operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();
const operatingSystem = operatingSystemFetcher.fetchCurrentOperationSystem().getWinePackage();

const subCategory = distribution + "-" + operatingSystem + "-" + architecture;

const binary = this._implementation.getLocalDirectory(subCategory, version) + "/bin/wineserver";

const ProcessBuilderClass = Java.type("java.lang.ProcessBuilder");
const processBuilder = new ProcessBuilderClass()
.command(Java.to([binary, parameter], "java.lang.String[]"))
.inheritIO();
Expand Down