From 91c72f06cc4bb007e0f7290d39700be9826b1140 Mon Sep 17 00:00:00 2001 From: Gurkengewuerz Date: Mon, 30 Mar 2020 15:09:39 +0200 Subject: [PATCH] added auto detect arma path --- .../de/mc8051/arma3launcher/LauncherGUI.java | 113 ++++++++---------- .../de/mc8051/arma3launcher/Parameter.java | 53 ++++---- .../de/mc8051/arma3launcher/Parameters.java | 83 +++++++++++++ .../arma3launcher/steam/SteamTimer.java | 8 +- .../mc8051/arma3launcher/utils/ArmaUtils.java | 57 +++++++++ gui/src/main/resources/lang_de_DE.properties | 4 +- gui/src/main/resources/lang_en_US.properties | 4 +- 7 files changed, 225 insertions(+), 97 deletions(-) create mode 100644 gui/src/main/java/de/mc8051/arma3launcher/Parameters.java create mode 100644 gui/src/main/java/de/mc8051/arma3launcher/utils/ArmaUtils.java diff --git a/gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java b/gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java index 9f610d6..71dfc9f 100644 --- a/gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java +++ b/gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java @@ -24,11 +24,12 @@ import de.mc8051.arma3launcher.objects.Server; import de.mc8051.arma3launcher.repo.DownloadStatus; import de.mc8051.arma3launcher.repo.FileChecker; import de.mc8051.arma3launcher.repo.RepositoryManger; -import de.mc8051.arma3launcher.repo.SyncList; -import de.mc8051.arma3launcher.repo.Syncer; import de.mc8051.arma3launcher.repo.Updater; import de.mc8051.arma3launcher.repo.Version; +import de.mc8051.arma3launcher.repo.sync.SyncList; +import de.mc8051.arma3launcher.repo.sync.Syncer; import de.mc8051.arma3launcher.steam.SteamTimer; +import de.mc8051.arma3launcher.utils.ArmaUtils; import de.mc8051.arma3launcher.utils.Callback; import de.mc8051.arma3launcher.utils.Humanize; import de.mc8051.arma3launcher.utils.ImageUtils; @@ -61,6 +62,8 @@ import java.lang.management.ManagementFactory; import java.net.URL; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -198,6 +201,21 @@ public class LauncherGUI implements Observer { fileChecker.addObserver(this); syncer.addObserver(this); + if (Parameters.ARMA_PATH.toStringParameter().getConfigValue() == null || Parameters.ARMA_PATH.toStringParameter().getConfigValue().isEmpty()) { + final Path installationPath = ArmaUtils.getInstallationPath(); + if (installationPath != null) { + Parameters.ARMA_PATH.toStringParameter().save(installationPath.toAbsolutePath().toString()); + Parameters.MOD_PATH.toStringParameter().save(Paths.get( + installationPath.toAbsolutePath().toString(), ArmA3Launcher.config.getString("name") + " Mods" + ).toAbsolutePath().toString()); + techCheck(); + } else { + SwingUtilities.invokeLater(() -> { + warnBox(LangUtils.getInstance().getString("arma_path_not_found_msg"), LangUtils.getInstance().getString("arma_path_not_found")); + }); + } + } + new Thread(() -> { RepositoryManger.getInstance().refreshMeta(); try { @@ -580,7 +598,7 @@ public class LauncherGUI implements Observer { } public void techCheck() { - boolean pathSet = ArmA3Launcher.user_config.get("client").containsKey("armaPath") && ArmA3Launcher.user_config.get("client").containsKey("modPath"); + boolean pathSet = Parameters.ARMA_PATH.toStringParameter().getConfigValue() != null && Parameters.ARMA_PATH.toStringParameter().getConfigValue() != null; if (SteamTimer.arma_running) { playButton.setEnabled(false); playPresetButton.setEnabled(false); @@ -639,26 +657,6 @@ public class LauncherGUI implements Observer { } } - public boolean checkArmaPath(String path) { - if (settingsArmaPathText.getText().isEmpty()) return false; - File dir = new File(settingsArmaPathText.getText()); - - ArrayList search = new ArrayList(Arrays.asList("arma3.exe", "steam.dll")); - File[] listOfFiles = dir.listFiles(); - - try { - for (File file : listOfFiles) { - if (search.isEmpty()) return true; - if (file.isFile()) { - search.remove(file.getName().toLowerCase()); - } - } - } catch (NullPointerException ex) { - return false; - } - return false; - } - public void initSettings() { settingsBackendText.setText(ArmA3Launcher.config.getString("sync.url")); @@ -683,11 +681,11 @@ public class LauncherGUI implements Observer { ((JComboBox) settingsProfileCombo).setModel(new DefaultComboBoxModel<>(readableDirectories)); - initFolderChooser(settingsArmaPathText, settingsArmaPathBtn, "armaPath", Parameter.ParameterType.CLIENT, new Callback.JFileSelectCallback() { + initFolderChooser(settingsArmaPathText, settingsArmaPathBtn, Parameters.ARMA_PATH.toStringParameter(), new Callback.JFileSelectCallback() { @Override public boolean allowSelection(File path) { String sPath = path.getAbsolutePath(); - if (!checkArmaPath(sPath)) { + if (!ArmaUtils.checkArmaPath(path.toPath())) { SwingUtilities.invokeLater(() -> warnBox(LangUtils.getInstance().getString("not_arma_dir_msg"), LangUtils.getInstance().getString("not_arma_dir"))); return false; } @@ -704,7 +702,7 @@ public class LauncherGUI implements Observer { } }); - initFolderChooser(settingsModsPathText, settingsModsPathBtn, "modPath", Parameter.ParameterType.CLIENT, new Callback.JFileSelectCallback() { + initFolderChooser(settingsModsPathText, settingsModsPathBtn, Parameters.MOD_PATH.toStringParameter(), new Callback.JFileSelectCallback() { @Override public boolean allowSelection(File path) { String sPath = path.getAbsolutePath(); @@ -723,39 +721,39 @@ public class LauncherGUI implements Observer { // -------------------------------- COMBO BOXES -------------------------------- - initComboBox(settingsLanguageCombo, "language", Parameter.ParameterType.CLIENT, new String[]{"system", "en_US", "de_DE"}); - initComboBox(settingsBehaviorStartCombo, "behaviourAfterStart", Parameter.ParameterType.CLIENT, new String[]{"nothing", "minimize", "exit"}); + initComboBox(settingsLanguageCombo, Parameters.LANGUAGE.toStringParameter()); + initComboBox(settingsBehaviorStartCombo, Parameters.BEHAVIOUR_AFTER_START.toStringParameter()); - initComboBox(settingsProfileCombo, "Profile", Parameter.ParameterType.ARMA, directories); - initComboBox(settingsExThreadsCombo, "ExThreads", Parameter.ParameterType.ARMA, new String[]{"", "3", "7"}); - initComboBox(settingsMallocCombo, "Malloc", Parameter.ParameterType.ARMA, new String[]{"", "tbb4malloc_bi", "jemalloc_bi", "system"}); + initComboBox(settingsProfileCombo, Parameters.PROFILE.toStringParameter(directories)); + initComboBox(settingsExThreadsCombo, Parameters.EXTRA_THREADS.toStringParameter()); + initComboBox(settingsMallocCombo, Parameters.MALLOC.toStringParameter()); // -------------------------------- CHECK BOXES -------------------------------- - initCheckBox(settingsShowParameterBox, "ShowStartParameter", Parameter.ParameterType.CLIENT); + initCheckBox(settingsShowParameterBox, Parameters.SHOW_START_PARAMETER.toBooolParameter()); settingsShowParameterBox.addItemListener(e -> parameterText.setVisible(e.getStateChange() == ItemEvent.SELECTED)); - initCheckBox(settingsCheckModsBox, "CheckModset", Parameter.ParameterType.CLIENT); + initCheckBox(settingsCheckModsBox, Parameters.CHECK_MODSET.toBooolParameter()); - initCheckBox(settingsUseWorkshopBox, "UseWorkshop", Parameter.ParameterType.CLIENT); + initCheckBox(settingsUseWorkshopBox, Parameters.USE_WORKSHOP.toBooolParameter()); settingsUseWorkshopBox.addItemListener(e -> { if (e.getStateChange() == ItemEvent.SELECTED) { SwingUtilities.invokeLater(() -> warnBox(LangUtils.getInstance().getString("warning_workshop"), LangUtils.getInstance().getString("warning"))); } }); - initCheckBox(settingsUseSixtyFourBitBox, "Use64BitClient", Parameter.ParameterType.ARMA); - initCheckBox(settingsNoSplashBox, "NoSplash", Parameter.ParameterType.ARMA); - initCheckBox(settingsSkipIntroBox, "SkipIntro", Parameter.ParameterType.ARMA); - initCheckBox(settingsNoCBBox, "NoCB", Parameter.ParameterType.ARMA); - initCheckBox(settingsNoLogsBox, "NoLogs", Parameter.ParameterType.ARMA); - initCheckBox(settingsEnableHTBox, "EnableHT", Parameter.ParameterType.ARMA); - initCheckBox(settingsHugeoagesBox, "Hugepages", Parameter.ParameterType.ARMA); - initCheckBox(settingsNoPauseBox, "NoPause", Parameter.ParameterType.ARMA); - initCheckBox(settingsShowScriptErrorsBox, "ShowScriptErrors", Parameter.ParameterType.ARMA); - initCheckBox(settingsFilePatchingBox, "FilePatching", Parameter.ParameterType.ARMA); - initCheckBox(settingsCrashDiagBox, "CrashDiag", Parameter.ParameterType.ARMA); - initCheckBox(settingsWindowBox, "Window", Parameter.ParameterType.ARMA); + initCheckBox(settingsUseSixtyFourBitBox, Parameters.USE_64_BIT_CLIENT.toBooolParameter()); + initCheckBox(settingsNoSplashBox, Parameters.NO_SPLASH.toBooolParameter()); + initCheckBox(settingsSkipIntroBox, Parameters.SKIP_INTRO.toBooolParameter()); + initCheckBox(settingsNoCBBox, Parameters.NO_CB.toBooolParameter()); + initCheckBox(settingsNoLogsBox, Parameters.NO_LOGS.toBooolParameter()); + initCheckBox(settingsEnableHTBox, Parameters.ENABLE_HT.toBooolParameter()); + initCheckBox(settingsHugeoagesBox, Parameters.HUGEPAGES.toBooolParameter()); + initCheckBox(settingsNoPauseBox, Parameters.NO_PAUSE.toBooolParameter()); + initCheckBox(settingsShowScriptErrorsBox, Parameters.SHOW_SCRIPT_ERRORS.toBooolParameter()); + initCheckBox(settingsFilePatchingBox, Parameters.FILE_PATCHING.toBooolParameter()); + initCheckBox(settingsCrashDiagBox, Parameters.CRASH_DIAG.toBooolParameter()); + initCheckBox(settingsWindowBox, Parameters.WINDOW.toBooolParameter()); // -------------------------------- SPINNER -------------------------------- @@ -763,37 +761,32 @@ public class LauncherGUI implements Observer { OperatingSystemMXBean mxbean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); int memorySize = (int) (mxbean.getTotalPhysicalMemorySize() / 1024); - initSpinner(settingsMaxMemSpinner, "MaxMem", Parameter.ParameterType.ARMA, -1, memorySize); - initSpinner(settingsMaxVRamSpinner, "MaxVRAM", Parameter.ParameterType.ARMA, -1, 99999); - initSpinner(settingsCpuCountSpinner, "CpuCount", Parameter.ParameterType.ARMA, 0, Runtime.getRuntime().availableProcessors()); - initSpinner(settingsPosXSpinner, "PosX", Parameter.ParameterType.ARMA, -1, 99999); - initSpinner(settingsPosYSpinner, "PosY", Parameter.ParameterType.ARMA, -1, 99999); + initSpinner(settingsMaxMemSpinner, Parameters.MAX_MEM.toStringParameter(), -1, memorySize); + initSpinner(settingsMaxVRamSpinner, Parameters.MAX_VRAM.toStringParameter(), -1, 99999); + initSpinner(settingsCpuCountSpinner, Parameters.CPU_COUNT.toStringParameter(), 0, Runtime.getRuntime().availableProcessors()); + initSpinner(settingsPosXSpinner, Parameters.POS_X.toStringParameter(), -1, 99999); + initSpinner(settingsPosYSpinner, Parameters.POS_Y.toStringParameter(), -1, 99999); // -------------------------------- -------------------------------- -------------------------------- } - private void initCheckBox(JCheckBox cb, String parameter, Parameter.ParameterType pType) { - Parameter paraObj = new Parameter<>(parameter, pType, Boolean.class); + private void initCheckBox(JCheckBox cb, Parameter paraObj) { cb.setSelected(paraObj.getValue()); cb.addItemListener(new SettingsHandler.CheckBoxListener(paraObj)); } - private void initComboBox(JComboBox cb, String parameter, Parameter.ParameterType pType, String[] values) { - Parameter paraObj = new Parameter<>(parameter, pType, String.class, values); + private void initComboBox(JComboBox cb, Parameter paraObj) { cb.setSelectedIndex(paraObj.getIndex()); if (cb.getItemListeners().length == 1) cb.addItemListener(new SettingsHandler.ComboBoxListener(paraObj)); } - private void initFolderChooser(JTextField showText, JButton actionButton, String parameter, Parameter.ParameterType pType, Callback.JFileSelectCallback check) { - Parameter paraObj = new Parameter<>(parameter, pType, String.class); + private void initFolderChooser(JTextField showText, JButton actionButton, Parameter paraObj, Callback.JFileSelectCallback check) { showText.setText(paraObj.getValue()); if (actionButton.getActionListeners().length == 0) actionButton.addActionListener(new SettingsHandler.Fileistener(mainPanel, paraObj, check)); } - public void initSpinner(JSpinner spinner, String parameter, Parameter.ParameterType pType, int min, int max) { - Parameter paraObj = new Parameter<>(parameter, pType, String.class); - + public void initSpinner(JSpinner spinner, Parameter paraObj, int min, int max) { SpinnerNumberModel RAMModel = new SpinnerNumberModel(Integer.parseInt(paraObj.getValue()), min, max, 1); spinner.setModel(RAMModel); JComponent comp = spinner.getEditor(); diff --git a/gui/src/main/java/de/mc8051/arma3launcher/Parameter.java b/gui/src/main/java/de/mc8051/arma3launcher/Parameter.java index fa6bd3d..43f60a9 100644 --- a/gui/src/main/java/de/mc8051/arma3launcher/Parameter.java +++ b/gui/src/main/java/de/mc8051/arma3launcher/Parameter.java @@ -13,47 +13,26 @@ import java.util.logging.Logger; */ public class Parameter { - private static Map PARAMETERS = new HashMap() {{ - put("profile", "name"); - put("nosplash", "noSplash"); - put("skipintro", "skipIntro"); - put("world", "world"); - put("maxmem", "maxMem"); - put("maxvram", "maxVRAM"); - put("nocb", "noCB"); - put("cpucount", "cpuCount"); - put("exthreads", "exThreads"); - put("malloc", "malloc"); - put("nologs", "noLogs"); - put("enableht", "enableHT"); - put("hugepages", "hugepages"); - put("nopause", "noPause"); - put("showscripterrors", "showScriptErrors"); - put("filepatching", "filePatching"); - put("init", "init"); - put("beta", "beta"); - put("crashdiag", "crashDiag"); - put("window", "window"); - put("posx", "posX"); - put("posy", "posY"); - - // use64bitclient -> arma3_x64.exe - }}; - private String name; private ParameterType pType; private Class persistentClass; private String[] values = null; + private String startParameter = ""; public Parameter(String name, ParameterType pType, Class persistentClass) { - this(name, pType, persistentClass, null); + this(name, pType, persistentClass, null, ""); } - public Parameter(String name, ParameterType pType, Class persistentClass, String[] values) { + public Parameter(String name, ParameterType pType, Class persistentClass, String startParameter) { + this(name, pType, persistentClass, null, startParameter); + } + + public Parameter(String name, ParameterType pType, Class persistentClass, String[] values, String startParameter) { this.name = name; this.pType = pType; this.persistentClass = persistentClass; this.values = values; + this.startParameter = startParameter; } public String getName() { @@ -100,11 +79,11 @@ public class Parameter { } public String getParameter() { - if(!PARAMETERS.containsKey(name.toLowerCase())) return null; - return PARAMETERS.get(name.toLowerCase()); + if(startParameter.isEmpty()) return null; + return startParameter; } - public T getValue() { + public T getConfigValue() { // Get User Value else Default else null Ini.Section section = ArmA3Launcher.user_config.get(getUserConfigSectionName()); if (section != null) { @@ -117,6 +96,12 @@ public class Parameter { } } + return null; + } + + public T getValue() { + final T configValue = getConfigValue(); + if(configValue != null) return configValue; return getDefault(); } @@ -137,6 +122,10 @@ public class Parameter { else return null; } + public String getStartParameter() { + return startParameter; + } + enum ParameterType { ARMA, CLIENT diff --git a/gui/src/main/java/de/mc8051/arma3launcher/Parameters.java b/gui/src/main/java/de/mc8051/arma3launcher/Parameters.java new file mode 100644 index 0000000..e3fe99f --- /dev/null +++ b/gui/src/main/java/de/mc8051/arma3launcher/Parameters.java @@ -0,0 +1,83 @@ +package de.mc8051.arma3launcher; + +/** + * Created by gurkengewuerz.de on 30.03.2020. + */ +public enum Parameters { + + LANGUAGE("language", Parameter.ParameterType.CLIENT, "", new String[]{"system", "en_US", "de_DE"}), + BEHAVIOUR_AFTER_START("behaviourAfterStart", Parameter.ParameterType.CLIENT, "", new String[]{"nothing", "minimize", "exit"}), + SHOW_START_PARAMETER("ShowStartParameter", Parameter.ParameterType.CLIENT), + CHECK_MODSET("CheckModset", Parameter.ParameterType.CLIENT), + USE_WORKSHOP("UseWorkshop", Parameter.ParameterType.CLIENT), + ARMA_PATH("armaPath", Parameter.ParameterType.CLIENT), + MOD_PATH("modPath", Parameter.ParameterType.CLIENT), + + PROFILE("Profile", Parameter.ParameterType.ARMA, "name"), + USE_64_BIT_CLIENT("Use64BitClient", Parameter.ParameterType.ARMA, "Use64BitClient"), + NO_SPLASH("NoSplash", Parameter.ParameterType.ARMA, "noSplash"), + SKIP_INTRO("SkipIntro", Parameter.ParameterType.ARMA, "skipIntro"), + WORLD("World", Parameter.ParameterType.ARMA, "world"), + MAX_MEM("MaxMem", Parameter.ParameterType.ARMA, "maxMem"), + MAX_VRAM("MaxVRAM", Parameter.ParameterType.ARMA, "maxVRAM"), + NO_CB("NoCB", Parameter.ParameterType.ARMA, "noCB"), + CPU_COUNT("CpuCount", Parameter.ParameterType.ARMA, "cpuCount"), + EXTRA_THREADS("ExThreads", Parameter.ParameterType.ARMA, "exThreads", new String[]{"", "3", "7"}), + MALLOC("Malloc", Parameter.ParameterType.ARMA, "malloc", new String[]{"", "tbb4malloc_bi", "jemalloc_bi", "system"}), + NO_LOGS("NoLogs", Parameter.ParameterType.ARMA, "noLogs"), + ENABLE_HT("EnableHT", Parameter.ParameterType.ARMA, "enableHT"), + HUGEPAGES("Hugepages", Parameter.ParameterType.ARMA, "hugepages"), + NO_PAUSE("NoPause", Parameter.ParameterType.ARMA, "noPause"), + SHOW_SCRIPT_ERRORS("ShowScriptErrors", Parameter.ParameterType.ARMA, "showScriptErrors"), + FILE_PATCHING("FilePatching", Parameter.ParameterType.ARMA, "filePatching"), + INIT("Init", Parameter.ParameterType.ARMA, "init"), + BETA("Beta", Parameter.ParameterType.ARMA, "beta"), + CRASH_DIAG("CrashDiag", Parameter.ParameterType.ARMA, "crashDiag"), + WINDOW("Window", Parameter.ParameterType.ARMA, "window"), + POS_X("PosX", Parameter.ParameterType.ARMA, "posX"), + POS_Y("PosY", Parameter.ParameterType.ARMA, "posY"); + + private String name; + private Parameter.ParameterType type; + private String[] values; + private String startParameter; + + Parameters(String name, Parameter.ParameterType type) { + this(name, type, ""); + } + + Parameters(String name, Parameter.ParameterType type, String startParameter) { + this(name, type, startParameter, null); + } + + Parameters(String name, Parameter.ParameterType type, String startParameter, String[] values) { + this.name = name; + this.type = type; + this.startParameter = startParameter; + this. values = values; + } + + public Parameter toStringParameter() { + return new Parameter(name, type, String.class, values, startParameter); + } + + public Parameter toStringParameter(String... values) { + return new Parameter(name, type, String.class, values, startParameter); + } + + public Parameter toBooolParameter() { + return new Parameter<>(name, type, Boolean.class); + } + + public String getName() { + return name; + } + + public Parameter.ParameterType getType() { + return type; + } + + public String getStartParameter() { + return startParameter; + } +} diff --git a/gui/src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java b/gui/src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java index c874fed..9f670c5 100644 --- a/gui/src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java +++ b/gui/src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java @@ -1,7 +1,6 @@ package de.mc8051.arma3launcher.steam; -import de.mc8051.arma3launcher.LauncherGUI; -import de.mc8051.arma3launcher.SteamUtils; +import de.mc8051.arma3launcher.utils.SteamUtils; import de.mc8051.arma3launcher.interfaces.Observer; import de.ralleytn.simple.registry.Key; import de.ralleytn.simple.registry.Registry; @@ -48,7 +47,10 @@ public class SteamTimer extends TimerTask { steam_running = true; - arma_running = SteamUtils.findProcess("arma3.exe") || SteamUtils.findProcess("arma3_x64.exe") || SteamUtils.findProcess("arma3launcher.exe"); + arma_running = SteamUtils.findProcess("arma3.exe") + || SteamUtils.findProcess("arma3_x64.exe") + || SteamUtils.findProcess("arma3battleye.exe") + || SteamUtils.findProcess("arma3launcher.exe"); if(old_steamrunning != steam_running || old_arma_running != arma_running) notifyObservers("steamtimer"); } catch (IOException e) { diff --git a/gui/src/main/java/de/mc8051/arma3launcher/utils/ArmaUtils.java b/gui/src/main/java/de/mc8051/arma3launcher/utils/ArmaUtils.java new file mode 100644 index 0000000..195502e --- /dev/null +++ b/gui/src/main/java/de/mc8051/arma3launcher/utils/ArmaUtils.java @@ -0,0 +1,57 @@ +package de.mc8051.arma3launcher.utils; + +import de.ralleytn.simple.registry.Key; +import de.ralleytn.simple.registry.Registry; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Created by gurkengewuerz.de on 30.03.2020. + */ +public class ArmaUtils { + + public static Path getInstallationPath() { + Key regKey = null; + try { + regKey = Registry.getKey(Registry.HKEY_LOCAL_MASHINE + "\\SOFTWARE\\bohemia interactive\\arma 3"); + } catch (IOException ignored) { + try { + regKey = Registry.getKey("HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\bohemia interactive\\arma 3"); + } catch (IOException e) { + Logger.getLogger(ArmaUtils.class.getName()).log(Level.INFO, "Arma patch cant be detected automatically"); + } + } + + if (regKey == null) return null; + final Path main = Paths.get(regKey.getValueByName("main").getRawValue()); + if(!checkArmaPath(main)) return null; + return main; + } + + public static boolean checkArmaPath(Path path) { + ArrayList search = new ArrayList<>(Arrays.asList("arma3.exe", "steam.dll")); + final File f = path.toFile(); + if (!f.exists() || !f.isDirectory()) return false; + if (f.listFiles() == null) return false; + File[] listOfFiles = f.listFiles(); + + try { + for (File file : listOfFiles) { + if (search.isEmpty()) return true; + if (file.isFile()) { + search.remove(file.getName().toLowerCase()); + } + } + } catch (NullPointerException ex) { + return false; + } + return false; + } +} diff --git a/gui/src/main/resources/lang_de_DE.properties b/gui/src/main/resources/lang_de_DE.properties index 4875097..93e62ca 100644 --- a/gui/src/main/resources/lang_de_DE.properties +++ b/gui/src/main/resources/lang_de_DE.properties @@ -112,4 +112,6 @@ clone_preset=Vorlage klonen new_modset_name=Modsset Name modset_exists_msg=Bitte wähle ein anderen Namen für deine Vorlage. modset_exists=Preset mit diesen Namen existiert bereits -update_now=Jetzt updaten! \ No newline at end of file +update_now=Jetzt updaten! +arma_path_not_found=ArmA 3 Pfad nicht gefunden +arma_path_not_found_msg=Der Installationsordner von ArmA 3 konnte nicht automatisch erkannt werden. Bitte gehe zuerst in die Einstellungen. \ No newline at end of file diff --git a/gui/src/main/resources/lang_en_US.properties b/gui/src/main/resources/lang_en_US.properties index 74c2eb5..781acee 100644 --- a/gui/src/main/resources/lang_en_US.properties +++ b/gui/src/main/resources/lang_en_US.properties @@ -110,4 +110,6 @@ presets_note=Presets can only be used as preset for new user presents. You can c clone_preset=Clone preset modset_exists_msg=Please choose another name for your preset. modset_exists=Preset with these names already exists -update_now=Update now! \ No newline at end of file +update_now=Update now! +arma_path_not_found=ArmA 3 path can't be detected +arma_path_not_found_msg=The installation folder of ArmA 3 could not be detected automatically. Please go to the settings first. \ No newline at end of file