code optimizations
This commit is contained in:
parent
d33c14bab8
commit
3e203f43b3
@ -9,11 +9,6 @@ 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.nodes.Document;
|
|
||||||
import org.jsoup.nodes.Element;
|
|
||||||
import org.jsoup.select.Elements;
|
|
||||||
import pojo.App;
|
import pojo.App;
|
||||||
import util.CreamApiConfig;
|
import util.CreamApiConfig;
|
||||||
import util.CreamApiDllHandler;
|
import util.CreamApiDllHandler;
|
||||||
@ -25,11 +20,8 @@ import java.io.InputStream;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class Controller {
|
public class Controller {
|
||||||
|
|
||||||
@ -193,54 +185,8 @@ public class Controller {
|
|||||||
return new Task<Void>() {
|
return new Task<Void>() {
|
||||||
@Override
|
@Override
|
||||||
protected Void call() {
|
protected Void call() {
|
||||||
Map<Integer, String> steamStoreDLCs = new HashMap<>();
|
Map<Number, String> collect = cache.getDlcMap(appId_textfield.getText());
|
||||||
Map<Integer, String> steamDbDLCs = new HashMap<>();
|
|
||||||
//StringBuilder sb = new StringBuilder();
|
|
||||||
try {
|
|
||||||
// Steam Store
|
|
||||||
Document steamDoc = Jsoup
|
|
||||||
.connect("https://store.steampowered.com/app/" + appId_textfield.getText() + "/")
|
|
||||||
.get();
|
|
||||||
Elements steamDLCs = steamDoc.getElementsByClass("game_area_dlc_row");
|
|
||||||
for (Element dlc : steamDLCs) {
|
|
||||||
String dlc_id = dlc.attr("data-ds-appid");
|
|
||||||
String dlc_name = dlc
|
|
||||||
.getElementsByClass("game_area_dlc_name")
|
|
||||||
.text().replace("\n", "").trim();
|
|
||||||
steamStoreDLCs.put(Integer.parseInt(dlc_id), dlc_name);
|
|
||||||
}
|
|
||||||
// SteamDB
|
|
||||||
Document steamDbDoc = Jsoup
|
|
||||||
.connect("https://steamdb.info/app/" + appId_textfield.getText() + "/dlc/")
|
|
||||||
.get();
|
|
||||||
Element steamDbDlcSection = steamDbDoc.getElementById("dlc");
|
|
||||||
Elements steamDbDLCElements = steamDbDlcSection.getElementsByClass("app");
|
|
||||||
for (Element dlc : steamDbDLCElements) {
|
|
||||||
String dlc_id = dlc.attr("data-appid");
|
|
||||||
String dlc_name = "Unknown DLC " + dlc_id;
|
|
||||||
Elements td = dlc.getElementsByTag("td");
|
|
||||||
if (!td.isEmpty()) {
|
|
||||||
dlc_name = td.get(1).text().replace("\n", "").trim();
|
|
||||||
}
|
|
||||||
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) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<Integer, String> allDLCs = new HashMap<>(steamStoreDLCs);
|
|
||||||
steamDbDLCs.forEach(allDLCs::putIfAbsent);
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
LinkedHashMap<Number, String> collect = allDLCs.entrySet().stream()
|
|
||||||
.sorted(Map.Entry.comparingByKey())
|
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
|
|
||||||
(oldValue, newValue) -> oldValue, LinkedHashMap::new));
|
|
||||||
collect.forEach((k, v) -> sb.append(k).append("=").append(v).append("\n"));
|
collect.forEach((k, v) -> sb.append(k).append("=").append(v).append("\n"));
|
||||||
dlc_textarea.setText(sb.toString());
|
dlc_textarea.setText(sb.toString());
|
||||||
return null;
|
return null;
|
||||||
|
@ -8,7 +8,7 @@ public class Main extends Application {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws Exception{
|
public void start(Stage primaryStage) throws Exception{
|
||||||
Parent root = FXMLLoader.load(ClassLoader.getSystemResource("mainWindow.fxml"));//getClass().getResource("/mainWindow.fxml")
|
Parent root = FXMLLoader.load(ClassLoader.getSystemResource("mainWindow.fxml"));
|
||||||
primaryStage.setTitle("Auto CreamAPI");
|
primaryStage.setTitle("Auto CreamAPI");
|
||||||
primaryStage.setMinWidth(655 + 25);
|
primaryStage.setMinWidth(655 + 25);
|
||||||
primaryStage.setMinHeight(400 + 50);
|
primaryStage.setMinHeight(400 + 50);
|
||||||
|
@ -3,6 +3,8 @@ package pojo;
|
|||||||
import com.google.gson.annotations.Expose;
|
import com.google.gson.annotations.Expose;
|
||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@ -107,4 +109,106 @@ public class App {
|
|||||||
return b1 && b2 && b3 && b4;
|
return b1 && b2 && b3 && b4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Rezponze {
|
||||||
|
|
||||||
|
@SerializedName("apps")
|
||||||
|
@Expose
|
||||||
|
private List<App> apps = new ArrayList<>();
|
||||||
|
|
||||||
|
public List<App> getApps() {
|
||||||
|
return apps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApps(List<App> apps) {
|
||||||
|
this.apps = apps;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(Rezponze.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
||||||
|
sb.append("apps");
|
||||||
|
sb.append('=');
|
||||||
|
sb.append(((this.apps == null)?"<null>":this.apps));
|
||||||
|
sb.append(',');
|
||||||
|
if (sb.charAt((sb.length()- 1)) == ',') {
|
||||||
|
sb.setCharAt((sb.length()- 1), ']');
|
||||||
|
} else {
|
||||||
|
sb.append(']');
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = 1;
|
||||||
|
result = ((result* 31)+((this.apps == null)? 0 :this.apps.hashCode()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object other) {
|
||||||
|
if (other == this) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(other instanceof Rezponze)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Rezponze rhs = ((Rezponze) other);
|
||||||
|
return Objects.equals(this.apps, rhs.apps);
|
||||||
|
//return ((this.apps == rhs.apps)||((this.apps!= null)&&this.apps.equals(rhs.apps)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Download {
|
||||||
|
|
||||||
|
@SerializedName("response")
|
||||||
|
@Expose
|
||||||
|
private Rezponze response;
|
||||||
|
|
||||||
|
public Rezponze getResponse() {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResponse(Rezponze response) {
|
||||||
|
this.response = response;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(Download.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
||||||
|
sb.append("response");
|
||||||
|
sb.append('=');
|
||||||
|
sb.append(((this.response == null)?"<null>":this.response));
|
||||||
|
sb.append(',');
|
||||||
|
if (sb.charAt((sb.length()- 1)) == ',') {
|
||||||
|
sb.setCharAt((sb.length()- 1), ']');
|
||||||
|
} else {
|
||||||
|
sb.append(']');
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = 1;
|
||||||
|
result = ((result* 31)+((this.response == null)? 0 :this.response.hashCode()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object other) {
|
||||||
|
if (other == this) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(other instanceof Download)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Download rhs = ((Download) other);
|
||||||
|
return Objects.equals(this.response, rhs.response);
|
||||||
|
//return ((this.response == rhs.response)||((this.response!= null)&&this.response.equals(rhs.response)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
package pojo;
|
|
||||||
|
|
||||||
import com.google.gson.annotations.Expose;
|
|
||||||
import com.google.gson.annotations.SerializedName;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class Download {
|
|
||||||
|
|
||||||
@SerializedName("response")
|
|
||||||
@Expose
|
|
||||||
private Rezponze response;
|
|
||||||
|
|
||||||
public Rezponze getResponse() {
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResponse(Rezponze response) {
|
|
||||||
this.response = response;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append(Download.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
|
||||||
sb.append("response");
|
|
||||||
sb.append('=');
|
|
||||||
sb.append(((this.response == null)?"<null>":this.response));
|
|
||||||
sb.append(',');
|
|
||||||
if (sb.charAt((sb.length()- 1)) == ',') {
|
|
||||||
sb.setCharAt((sb.length()- 1), ']');
|
|
||||||
} else {
|
|
||||||
sb.append(']');
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = 1;
|
|
||||||
result = ((result* 31)+((this.response == null)? 0 :this.response.hashCode()));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object other) {
|
|
||||||
if (other == this) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!(other instanceof Download)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Download rhs = ((Download) other);
|
|
||||||
return Objects.equals(this.response, rhs.response);
|
|
||||||
//return ((this.response == rhs.response)||((this.response!= null)&&this.response.equals(rhs.response)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,60 +0,0 @@
|
|||||||
package pojo;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import com.google.gson.annotations.Expose;
|
|
||||||
import com.google.gson.annotations.SerializedName;
|
|
||||||
|
|
||||||
public class Rezponze {
|
|
||||||
|
|
||||||
@SerializedName("apps")
|
|
||||||
@Expose
|
|
||||||
private List<App> apps = new ArrayList<>();
|
|
||||||
|
|
||||||
public List<App> getApps() {
|
|
||||||
return apps;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setApps(List<App> apps) {
|
|
||||||
this.apps = apps;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append(Rezponze.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
|
||||||
sb.append("apps");
|
|
||||||
sb.append('=');
|
|
||||||
sb.append(((this.apps == null)?"<null>":this.apps));
|
|
||||||
sb.append(',');
|
|
||||||
if (sb.charAt((sb.length()- 1)) == ',') {
|
|
||||||
sb.setCharAt((sb.length()- 1), ']');
|
|
||||||
} else {
|
|
||||||
sb.append(']');
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = 1;
|
|
||||||
result = ((result* 31)+((this.apps == null)? 0 :this.apps.hashCode()));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object other) {
|
|
||||||
if (other == this) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!(other instanceof Rezponze)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Rezponze rhs = ((Rezponze) other);
|
|
||||||
return Objects.equals(this.apps, rhs.apps);
|
|
||||||
//return ((this.apps == rhs.apps)||((this.apps!= null)&&this.apps.equals(rhs.apps)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -155,7 +155,11 @@ public class CreamApiConfig {
|
|||||||
|
|
||||||
public void setConfig(String path) throws ConfigurationException, IOException {
|
public void setConfig(String path) throws ConfigurationException, IOException {
|
||||||
File file = new File(path);
|
File file = new File(path);
|
||||||
boolean fileCreated = file.createNewFile();
|
if (file.createNewFile()) {
|
||||||
|
System.out.println("New config file created!");
|
||||||
|
} else {
|
||||||
|
System.out.println("Using existing config file!");
|
||||||
|
}
|
||||||
this.config = CONFIGS.ini(path);
|
this.config = CONFIGS.ini(path);
|
||||||
this.config.setCommentLeadingCharsUsedInInput(";");
|
this.config.setCommentLeadingCharsUsedInInput(";");
|
||||||
this.path = path;
|
this.path = path;
|
||||||
|
@ -4,19 +4,27 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import kong.unirest.HttpResponse;
|
import kong.unirest.HttpResponse;
|
||||||
import kong.unirest.Unirest;
|
import kong.unirest.Unirest;
|
||||||
|
import org.jsoup.HttpStatusException;
|
||||||
|
import org.jsoup.Jsoup;
|
||||||
|
import org.jsoup.nodes.Document;
|
||||||
|
import org.jsoup.nodes.Element;
|
||||||
|
import org.jsoup.select.Elements;
|
||||||
import pojo.App;
|
import pojo.App;
|
||||||
import pojo.Download;
|
|
||||||
import pojo.SteamAppsList;
|
import pojo.SteamAppsList;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class SteamAppsListCache {
|
public class SteamAppsListCache {
|
||||||
|
|
||||||
|
private static final String KEY = "E427256C579D3CDF1D504810E8F5B948";
|
||||||
private SteamAppsList list = new SteamAppsList();
|
private SteamAppsList list = new SteamAppsList();
|
||||||
private File cacheFile = new File("steamapps.json");
|
private File cacheFile = new File("steamapps.json");
|
||||||
|
|
||||||
@ -69,16 +77,20 @@ public class SteamAppsListCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void getListFromApi() {
|
private void getListFromApi() {
|
||||||
HttpResponse<String> httpResponse =
|
List<App> apps = getApps();
|
||||||
Unirest.get("https://api.steampowered.com/IStoreService/GetAppList/v1/" +
|
|
||||||
"?key=E427256C579D3CDF1D504810E8F5B948&include_games=1&max_results=50000").asString();
|
|
||||||
List<App> apps = new Gson()
|
|
||||||
.fromJson(httpResponse.getBody(), Download.class)
|
|
||||||
.getResponse().getApps();
|
|
||||||
list.setTimestamp(Instant.now());
|
list.setTimestamp(Instant.now());
|
||||||
list.setSteamAppsList(apps);
|
list.setSteamAppsList(apps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<App> getApps() {
|
||||||
|
HttpResponse<String> httpResponse =
|
||||||
|
Unirest.get("https://api.steampowered.com/IStoreService/GetAppList/v1/" +
|
||||||
|
"?key=" + KEY + "&include_games=1&max_results=50000").asString();
|
||||||
|
return new Gson()
|
||||||
|
.fromJson(httpResponse.getBody(), App.Rezponze.Download.class)
|
||||||
|
.getResponse().getApps();
|
||||||
|
}
|
||||||
|
|
||||||
private void saveListToFile() throws IOException {
|
private void saveListToFile() throws IOException {
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
String jsonString = gson.toJson(list);
|
String jsonString = gson.toJson(list);
|
||||||
@ -95,4 +107,54 @@ public class SteamAppsListCache {
|
|||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
list = gson.fromJson(json, type);
|
list = gson.fromJson(json, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LinkedHashMap<Number, String> getDlcMap(String appId) {
|
||||||
|
Map<Integer, String> steamStoreDLCs = new HashMap<>();
|
||||||
|
Map<Integer, String> steamDbDLCs = new HashMap<>();
|
||||||
|
//StringBuilder sb = new StringBuilder();
|
||||||
|
try {
|
||||||
|
// Steam Store
|
||||||
|
Document steamDoc = Jsoup
|
||||||
|
.connect("https://store.steampowered.com/app/" + appId + "/")
|
||||||
|
.get();
|
||||||
|
Elements steamDLCs = steamDoc.getElementsByClass("game_area_dlc_row");
|
||||||
|
for (Element dlc : steamDLCs) {
|
||||||
|
String dlc_id = dlc.attr("data-ds-appid");
|
||||||
|
String dlc_name = dlc
|
||||||
|
.getElementsByClass("game_area_dlc_name")
|
||||||
|
.text().replace("\n", "").trim();
|
||||||
|
steamStoreDLCs.put(Integer.parseInt(dlc_id), dlc_name);
|
||||||
|
}
|
||||||
|
// SteamDB
|
||||||
|
Document steamDbDoc = Jsoup
|
||||||
|
.connect("https://steamdb.info/app/" + appId + "/dlc/")
|
||||||
|
.get();
|
||||||
|
Element steamDbDlcSection = steamDbDoc.getElementById("dlc");
|
||||||
|
Elements steamDbDLCElements = steamDbDlcSection.getElementsByClass("app");
|
||||||
|
for (Element dlc : steamDbDLCElements) {
|
||||||
|
String dlc_id = dlc.attr("data-appid");
|
||||||
|
String dlc_name = "Unknown DLC " + dlc_id;
|
||||||
|
Elements td = dlc.getElementsByTag("td");
|
||||||
|
if (!td.isEmpty()) {
|
||||||
|
dlc_name = td.get(1).text().replace("\n", "").trim();
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Integer, String> allDLCs = new HashMap<>(steamStoreDLCs);
|
||||||
|
steamDbDLCs.forEach(allDLCs::putIfAbsent);
|
||||||
|
return allDLCs.entrySet().stream()
|
||||||
|
.sorted(Map.Entry.comparingByKey())
|
||||||
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
|
||||||
|
(oldValue, newValue) -> oldValue, LinkedHashMap::new));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user