mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 17:37:58 -04:00
config: fix config creation bug
This commit is contained in:
parent
3071fa7499
commit
d26c32d83f
@ -115,7 +115,7 @@ public class Minosoft {
|
|||||||
public static void checkClientToken() {
|
public static void checkClientToken() {
|
||||||
if (config.getString(GameConfiguration.CLIENT_TOKEN) == null || config.getString(GameConfiguration.CLIENT_TOKEN).equals("randomGenerated")) {
|
if (config.getString(GameConfiguration.CLIENT_TOKEN) == null || config.getString(GameConfiguration.CLIENT_TOKEN).equals("randomGenerated")) {
|
||||||
config.putString(GameConfiguration.CLIENT_TOKEN, UUID.randomUUID().toString());
|
config.putString(GameConfiguration.CLIENT_TOKEN, UUID.randomUUID().toString());
|
||||||
config.saveToFile(Config.configFileName);
|
config.saveToFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ public class Minosoft {
|
|||||||
if (account == null) {
|
if (account == null) {
|
||||||
selectedAccount = null;
|
selectedAccount = null;
|
||||||
config.putString(GameConfiguration.ACCOUNT_SELECTED, null);
|
config.putString(GameConfiguration.ACCOUNT_SELECTED, null);
|
||||||
config.saveToFile(Config.configFileName);
|
config.saveToFile();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MojangAccount.RefreshStates refreshState = account.refreshToken();
|
MojangAccount.RefreshStates refreshState = account.refreshToken();
|
||||||
|
@ -29,6 +29,7 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class Configuration {
|
public class Configuration {
|
||||||
final LinkedHashMap<String, Object> config;
|
final LinkedHashMap<String, Object> config;
|
||||||
|
final Thread thread;
|
||||||
|
|
||||||
public Configuration(String filename) throws IOException {
|
public Configuration(String filename) throws IOException {
|
||||||
|
|
||||||
@ -47,7 +48,48 @@ public class Configuration {
|
|||||||
file = new File(Config.homeDir + "config/" + filename);
|
file = new File(Config.homeDir + "config/" + filename);
|
||||||
}
|
}
|
||||||
Yaml yml = new Yaml();
|
Yaml yml = new Yaml();
|
||||||
config = yml.load(new FileInputStream(file));
|
FileInputStream inputStream = new FileInputStream(file);
|
||||||
|
config = yml.load(inputStream);
|
||||||
|
inputStream.close();
|
||||||
|
|
||||||
|
final File finalFile = file;
|
||||||
|
thread = new Thread(() -> {
|
||||||
|
while (true) {
|
||||||
|
// wait for interrupt
|
||||||
|
try {
|
||||||
|
Thread.sleep(Integer.MAX_VALUE);
|
||||||
|
} catch (InterruptedException ignored) {
|
||||||
|
}
|
||||||
|
// write config to temp file, delete original config, rename temp file to original file to avoid conflicts if minosoft gets closed while saving the config
|
||||||
|
File tempFile = new File(Config.homeDir + "config/" + filename + ".tmp");
|
||||||
|
Yaml yaml = new Yaml();
|
||||||
|
FileWriter writer;
|
||||||
|
try {
|
||||||
|
writer = new FileWriter(tempFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
synchronized (config) {
|
||||||
|
yaml.dump(config, writer);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
writer.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if (finalFile.exists()) {
|
||||||
|
finalFile.delete();
|
||||||
|
}
|
||||||
|
if (!tempFile.renameTo(finalFile)) {
|
||||||
|
Log.fatal("An error occurred while saving the config file");
|
||||||
|
} else {
|
||||||
|
Log.verbose(String.format("Configuration saved to file %s", filename));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
thread.setName("IO-Thread");
|
||||||
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getBoolean(String path) {
|
public boolean getBoolean(String path) {
|
||||||
@ -171,30 +213,8 @@ public class Configuration {
|
|||||||
config.remove(path);
|
config.remove(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveToFile(String filename) {
|
public void saveToFile() {
|
||||||
Thread thread = new Thread(() -> {
|
thread.interrupt();
|
||||||
// write config to temp file, delete original config, rename temp file to original file to avoid conflicts if minosoft gets closed while saving the config
|
|
||||||
File tempFile = new File(Config.homeDir + "config/" + filename + ".tmp");
|
|
||||||
File file = new File(Config.homeDir + "config/" + filename);
|
|
||||||
Yaml yaml = new Yaml();
|
|
||||||
FileWriter writer;
|
|
||||||
try {
|
|
||||||
writer = new FileWriter(tempFile);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
synchronized (config) {
|
|
||||||
yaml.dump(config, writer);
|
|
||||||
}
|
|
||||||
if (!file.delete() || !tempFile.renameTo(file)) {
|
|
||||||
Log.fatal("An error occurred while saving the config file");
|
|
||||||
} else {
|
|
||||||
Log.verbose(String.format("Configuration saved to file %s", filename));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
thread.setName("IO-Thread");
|
|
||||||
thread.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public HashBiMap<String, MojangAccount> getMojangAccounts() {
|
public HashBiMap<String, MojangAccount> getMojangAccounts() {
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.main;
|
package de.bixilon.minosoft.gui.main;
|
||||||
|
|
||||||
import de.bixilon.minosoft.Config;
|
|
||||||
import de.bixilon.minosoft.Minosoft;
|
import de.bixilon.minosoft.Minosoft;
|
||||||
import de.bixilon.minosoft.protocol.network.Connection;
|
import de.bixilon.minosoft.protocol.network.Connection;
|
||||||
import de.bixilon.minosoft.protocol.protocol.ConnectionReasons;
|
import de.bixilon.minosoft.protocol.protocol.ConnectionReasons;
|
||||||
@ -95,12 +94,12 @@ public class Server {
|
|||||||
|
|
||||||
public void saveToConfig() {
|
public void saveToConfig() {
|
||||||
Minosoft.getConfig().putServer(this);
|
Minosoft.getConfig().putServer(this);
|
||||||
Minosoft.getConfig().saveToFile(Config.configFileName);
|
Minosoft.getConfig().saveToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete() {
|
public void delete() {
|
||||||
Minosoft.getConfig().removeServer(this);
|
Minosoft.getConfig().removeServer(this);
|
||||||
Minosoft.getConfig().saveToFile(Config.configFileName);
|
Minosoft.getConfig().saveToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Connection getLastPing() {
|
public Connection getLastPing() {
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.main;
|
package de.bixilon.minosoft.gui.main;
|
||||||
|
|
||||||
import de.bixilon.minosoft.Config;
|
|
||||||
import de.bixilon.minosoft.Minosoft;
|
import de.bixilon.minosoft.Minosoft;
|
||||||
import de.bixilon.minosoft.config.GameConfiguration;
|
import de.bixilon.minosoft.config.GameConfiguration;
|
||||||
import de.bixilon.minosoft.logging.Log;
|
import de.bixilon.minosoft.logging.Log;
|
||||||
@ -43,7 +42,7 @@ public class SettingsWindow implements Initializable {
|
|||||||
}
|
}
|
||||||
Log.setLevel(newLevel);
|
Log.setLevel(newLevel);
|
||||||
Minosoft.getConfig().putString(GameConfiguration.GENERAL_LOG_LEVEL, newLevel.name());
|
Minosoft.getConfig().putString(GameConfiguration.GENERAL_LOG_LEVEL, newLevel.name());
|
||||||
Minosoft.getConfig().saveToFile(Config.configFileName);
|
Minosoft.getConfig().saveToFile();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
package de.bixilon.minosoft.util.mojang.api;
|
package de.bixilon.minosoft.util.mojang.api;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import de.bixilon.minosoft.Config;
|
|
||||||
import de.bixilon.minosoft.Minosoft;
|
import de.bixilon.minosoft.Minosoft;
|
||||||
import de.bixilon.minosoft.util.Util;
|
import de.bixilon.minosoft.util.Util;
|
||||||
|
|
||||||
@ -92,7 +91,7 @@ public class MojangAccount {
|
|||||||
|
|
||||||
public void saveToConfig() {
|
public void saveToConfig() {
|
||||||
Minosoft.getConfig().putMojangAccount(this);
|
Minosoft.getConfig().putMojangAccount(this);
|
||||||
Minosoft.getConfig().saveToFile(Config.configFileName);
|
Minosoft.getConfig().saveToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -103,7 +102,7 @@ public class MojangAccount {
|
|||||||
public void delete() {
|
public void delete() {
|
||||||
Minosoft.getAccountList().remove(this.getUserId());
|
Minosoft.getAccountList().remove(this.getUserId());
|
||||||
Minosoft.getConfig().removeAccount(this);
|
Minosoft.getConfig().removeAccount(this);
|
||||||
Minosoft.getConfig().saveToFile(Config.configFileName);
|
Minosoft.getConfig().saveToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user