diff --git a/src/main/java/Controller.java b/src/main/java/Controller.java index f3d69b8..32b9294 100644 --- a/src/main/java/Controller.java +++ b/src/main/java/Controller.java @@ -13,11 +13,13 @@ * . */ +import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView; import javafx.beans.value.ChangeListener; import javafx.collections.FXCollections; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.fxml.FXML; +import javafx.scene.paint.Color; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; @@ -40,12 +42,20 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; import java.util.Objects; public class Controller { private static final String REGEX = "(?steam_api(?:64)?.dll)$"; + public Label creamApiDllApplied; + public Label creamApiConfigExists; + public FontAwesomeIconView creamApiDllAppliedIcon; + public FontAwesomeIconView creamApiConfigExistsIcon; private CreamApiDllHandler handler = null; + private boolean is64Bit; + private boolean isSameFile; + { try { handler = CreamApiDllHandler.getInstance(); @@ -102,7 +112,6 @@ public class Controller { generate_tooltips(); fix_dlc_textarea_prompt_text(); reset(true); - state_label.setText("Ready."); } private void read() { @@ -117,6 +126,18 @@ public class Controller { unlockAll_disableDlcTextArea(); } + private void emptyFields() { + creamApiDllAppliedIcon.setGlyphName("TIMES"); + creamApiConfigExistsIcon.setGlyphName("TIMES"); + appId_textfield.setText(""); + dlc_textarea.setText(""); + game_name_textfield.setText(""); + extra_protection_checkbox.setSelected(false); + offline_checkbox.setSelected(false); + unlock_all_checkbox.setSelected(false); + unlockAll_disableDlcTextArea(); + } + private void fix_dlc_textarea_prompt_text() { dlc_textarea.setPromptText("List of DLC...\r0000 = DLC Name"); } @@ -148,7 +169,7 @@ public class Controller { if (silent) { state_label.setText(""); } else { - state_label.setText("Resetting fields..."); + state_label.setText("Resetting fields..."); } try { config.read(); @@ -156,12 +177,60 @@ public class Controller { if (!silent) { state_label.setText("Successfully reset all fields!"); } + } catch (NoSuchElementException e) { + System.err.println("Error reading cream_api.ini! " + + "This can be ignored if setting up CreamAPI for the first time."); } catch (NullPointerException e) { System.err.println("Can't fill out fields, no configuration file set!"); if (!silent) { state_label.setText("Could not reset fields, no configuration file set!"); } } + updateIndicators(); + } + + private void updateIndicators() { + Color colorSuccess = Color.web("#43A047"); + Color colorFailure = Color.web("#E53935"); + try { + is64Bit = false; + if (!steamApiPathString.isEmpty()) { + Path dllPath = Paths.get(steamApiPathString); + if (dllPath.endsWith("steam_api64.dll")) { + is64Bit = true; + } + InputStream is = Files.newInputStream(dllPath); + String md5 = DigestUtils.md5Hex(is); + isSameFile = Objects.equals(md5, handler.getDllMd5(is64Bit)); + if (isSameFile) { + creamApiDllApplied.setTextFill(colorSuccess); + creamApiDllAppliedIcon.setFill(colorSuccess); + creamApiDllAppliedIcon.setGlyphName("CHECK"); + } else { + creamApiDllApplied.setTextFill(colorFailure); + creamApiDllAppliedIcon.setFill(colorFailure); + creamApiDllAppliedIcon.setGlyphName("TIMES"); + } + Path configPath = Paths.get(config.getPath()); + if (Files.exists(configPath) && Files.size(configPath) > 0L) { + creamApiConfigExists.setTextFill(colorSuccess); + creamApiConfigExistsIcon.setFill(colorSuccess); + creamApiConfigExistsIcon.setGlyphName("CHECK"); + } else { + creamApiConfigExists.setTextFill(colorFailure); + creamApiConfigExistsIcon.setFill(colorFailure); + creamApiConfigExistsIcon.setGlyphName("TIMES"); + } + } + } catch (Exception e) { + System.err.println("Error! Resetting visual indicators!"); + creamApiDllApplied.setTextFill(colorFailure); + creamApiDllAppliedIcon.setFill(colorFailure); + creamApiDllAppliedIcon.setGlyphName("TIMES"); + creamApiConfigExists.setTextFill(colorFailure); + creamApiConfigExistsIcon.setFill(colorFailure); + creamApiConfigExistsIcon.setGlyphName("TIMES"); + } } public void save() { @@ -187,6 +256,7 @@ public class Controller { System.err.println("No configuration file set!"); cancel(); } + updateIndicators(); return null; } }; @@ -301,15 +371,16 @@ public class Controller { final File file = chooser.showOpenDialog(path_button.getScene().getWindow()); try { config.setConfig(file.getParent() + "\\cream_api.ini"); - path_textfield.setText(file.getParent()); - steamApiPathString = file.getAbsolutePath(); - reset(true); - state_label.setText("Ready."); } catch (ConfigurationException | IOException e) { e.printStackTrace(); } catch (NullPointerException e) { System.err.println("Could not set config file location! Did you cancel the file chooser?"); } + path_textfield.setText(file.getParent()); + steamApiPathString = file.getAbsolutePath(); + emptyFields(); + reset(true); + state_label.setText("Ready."); } /** @@ -320,31 +391,25 @@ public class Controller { * @throws IOException If file is missing or not accessible/modifiable. */ private void setUpCreamApi() throws IOException { - boolean is64Bit = false; - if (!steamApiPathString.isEmpty()) { - Path path = Paths.get(steamApiPathString); - if (path.endsWith("steam_api64.dll")) { - is64Bit = true; - } - copyDllFile(is64Bit, path); - findAdditionalDll(is64Bit, path); - } + Path path = Paths.get(steamApiPathString); + copyDllFile(path, isSameFile); + findAdditionalDll(path); } - private void findAdditionalDll(boolean is64Bit, Path path) throws IOException { + private void findAdditionalDll(Path path) throws IOException { String secondDllString = is64Bit ? "\\steam_api.dll" : "\\steam_api64.dll"; Path dir = path.getParent(); Path secondDll = Paths.get(dir.toString() + secondDllString); if (Files.exists(secondDll)) { System.out.println("Alternative DLL found!"); - copyDllFile(!is64Bit, secondDll); + InputStream is = Files.newInputStream(secondDll); + String md5 = DigestUtils.md5Hex(is); + boolean isSameFile1 = Objects.equals(md5, handler.getDllMd5(!is64Bit)); + copyDllFile(secondDll, isSameFile1); } } - private void copyDllFile(boolean is64Bit, Path path) throws IOException { - InputStream is = Files.newInputStream(path); - String md5 = DigestUtils.md5Hex(is); - boolean isSameFile = Objects.equals(md5, handler.getDllMd5(is64Bit)); + private void copyDllFile(Path path, boolean isSameFile) throws IOException { if (!isSameFile) { String pathOrigString = steamApiPathString; pathOrigString = diff --git a/src/main/java/util/CreamApiConfig.java b/src/main/java/util/CreamApiConfig.java index 6355e54..45a9ef9 100644 --- a/src/main/java/util/CreamApiConfig.java +++ b/src/main/java/util/CreamApiConfig.java @@ -29,6 +29,11 @@ public class CreamApiConfig { private static final Configurations CONFIGS = new Configurations(); private INIConfiguration config; + + public String getPath() { + return path; + } + private String path = "cream_api.ini"; private Integer appId; private String language; @@ -57,6 +62,9 @@ public class CreamApiConfig { try { read(); + } catch (NoSuchElementException e) { + System.err.println("Error reading cream_api.ini! " + + "This can be ignored if setting up CreamAPI for the first time."); } catch (NullPointerException e) { System.err.println("Can't fill out fields, no configuration file set!"); } @@ -69,22 +77,17 @@ public class CreamApiConfig { return configInstance; } - public void read() throws NullPointerException { - try { - appId = config.getInt("steam.appid"); - language = config.getString("steam.language"); - if (language == null) { - language = "english"; - } - unlockAll = config.getBoolean("steam.unlockall"); - extraProtection = config.getBoolean("steam.extraprotection"); - forceOffline = config.getBoolean("steam.forceoffline"); - final SubnodeConfiguration dlc_section = config.getSection("dlc"); - dlc_section.getKeys().forEachRemaining(k -> dlc.put(Integer.parseInt(k), dlc_section.getString(k))); - } catch (NoSuchElementException e) { - System.err.println("Error reading cream_api.ini! " + - "This can be ignored if setting up CreamAPI for the first time."); + public void read() throws NullPointerException, NoSuchElementException { + appId = config.getInt("steam.appid"); + language = config.getString("steam.language"); + if (language == null) { + language = "english"; } + unlockAll = config.getBoolean("steam.unlockall"); + extraProtection = config.getBoolean("steam.extraprotection"); + forceOffline = config.getBoolean("steam.forceoffline"); + final SubnodeConfiguration dlc_section = config.getSection("dlc"); + dlc_section.getKeys().forEachRemaining(k -> dlc.put(Integer.parseInt(k), dlc_section.getString(k))); } public void sync() throws ConfigurationException { diff --git a/src/main/resources/mainWindow.fxml b/src/main/resources/mainWindow.fxml index ebb2d7c..a0d4fdc 100644 --- a/src/main/resources/mainWindow.fxml +++ b/src/main/resources/mainWindow.fxml @@ -8,9 +8,11 @@ + + - - + +
+ + @@ -86,9 +89,58 @@ - +
+ + + + + + + + + + + + + + + + + + + -
+ \ No newline at end of file