diff --git a/.drone.yml b/.drone.yml index aa89544..c8a4a33 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,5 +7,34 @@ steps: image: maven:3-amazoncorretto-8 commands: - mvn install - - +- name: gitea_release + image: plugins/gitea-release + settings: + api_key: + from_secret: gitea_token + base_url: https://git.jeddunk.xyz + files: + - auto-cream-api-*.zip + checksum: + - md5 + - sha1 + - sha256 + - sha512 + - adler32 + - crc32 + when: + event: + - tag +- name: discord_webhook + image: appleboy/drone-discord + settings: + webhook_id: + from_secret: discord_webhook_id + webhook_token: + from_secret: discord_webhook_token + message: > + {{#success build.status}} + build {{build.number}} succeeded. + {{else}} + build {{build.number}} failed. + {{/success}} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9aeac50..133fd14 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/src/main/java/xyz/jeddunk/autocreamapi/Controller.java b/src/main/java/xyz/jeddunk/autocreamapi/Controller.java index baa5cb4..24c5f1f 100644 --- a/src/main/java/xyz/jeddunk/autocreamapi/Controller.java +++ b/src/main/java/xyz/jeddunk/autocreamapi/Controller.java @@ -144,12 +144,24 @@ public class Controller implements Initializable { language_combobox.setTooltip(new Tooltip()); language_combobox.setEditable(false); new ComboBoxAutoComplete<>(language_combobox); + dlc_textarea.setPromptText("List of DLC...\r0000 = DLC Name"); generate_tooltips(); - fix_dlc_textarea_prompt_text(); reset(true); state_label.setText("Ready."); } + private void generate_tooltips() { + Tooltip extra_protection_tooltip = new Tooltip("\"extra protection\""); + extra_protection_checkbox.setTooltip(extra_protection_tooltip); + Tooltip.install(extra_protection_checkbox, extra_protection_tooltip); + + Tooltip steamdb_dlc_tooltip = new Tooltip("Additionally get DLC data from SteamDB.\n" + + "Especially useful for DLC that is not listed on the Steam Store.\n" + + "This sometimes doesn't work because SteamDB may block access for scrapers."); + steamdb_dlc_checkbox.setTooltip(steamdb_dlc_tooltip); + Tooltip.install(steamdb_dlc_checkbox, steamdb_dlc_tooltip); + } + private void read() { language_combobox.getSelectionModel().select(config.getLanguage()); appId_textfield.setText(config.getAppId().toString()); @@ -173,22 +185,6 @@ public class Controller implements Initializable { unlockAll_disableDlcTextArea(); } - private void fix_dlc_textarea_prompt_text() { - dlc_textarea.setPromptText("List of DLC...\r0000 = DLC Name"); - } - - private void generate_tooltips() { - Tooltip extra_protection_tooltip = new Tooltip("\"extra protection\""); - extra_protection_checkbox.setTooltip(extra_protection_tooltip); - Tooltip.install(extra_protection_checkbox, extra_protection_tooltip); - - Tooltip steamdb_dlc_tooltip = new Tooltip("Additionally get DLC data from SteamDB.\n" + - "Especially useful for DLC that is not listed on the Steam Store.\n" + - "This sometimes doesn't work because SteamDB may block access for scrapers."); - steamdb_dlc_checkbox.setTooltip(steamdb_dlc_tooltip); - Tooltip.install(steamdb_dlc_checkbox, steamdb_dlc_tooltip); - } - private ChangeListener appIdChangesGameName() { return (observable, oldValue, newValue) -> { int appId; @@ -267,47 +263,7 @@ public class Controller implements Initializable { } public void save() { - Service s = new Service() { - @Override - protected Task createTask() { - return new Task() { - @Override - protected Void call() { - try { - setUpCreamApi(); - config.setDlcListFromString(dlc_textarea.getText()); - config.setAppId(Integer.parseInt(appId_textfield.getText())); - config.setExtraProtection(extra_protection_checkbox.isSelected()); - config.setForceOffline(offline_checkbox.isSelected()); - config.setUnlockAll(unlock_all_checkbox.isSelected()); - config.setLanguage(language_combobox.getValue()); - config.sync(); - } catch (IOException | ConfigurationException e) { - e.printStackTrace(); - cancel(); - } catch (NullPointerException e) { - logger.warn("No configuration file set!"); - cancel(); - } - updateIndicators(); - return null; - } - }; - } - }; - s.setOnRunning(event -> { - setDisableAllButtons(true); - state_label.setText("Saving..."); - }); - s.setOnSucceeded(event -> { - setDisableAllButtons(false); - state_label.setText("Saved successfully!"); - }); - s.setOnCancelled(event -> { - setDisableAllButtons(false); - state_label.setText("Could not save configuration file!"); - }); - s.start(); + saveService().start(); } public void getAppId() { @@ -352,6 +308,143 @@ public class Controller implements Initializable { * also lists DLC not available for purchase. */ public void getDlcList() { + getDlcListService().start(); + } + + public void openFileChooser() { + FileChooser chooser = new FileChooser(); + chooser.setTitle("Choose steam_api(64).dll..."); + FileChooser.ExtensionFilter filter = + new FileChooser.ExtensionFilter("Steam API DLL", + "steam_api.dll", "steam_api64.dll"); + chooser.getExtensionFilters().add(filter); + File file = chooser.showOpenDialog(path_button.getScene().getWindow()); + try { + config.setConfig(file.getParent() + "\\cream_api.ini"); + path_textfield.setText(file.getParent()); + steamApiPathString = file.getAbsolutePath(); + } catch (ConfigurationException | IOException e) { + e.printStackTrace(); + } catch (NullPointerException e) { + logger.warn("Could not set config file location! Did you cancel the file chooser?"); + } + emptyFields(); + reset(true); + logger.info("File chosen: " + steamApiPathString); + logger.info("Ready."); + state_label.setText("Ready."); + } + + /** + * Check if CreamAPI version of DLL is there, if not, rename original to steam_api(64)_o.dll and copy + * CreamAPI DLL to the path. Also looks for alternative Steam DLL (which means it patches both 64 and 32 bit + * DLLs at once if found) + * + * @throws IOException If file is missing or not accessible/modifiable. + */ + private void setUpCreamApi() throws IOException { + logger.info("Setting up DLL..."); + Path path = Paths.get(steamApiPathString); + copyDllFile(path, isSameFile); + findAdditionalDll(path); + logger.info("Set up DLL successfully!"); + } + + private void findAdditionalDll(Path path) throws IOException { + String aDllString = is64Bit ? "\\steam_api.dll" : "\\steam_api64.dll"; + Path dir = path.getParent(); + Path aDll = Paths.get(dir.toString() + aDllString); + if (Files.exists(aDll)) { + logger.info("Additional DLL found: (" + aDll.toString() + ")!"); + InputStream is = Files.newInputStream(aDll); + String md5 = DigestUtils.md5Hex(is); + boolean aIsSameFile = Objects.equals(md5, handler.getDllMd5(!is64Bit)); + copyDllFile(aDll, aIsSameFile); + } + } + + private void copyDllFile(Path path, boolean isSameFile) throws IOException { + if (!isSameFile) { + String pathOrigString = steamApiPathString; + String replacement = is64Bit ? "steam_api64_o.dll" : "steam_api_o.dll"; + pathOrigString = + pathOrigString + .replaceFirst(REGEX, replacement); + Path pathOrig = Paths.get(pathOrigString); + if (!Files.exists(pathOrig)) { + logger.info("Renaming " + path.toString() + " to " + replacement + "..."); + Files.move(path, pathOrig); + } else { + logger.info(pathOrigString + " already exists!"); + String pathBakString = steamApiPathString; + pathBakString = + pathBakString + .replaceFirst(REGEX, is64Bit ? "steam_api64.dll.backup" : "steam_api.dll.backup"); + Path pathBak = Paths.get(pathBakString); + Files.move(path, pathBak, StandardCopyOption.REPLACE_EXISTING); + } + logger.info("Copying CreamAPI DLL to " + path.toString() + " ..."); + Files.copy(handler.getDllPath(is64Bit), path); + } + } + + private void setDisableAllButtons(boolean b) { + reset_button.setDisable(b); + save_button.setDisable(b); + getAppId_button.setDisable(b); + path_button.setDisable(b); + getDlcList_button.setDisable(b); + } + + public void resetFromButton() { + reset(false); + } + + private Service saveService() { + Service s = new Service() { + @Override + protected Task createTask() { + return new Task() { + @Override + protected Void call() { + try { + setUpCreamApi(); + config.setDlcListFromString(dlc_textarea.getText()); + config.setAppId(Integer.parseInt(appId_textfield.getText())); + config.setExtraProtection(extra_protection_checkbox.isSelected()); + config.setForceOffline(offline_checkbox.isSelected()); + config.setUnlockAll(unlock_all_checkbox.isSelected()); + config.setLanguage(language_combobox.getValue()); + config.sync(); + } catch (IOException | ConfigurationException e) { + e.printStackTrace(); + cancel(); + } catch (NullPointerException e) { + logger.warn("No configuration file set!"); + cancel(); + } + updateIndicators(); + return null; + } + }; + } + }; + s.setOnRunning(event -> { + setDisableAllButtons(true); + state_label.setText("Saving..."); + }); + s.setOnSucceeded(event -> { + setDisableAllButtons(false); + state_label.setText("Saved successfully!"); + }); + s.setOnCancelled(event -> { + setDisableAllButtons(false); + state_label.setText("Could not save configuration file!"); + }); + return s; + } + + private Service getDlcListService() { Service s = new Service() { @Override protected Task createTask() { @@ -380,90 +473,7 @@ public class Controller implements Initializable { setDisableAllButtons(false); state_label.setText("Could not get list of DLCs!"); }); - s.start(); - } - - public void openFileChooser() { - FileChooser chooser = new FileChooser(); - chooser.setTitle("Choose steam_api(64).dll..."); - FileChooser.ExtensionFilter filter = - new FileChooser.ExtensionFilter("Steam API DLL", - "steam_api.dll", "steam_api64.dll"); - chooser.getExtensionFilters().add(filter); - File file = chooser.showOpenDialog(path_button.getScene().getWindow()); - try { - config.setConfig(file.getParent() + "\\cream_api.ini"); - path_textfield.setText(file.getParent()); - steamApiPathString = file.getAbsolutePath(); - } catch (ConfigurationException | IOException e) { - e.printStackTrace(); - } catch (NullPointerException e) { - logger.warn("Could not set config file location! Did you cancel the file chooser?"); - } - emptyFields(); - reset(true); - state_label.setText("Ready."); - } - - /** - * Check if CreamAPI version of DLL is there, if not, rename original to steam_api(64)_o.dll and copy - * CreamAPI DLL to the path. Also looks for alternative Steam DLL (which means it patches both 64 and 32 bit - * DLLs at once if found) - * - * @throws IOException If file is missing or not accessible/modifiable. - */ - private void setUpCreamApi() throws IOException { - Path path = Paths.get(steamApiPathString); - copyDllFile(path, isSameFile); - findAdditionalDll(path); - } - - 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!"); - logger.info("Second DLL found: (" + secondDll.toString() + ")!"); - InputStream is = Files.newInputStream(secondDll); - String md5 = DigestUtils.md5Hex(is); - boolean isSameFile1 = Objects.equals(md5, handler.getDllMd5(!is64Bit)); - copyDllFile(secondDll, isSameFile1); - } - } - - private void copyDllFile(Path path, boolean isSameFile) throws IOException { - if (!isSameFile) { - String pathOrigString = steamApiPathString; - pathOrigString = - pathOrigString - .replaceFirst(REGEX, is64Bit ? "steam_api64_o.dll" : "steam_api_o.dll"); - Path pathOrig = Paths.get(pathOrigString); - if (!Files.exists(pathOrig)) { - Files.move(path, pathOrig); - } else { - String pathBakString = steamApiPathString; - pathBakString = - pathBakString - .replaceFirst(REGEX, is64Bit ? "steam_api64.dll.backup" : "steam_api.dll.backup"); - Path pathBak = Paths.get(pathBakString); - Files.move(path, pathBak, StandardCopyOption.REPLACE_EXISTING); - } - //Files.deleteIfExists(path); - Files.copy(handler.getDllPath(is64Bit), path); - } - } - - private void setDisableAllButtons(boolean b) { - reset_button.setDisable(b); - save_button.setDisable(b); - getAppId_button.setDisable(b); - path_button.setDisable(b); - getDlcList_button.setDisable(b); - } - - public void resetFromButton() { - reset(false); + return s; } static class ComboBoxAutoComplete {