Bugfixes and optimizations

Fixes a bug where the server version is not updated on load.
Optimized downloading of all jar files.
This commit is contained in:
Kristian Knarvik 2018-03-29 16:09:08 +02:00
parent 46bb3a9e29
commit 5ac22babab
3 changed files with 73 additions and 158 deletions

View File

@ -461,6 +461,12 @@ public class Profile {
} }
} }
/**
* Parses a profile, and creates a profile with the data.
*
* @param profileData The data of the new profile
* @return The new profile
*/
private static Profile parseProfile(String[] profileData) { private static Profile parseProfile(String[] profileData) {
return new Profile( return new Profile(
profileData[0], profileData[0],
@ -470,6 +476,12 @@ public class Profile {
); );
} }
/**
* Parses a server, and creates a new collection.
*
* @param profile The profile which to add the collection
* @param serverData The data to parse
*/
private static void parseServer(Profile profile, String[] serverData) { private static void parseServer(Profile profile, String[] serverData) {
profile.collections.add(new Collection( profile.collections.add(new Collection(
serverData[0], serverData[0],
@ -485,6 +497,11 @@ public class Profile {
); );
} }
/**
* Downloads all jars to the program directory.
*
* @throws IOException On version file failure or folder creation failure
*/
public static void downloadJars() throws IOException { public static void downloadJars() throws IOException {
if (!new File(jarDir).exists() && !new File(jarDir).mkdirs()) { if (!new File(jarDir).exists() && !new File(jarDir).mkdirs()) {
JOptionPane.showMessageDialog( JOptionPane.showMessageDialog(
@ -495,29 +512,58 @@ public class Profile {
); );
throw new FileNotFoundException("Unable to create jars folder"); throw new FileNotFoundException("Unable to create jars folder");
} }
downloadSimple("Spigot"); try {
downloadSimple("Craftbukkit"); downloadAll();
downloadSimple("MCPCplus"); gui.setStatus("Finished downloading jars");
downloadMixed("Vanilla"); } catch (FileNotFoundException e) {
downloadMixed("Snapshot"); gui.setStatus("One or more downloads failed: " + e.getMessage());
downloadSponge(); }
downloadBungee();
gui.setStatus("Finished downloading jars");
} }
private static void downloadSimple(String typeName) throws FileNotFoundException { /**
ServerType type = ServerType.getByName(typeName); * Downloads jar files for all possible server versions.
String url = Objects.requireNonNull(type).getDownloadURL(); *
String name = type.getName(); * @throws IOException If a jar fails to download.
Boolean success; */
for (String version : type.getVersions()) { private static void downloadAll() throws IOException {
File file = new File(jarDir + type.getName() + version + ".jar"); for (ServerType type : ServerType.getServerTypes()) {
if (!file.isFile()) { String url = Objects.requireNonNull(type).getDownloadURL(), name = type.getName(), newestVersion;
Path filePath = Paths.get(jarDir + type.getName() + version + ".jar"); AdvancedServerType advType = type instanceof AdvancedServerType ? (AdvancedServerType) type : null;
for (String version : type.getVersions()) {
Boolean success;
if (gui != null) { if (gui != null) {
gui.setStatus("Downloading: " + name + version + ".jar"); gui.setStatus("Downloading: " + name + version + ".jar");
} }
success = downloadFile(url + name + version + ".jar", filePath); File file = new File(jarDir + type.getName() + version + ".jar");
Path filePath = Paths.get(jarDir + type.getName() + version + ".jar");
switch (type.getName()) {
case "Vanilla":
case "Snapshot":
if (version.equals("Latest")) {
newestVersion = stringBetween(readFile(Objects.requireNonNull(advType).getVersionURL()), advType.getSrcStart(), advType.getSrcEnd());
setVersion(name, newestVersion);
success = (file.isFile() && newestVersion.equals(getVersion(name))) || downloadFile(url + newestVersion + advType.getDownloadURLPart() + newestVersion + ".jar", filePath);
} else {
success = file.isFile() || downloadFile(url + version + Objects.requireNonNull(advType).getDownloadURLPart() + version + ".jar", filePath);
}
break;
case "Spigot":
case "Craftbukkit":
case "MCPCplus":
success = file.isFile() || downloadFile(url + name + version + ".jar", filePath);
break;
case "SpongeVanilla":
newestVersion = stringBetween(readFile(Objects.requireNonNull(advType).getVersionURL() + version), advType.getSrcStart(), advType.getSrcEnd());
success = file.isFile() || downloadFile(url + newestVersion + advType.getDownloadURLPart() + newestVersion + ".jar", filePath);
break;
case "Bungee":
newestVersion = stringBetween(readFile(Objects.requireNonNull(advType).getVersionURL()), advType.getSrcStart(), advType.getSrcEnd());
setVersion(name, newestVersion);
success = (file.isFile() && newestVersion.equals(getVersion(name))) || downloadFile(url, filePath);
break;
default:
success = true;
}
if (!success) { if (!success) {
if (gui != null) { if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar"); gui.setStatus("Error downloading: " + name + version + ".jar");
@ -528,117 +574,6 @@ public class Profile {
} }
} }
private static void downloadMixed(String typeName) throws IOException {
AdvancedServerType type = (AdvancedServerType) ServerType.getByName(typeName);
String url = Objects.requireNonNull(type).getDownloadURL();
String name = type.getName();
String versionText;
String newestVersion;
Boolean success;
for (String version : type.getVersions()) {
File file = new File(jarDir + type.getName() + version + ".jar");
Path filePath = Paths.get(jarDir + type.getName() + version + ".jar");
if (gui != null) {
gui.setStatus("Downloading: " + name + version + ".jar");
}
if (version.equals("Latest")) {
try {
versionText = readFile(type.getVersionURL());
} catch (IOException e) {
throw new IOException("Error reading: " + type.getVersionURL());
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(getVersion(name))) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
setVersion(name, newestVersion);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + version + ".jar");
}
}
} else {
if (!file.isFile()) {
success = downloadFile(url + version + type.getDownloadURLPart() + version + ".jar", filePath);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + version + ".jar");
}
}
}
}
}
private static void downloadSponge() throws IOException {
AdvancedServerType type = (AdvancedServerType) ServerType.getByName("SpongeVanilla");
String url = Objects.requireNonNull(type).getDownloadURL();
String name = type.getName();
String versionText;
String newestVersion;
Boolean success;
for (String version : type.getVersions()) {
File file = new File(jarDir + name + version + ".jar");
Path filePath = Paths.get(jarDir + name + version + ".jar");
if (gui != null) {
gui.setStatus("Downloading: " + name + version + ".jar");
}
try {
versionText = readFile(type.getVersionURL() + version);
} catch (IOException e) {
throw new IOException("Error reading: " + type.getVersionURL());
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile()) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + version + ".jar");
}
}
}
}
private static void downloadBungee() throws IOException {
AdvancedServerType type = (AdvancedServerType) ServerType.getByName("Bungee");
String url = Objects.requireNonNull(type).getDownloadURL();
String name = type.getName();
String versionText;
String newestVersion;
Boolean success;
File file = new File(jarDir + type.getName() + ".jar");
Path filePath = Paths.get(jarDir + type.getName() + ".jar");
if (gui != null) {
gui.setStatus("Downloading: " + name + ".jar");
}
try {
versionText = readFile(type.getVersionURL());
} catch (IOException e) {
throw new IOException("Error reading: " + type.getVersionURL());
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(getVersion(name))) {
success = downloadFile(url, filePath);
setVersion(name, newestVersion);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + ".jar");
}
}
}
/** /**
* Returns the current version of a type * Returns the current version of a type
* *

View File

@ -351,12 +351,7 @@ public class Server {
AdvancedServerType type; AdvancedServerType type;
File file = new File(this.path + File.separator + this.getType()); File file = new File(this.path + File.separator + this.getType());
Path filePath = Paths.get(this.path + File.separator + this.getType()); Path filePath = Paths.get(this.path + File.separator + this.getType());
String versionText; String versionText, newestVersion, url = this.type.getDownloadURL(), name = this.type.getName(), ver = this.serverVersion;
String newestVersion;
String url = this.type.getDownloadURL();
String name = this.type.getName();
String ver = this.serverVersion;
boolean success;
switch (this.type.getName()) { switch (this.type.getName()) {
case "Custom": case "Custom":
if (!file.isFile()) { if (!file.isFile()) {
@ -366,11 +361,8 @@ public class Server {
case "Spigot": case "Spigot":
case "Craftbukkit": case "Craftbukkit":
case "MCPCplus": case "MCPCplus":
if (!file.isFile()) { if (!(file.isFile() || downloadFile(url + name + ver + ".jar", filePath))) {
success = downloadFile(url + name + ver + ".jar", filePath); throw new FileNotFoundException("Jar file could not be downloaded.");
if (!success) {
throw new FileNotFoundException("Jar file could not be downloaded.");
}
} }
break; break;
case "Vanilla": case "Vanilla":
@ -384,21 +376,14 @@ public class Server {
} }
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd()); newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) { if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
this.setVersion(name, newestVersion); this.setVersion(name, newestVersion);
if (!success) { if (!downloadFile(url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar", filePath)) {
throw new FileNotFoundException("Jar file could not be downloaded."); throw new FileNotFoundException("Jar file could not be downloaded.");
} }
} }
} else { } else {
if (!file.isFile()) { if (!(file.isFile() || downloadFile(url + ver + type.getDownloadURLPart() + ver + ".jar", filePath))) {
success = downloadFile(url + ver + type.getDownloadURLPart() + ver + ".jar", filePath); throw new FileNotFoundException("Jar file could not be downloaded.");
if (!success) {
throw new FileNotFoundException("Jar file could not be downloaded.");
}
} }
} }
break; break;
@ -411,12 +396,8 @@ public class Server {
} }
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd()); newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) { if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
this.setVersion(name, newestVersion); this.setVersion(name, newestVersion);
if (!success) { if (!downloadFile(url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar", filePath)) {
throw new FileNotFoundException("Jar file could not be downloaded."); throw new FileNotFoundException("Jar file could not be downloaded.");
} }
} }
@ -430,9 +411,8 @@ public class Server {
} }
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd()); newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) { if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) {
success = downloadFile(url, filePath);
this.setVersion(name, newestVersion); this.setVersion(name, newestVersion);
if (!success) { if (!downloadFile(url, filePath)) {
throw new FileNotFoundException("Jar file could not be downloaded."); throw new FileNotFoundException("Jar file could not be downloaded.");
} }
} }

View File

@ -38,7 +38,7 @@ public class ServerTab implements ActionListener {
this.chckbxEnabled.setSelected(enabled); this.chckbxEnabled.setSelected(enabled);
this.serverTypes.setSelectedItem(typeName); this.serverTypes.setSelectedItem(typeName);
this.serverTypes(); this.serverTypes();
this.serverTypes.setSelectedItem(serverVersion); this.serverVersions.setSelectedItem(serverVersion);
this.maxRam.setSelectedItem(maxRam); this.maxRam.setSelectedItem(maxRam);
} }