Added handler for CreamAPI's DLLs (contains path and md5 hash)
Fixed crash on startup if config file could not be found
This commit is contained in:
parent
4cdb4037d1
commit
f104570907
@ -6,12 +6,14 @@ import javafx.scene.control.Tooltip;
|
|||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
import org.apache.commons.configuration2.ex.ConfigurationException;
|
import org.apache.commons.configuration2.ex.ConfigurationException;
|
||||||
|
import org.jsoup.HttpStatusException;
|
||||||
import org.jsoup.Jsoup;
|
import org.jsoup.Jsoup;
|
||||||
import org.jsoup.nodes.Document;
|
import org.jsoup.nodes.Document;
|
||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
import pojo.App;
|
import pojo.App;
|
||||||
import util.CreamApiConfig;
|
import util.CreamApiConfig;
|
||||||
|
import util.CreamApiDllHandler;
|
||||||
import util.SteamAppsListCache;
|
import util.SteamAppsListCache;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -27,8 +29,9 @@ import java.util.Objects;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Controller {
|
public class Controller {
|
||||||
private static final String X86_MD5_HASH = "c6f267a2d10b891ed352ed849a28d69b";
|
|
||||||
private static final String X64_MD5_HASH = "645c728a6117946294130d07cf6c0cae";
|
private static final String REGEX = "(?<steamApiDll>steam_api(?:64)?.dll)$";
|
||||||
|
private CreamApiDllHandler handler = CreamApiDllHandler.getInstance();
|
||||||
private CreamApiConfig config = CreamApiConfig.getInstance();
|
private CreamApiConfig config = CreamApiConfig.getInstance();
|
||||||
private SteamAppsListCache cache = new SteamAppsListCache();
|
private SteamAppsListCache cache = new SteamAppsListCache();
|
||||||
@FXML
|
@FXML
|
||||||
@ -68,18 +71,22 @@ public class Controller {
|
|||||||
//retrieveDlcList_button.setDisable(true); // WIP
|
//retrieveDlcList_button.setDisable(true); // WIP
|
||||||
generate_tooltips();
|
generate_tooltips();
|
||||||
fix_dlc_textarea_prompt_text();
|
fix_dlc_textarea_prompt_text();
|
||||||
read();
|
try {
|
||||||
|
read();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
System.err.println("Can't fill out fields, no configuration file set!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void read() {
|
private void read() {
|
||||||
|
language_combobox.setItems(FXCollections.observableArrayList(config.getLanguages()));
|
||||||
|
language_combobox.getSelectionModel().select(config.getLanguage());
|
||||||
appId_textfield.setText(config.getAppId().toString());
|
appId_textfield.setText(config.getAppId().toString());
|
||||||
dlc_textarea.setText(config.getDlcListAsString());
|
dlc_textarea.setText(config.getDlcListAsString());
|
||||||
game_name_textfield.setText(cache.getGame(config.getAppId()).getName());
|
game_name_textfield.setText(cache.getGame(config.getAppId()).getName());
|
||||||
extra_protection_checkbox.setSelected(config.getExtraProtection());
|
extra_protection_checkbox.setSelected(config.getExtraProtection());
|
||||||
offline_checkbox.setSelected(config.getForceOffline());
|
offline_checkbox.setSelected(config.getForceOffline());
|
||||||
unlock_all_checkbox.setSelected(config.getUnlockAll());
|
unlock_all_checkbox.setSelected(config.getUnlockAll());
|
||||||
language_combobox.setItems(FXCollections.observableArrayList(config.getLanguages()));
|
|
||||||
language_combobox.getSelectionModel().select(config.getLanguage());
|
|
||||||
unlockAll_disableDlcTextArea();
|
unlockAll_disableDlcTextArea();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,26 +118,28 @@ public class Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reset() {
|
public void reset() {
|
||||||
config.read();
|
try {
|
||||||
read();
|
config.read();
|
||||||
|
read();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
System.err.println("Can't fill out fields, no configuration file set!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save() {
|
public void save() {
|
||||||
try {
|
try {
|
||||||
setUpCreamApi();
|
setUpCreamApi();
|
||||||
} catch (IOException e) {
|
config.setDlcListFromString(dlc_textarea.getText());
|
||||||
e.printStackTrace();
|
config.setAppId(Integer.parseInt(appId_textfield.getText()));
|
||||||
}
|
config.setExtraProtection(extra_protection_checkbox.isSelected());
|
||||||
config.setDlcListFromString(dlc_textarea.getText());
|
config.setForceOffline(offline_checkbox.isSelected());
|
||||||
config.setAppId(Integer.parseInt(appId_textfield.getText()));
|
config.setUnlockAll(unlock_all_checkbox.isSelected());
|
||||||
config.setExtraProtection(extra_protection_checkbox.isSelected());
|
config.setLanguage(language_combobox.getValue());
|
||||||
config.setForceOffline(offline_checkbox.isSelected());
|
|
||||||
config.setUnlockAll(unlock_all_checkbox.isSelected());
|
|
||||||
config.setLanguage(language_combobox.getValue());
|
|
||||||
try {
|
|
||||||
config.sync();
|
config.sync();
|
||||||
} catch (ConfigurationException e) {
|
} catch (IOException | ConfigurationException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
System.err.println("No configuration file set!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,6 +193,10 @@ public class Controller {
|
|||||||
}
|
}
|
||||||
steamDbDLCs.put(Integer.parseInt(dlc_id), dlc_name);
|
steamDbDLCs.put(Integer.parseInt(dlc_id), dlc_name);
|
||||||
}
|
}
|
||||||
|
} catch (HttpStatusException e) {
|
||||||
|
if (e.getStatusCode() == 404) {
|
||||||
|
System.err.println("App ID empty or not found! (HTTP Status Code: 404)");
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
@ -233,19 +246,18 @@ public class Controller {
|
|||||||
}
|
}
|
||||||
InputStream is = Files.newInputStream(path);
|
InputStream is = Files.newInputStream(path);
|
||||||
String md5 = DigestUtils.md5Hex(is);
|
String md5 = DigestUtils.md5Hex(is);
|
||||||
boolean isSameFile = Objects.equals(md5, is64Bit ? X64_MD5_HASH : X86_MD5_HASH);
|
boolean isSameFile = Objects.equals(md5, handler.getDllMd5(is64Bit));
|
||||||
if (!isSameFile) {
|
if (!isSameFile) {
|
||||||
String pathOrigString = steamApiPathString;
|
String pathOrigString = steamApiPathString;
|
||||||
pathOrigString =
|
pathOrigString =
|
||||||
pathOrigString
|
pathOrigString
|
||||||
.replaceFirst("(?<steamApiDll>steam_api(?:64)?.dll)$",
|
.replaceFirst(REGEX, is64Bit ? "steam_api64_o.dll" : "steam_api_o.dll");
|
||||||
is64Bit ? "steam_api64_o.dll" : "steam_api_o.dll");
|
|
||||||
Path pathOrig = Paths.get(pathOrigString);
|
Path pathOrig = Paths.get(pathOrigString);
|
||||||
if (!Files.exists(pathOrig)) {
|
if (!Files.exists(pathOrig)) {
|
||||||
Files.move(path, pathOrig);
|
Files.move(path, pathOrig);
|
||||||
}
|
}
|
||||||
Files.deleteIfExists(path);
|
Files.deleteIfExists(path);
|
||||||
Files.copy(Paths.get(is64Bit ? "steam_api64.dll" : "steam_api.dll"), path);
|
Files.copy(handler.getDllPath(is64Bit), path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,8 @@ public class CreamApiConfig {
|
|||||||
config = CONFIGS.ini(path);
|
config = CONFIGS.ini(path);
|
||||||
config.setCommentLeadingCharsUsedInInput(";");
|
config.setCommentLeadingCharsUsedInInput(";");
|
||||||
} catch (ConfigurationException e) {
|
} catch (ConfigurationException e) {
|
||||||
e.printStackTrace();
|
System.err.println("No config file found in default location!");
|
||||||
|
//e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
File langFile = new File("languages.txt");
|
File langFile = new File("languages.txt");
|
||||||
@ -38,7 +39,12 @@ public class CreamApiConfig {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
read();
|
|
||||||
|
try {
|
||||||
|
read();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
System.err.println("Can't fill out fields, no configuration file set!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized CreamApiConfig getInstance() {
|
public static synchronized CreamApiConfig getInstance() {
|
||||||
@ -48,7 +54,7 @@ public class CreamApiConfig {
|
|||||||
return configInstance;
|
return configInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void read() {
|
public void read() throws NullPointerException {
|
||||||
appId = config.getInt("steam.appid");
|
appId = config.getInt("steam.appid");
|
||||||
language = config.getString("steam.language");
|
language = config.getString("steam.language");
|
||||||
if (language == null) {
|
if (language == null) {
|
||||||
|
49
src/main/java/util/CreamApiDllHandler.java
Normal file
49
src/main/java/util/CreamApiDllHandler.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package util;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
public class CreamApiDllHandler {
|
||||||
|
|
||||||
|
private static CreamApiDllHandler creamApiDllHandlerInstance;
|
||||||
|
private final Path steamApiDllPath = Paths.get("steam_api.dll");
|
||||||
|
private final Path steamApi64DllPath = Paths.get("steam_api64.dll");
|
||||||
|
private final String steamApiDllMd5;
|
||||||
|
private final String steamApi64DllMd5;
|
||||||
|
|
||||||
|
private CreamApiDllHandler() {
|
||||||
|
String steamApiDllMd5 = "";
|
||||||
|
String steamApi64DllMd5 = "";
|
||||||
|
try {
|
||||||
|
steamApiDllMd5 = DigestUtils.md5Hex(Files.newInputStream(steamApiDllPath));
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("File missing: " + steamApiDllPath.toAbsolutePath().toString());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
steamApi64DllMd5 = DigestUtils.md5Hex(Files.newInputStream(steamApi64DllPath));
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("File missing: " + steamApi64DllPath.toAbsolutePath().toString());
|
||||||
|
}
|
||||||
|
this.steamApiDllMd5 = steamApiDllMd5;
|
||||||
|
this.steamApi64DllMd5 = steamApi64DllMd5;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static synchronized CreamApiDllHandler getInstance() {
|
||||||
|
if (creamApiDllHandlerInstance == null) {
|
||||||
|
creamApiDllHandlerInstance = new CreamApiDllHandler();
|
||||||
|
}
|
||||||
|
return creamApiDllHandlerInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path getDllPath(boolean is64Bit) {
|
||||||
|
return is64Bit ? steamApi64DllPath : steamApiDllPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDllMd5(boolean is64Bit) {
|
||||||
|
return is64Bit ? steamApi64DllMd5 : steamApiDllMd5;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user