strip away the version and update checks

This commit is contained in:
Wirlaburla 2023-01-09 01:07:53 -06:00
parent 6dbf88bea9
commit 24fd7c6ed2
4 changed files with 2 additions and 227 deletions

View File

@ -25,7 +25,6 @@ enum ToolBarPosition {
} }
enum ConfigEntry { enum ConfigEntry {
updateURL("update-url"),
iconSize("icon-size"), iconSize("icon-size"),
fileBackup("file-backup"), fileBackup("file-backup"),
darkMode("dark-mode"), darkMode("dark-mode"),
@ -55,7 +54,6 @@ public class ConfigManager {
private void initialize() { private void initialize() {
mapper = new ObjectMapper(); mapper = new ObjectMapper();
Console.print("Initializing default config values", 1, ConsoleType.INFO); Console.print("Initializing default config values", 1, ConsoleType.INFO);
defaultConfiguration.put(ConfigEntry.updateURL.name(), "https://worlio.com/WorldsOrganizer.json");
defaultConfiguration.put(ConfigEntry.iconSize.name(), 24); defaultConfiguration.put(ConfigEntry.iconSize.name(), 24);
defaultConfiguration.put(ConfigEntry.fileBackup.name(), true); defaultConfiguration.put(ConfigEntry.fileBackup.name(), true);
defaultConfiguration.put(ConfigEntry.darkMode.name(), false); defaultConfiguration.put(ConfigEntry.darkMode.name(), false);

View File

@ -114,45 +114,6 @@ public class Dialog {
} }
} }
public static void showUpdate(Version newVer) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
assert Main.verMan != null;
alert.setTitle("Update Dialog");
alert.setHeaderText("A new version (v" + newVer.get() + ") of Organizer is available for download.\nYou are currently on v" + Console.getVersion() + ".");
alert.initOwner(Main.mainStage);
ButtonType updateButton = new ButtonType("Open");
ButtonType buttonTypeCancel = new ButtonType("Cancel", ButtonBar.ButtonData.CANCEL_CLOSE);
Label label = new Label("View Changelog");
TextArea textArea = new TextArea(Console.changelogify(Main.verMan.getChangelog(newVer)));
textArea.setEditable(false);
textArea.setWrapText(true);
textArea.setMaxWidth(Double.MAX_VALUE);
textArea.setMaxHeight(Double.MAX_VALUE);
GridPane.setVgrow(textArea, Priority.ALWAYS);
GridPane.setHgrow(textArea, Priority.ALWAYS);
GridPane expContent = new GridPane();
expContent.setMaxWidth(Double.MAX_VALUE);
expContent.add(label, 0, 0);
expContent.add(textArea, 0, 1);
alert.getDialogPane().setExpandableContent(expContent);
alert.getButtonTypes().setAll(updateButton, buttonTypeCancel);
alert.getDialogPane().setMinSize(200,200);
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == updateButton) {
Console.print("Displaying webpage in native browser.", 1, ConsoleType.INFO);
Main.hostServices.showDocument(Main.verMan.url.replace("{ver}", newVer.get()));
} else {
alert.close();
}
}
public static void process() { public static void process() {
Alert alert = new Alert(Alert.AlertType.INFORMATION); Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Message"); alert.setTitle("Message");

View File

@ -31,7 +31,6 @@ public class Main extends Application {
static int debugMode = 0; static int debugMode = 0;
static ConfigManager configManager; static ConfigManager configManager;
static VersionManager verMan;
static List<File> startFiles = new ArrayList<>(); static List<File> startFiles = new ArrayList<>();
static List<WorldsTab> tabs = new ArrayList<>(); static List<WorldsTab> tabs = new ArrayList<>();
@ -49,13 +48,6 @@ public class Main extends Application {
configManager = new ConfigManager(new File((Console.getParent() + "/config.json"))); configManager = new ConfigManager(new File((Console.getParent() + "/config.json")));
try {
verMan = new VersionManager();
} catch (IOException e) {
Console.print("An IOException was encountered attempting to obtain the version.", 1, ConsoleType.ERROR);
e.printStackTrace();
}
if (debugMode < 1) debugMode = configManager.getBooleanValue(ConfigEntry.debug) ? 1 : 0; if (debugMode < 1) debugMode = configManager.getBooleanValue(ConfigEntry.debug) ? 1 : 0;
Console.print("Initializing main application.", ConsoleType.INFO); Console.print("Initializing main application.", ConsoleType.INFO);
@ -248,20 +240,6 @@ public class Main extends Application {
// General Tab // General Tab
Label channelName = new Label("Update Channel");
channelName.setFont(Font.font("Verdana", FontWeight.BOLD, FontPosture.REGULAR, 12));
Label channelInfo = new Label("Channel to use for update checks and links: 'stable' will provide tested " +
"build updates while 'beta' is more of an experimental bug-finding experience.");
channelInfo.setWrapText(true);
ObservableList<String> channels =
FXCollections.observableArrayList(ConfigManager.channels);
ComboBox<String> channelOption = new ComboBox(channels);
channelOption.getSelectionModel().select(configManager.getStringValue(ConfigEntry.channel));
HBox.setHgrow(channelOption, Priority.ALWAYS);
// Appearance Tab // Appearance Tab
Label darkName = new Label("Use Dark Mode"); Label darkName = new Label("Use Dark Mode");
@ -348,7 +326,6 @@ public class Main extends Application {
applyButton.setDefaultButton(true); applyButton.setDefaultButton(true);
applyButton.addEventFilter(MouseEvent.MOUSE_CLICKED, a -> { applyButton.addEventFilter(MouseEvent.MOUSE_CLICKED, a -> {
configManager.setValue(ConfigEntry.toolbarPos, toolPosOption.getValue()); configManager.setValue(ConfigEntry.toolbarPos, toolPosOption.getValue());
configManager.setValue(ConfigEntry.channel, channelOption.getValue());
configManager.setValue(ConfigEntry.iconSize, (int)iconSizeSlider.getValue()); configManager.setValue(ConfigEntry.iconSize, (int)iconSizeSlider.getValue());
configManager.write(); configManager.write();
toggleDark(scene); toggleDark(scene);
@ -358,7 +335,6 @@ public class Main extends Application {
Button okButton = new Button("Ok"); Button okButton = new Button("Ok");
okButton.addEventFilter(MouseEvent.MOUSE_CLICKED, a -> { okButton.addEventFilter(MouseEvent.MOUSE_CLICKED, a -> {
configManager.setValue(ConfigEntry.toolbarPos, toolPosOption.getValue()); configManager.setValue(ConfigEntry.toolbarPos, toolPosOption.getValue());
configManager.setValue(ConfigEntry.channel, channelOption.getValue());
configManager.setValue(ConfigEntry.iconSize, (int)iconSizeSlider.getValue()); configManager.setValue(ConfigEntry.iconSize, (int)iconSizeSlider.getValue());
configManager.write(); configManager.write();
toggleDark(scene); toggleDark(scene);
@ -374,14 +350,6 @@ public class Main extends Application {
// Tabbing every option into their own VBox so we can have them split off in their own containers. // Tabbing every option into their own VBox so we can have them split off in their own containers.
// This makes it easier to add to tabs because it's just a simple declare. Also good for design. // This makes it easier to add to tabs because it's just a simple declare. Also good for design.
VBox vGeneral = new VBox(channelName, channelInfo, channelOption);
ScrollPane general = new ScrollPane(vGeneral);
general.setFitToWidth(true);
Tab generalTab = new Tab("General", general);
VBox.setVgrow(general, Priority.ALWAYS);
vGeneral.setPadding(new Insets(10, 10, 10, 10));
vGeneral.setSpacing(10);
VBox vSkin = new VBox(darkName, darkInfo, darkOption, statusName, statusInfo, statusOption, VBox vSkin = new VBox(darkName, darkInfo, darkOption, statusName, statusInfo, statusOption,
toolName, toolInfo, toolPosOption, sizeName, sizeInfo, iconSizeSlider); toolName, toolInfo, toolPosOption, sizeName, sizeInfo, iconSizeSlider);
ScrollPane skin = new ScrollPane(vSkin); ScrollPane skin = new ScrollPane(vSkin);
@ -399,11 +367,10 @@ public class Main extends Application {
vAdvance.setPadding(new Insets(10, 10, 10, 10)); vAdvance.setPadding(new Insets(10, 10, 10, 10));
vAdvance.setSpacing(10); vAdvance.setSpacing(10);
TabPane prefPane = new TabPane(generalTab, skinTab, advanceTab); TabPane prefPane = new TabPane(skinTab, advanceTab);
VBox.setVgrow(prefPane, Priority.ALWAYS); VBox.setVgrow(prefPane, Priority.ALWAYS);
prefPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE); prefPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
general.maxWidthProperty().bind(prefPane.widthProperty());
skin.maxWidthProperty().bind(prefPane.widthProperty()); skin.maxWidthProperty().bind(prefPane.widthProperty());
advance.maxWidthProperty().bind(prefPane.widthProperty()); advance.maxWidthProperty().bind(prefPane.widthProperty());
@ -489,87 +456,7 @@ public class Main extends Application {
logoView.fitHeightProperty().bind(mainBox.heightProperty().multiply(0.5)); logoView.fitHeightProperty().bind(mainBox.heightProperty().multiply(0.5));
mainBox.setAlignment(Pos.CENTER); mainBox.setAlignment(Pos.CENTER);
Button updateButton = new Button("Check for Updates"); mainBox.getChildren().addAll(logoView, nameTxt, buildTxt, devTxt);
updateButton.addEventFilter(MouseEvent.MOUSE_CLICKED, a -> {
boolean isUpdatable;
try {
// Simply restarting the manager so it gets everything fresh.
// Simple yet effective at what we want, without issues.
verMan = new VersionManager();
isUpdatable = verMan.hasUpdate();
if (isUpdatable) {
Console.print("Update detected! Showing dialog.", ConsoleType.INFO);
verMan.pushUpdate();
} else Console.print("No updates available.", ConsoleType.INFO);
} catch (IOException e) {
Console.print("Could not check for updates!", ConsoleType.ERROR);
isUpdatable = false;
}
if (!isUpdatable) Dialog.showError("Update Check", "No new updates are available.");
});
Button changelogButton = new Button("What's new?");
changelogButton.addEventFilter(MouseEvent.MOUSE_CLICKED, a -> {
Stage changelogStage = new Stage();
changelogStage.initOwner(mainStage);
changelogStage.setTitle("What's new?");
VBox changesBox = new VBox();
// Reading the json file remotely, and then looking through every single value in the list.
// It's simple text, so it makes it easy to parse and style.
for (Map.Entry<?, ?> vC : ((Map<?, ?>)((Map<?, ?>)verMan.json.get("versions")).get(configManager.getStringValue(ConfigEntry.channel))).entrySet()) {
// UPDATES UPDATES UPDATES
if (new Version((String)vC.getKey()).equals(new Version(Console.getVersion()))) {
Text channel = new Text("Current Version");
channel.setFont(Font.font("Verdana", FontWeight.LIGHT, FontPosture.ITALIC, 12));
changesBox.getChildren().add(channel);
}
Text version = new Text((String)vC.getKey());
version.setFont(Font.font("Verdana", FontWeight.BOLD, FontPosture.REGULAR, 14));
changesBox.getChildren().add(version);
for (String line : verMan.getChangelog(new Version((String)vC.getKey()))) {
Text lineTxt = new Text(" - " + line);
lineTxt.wrappingWidthProperty().bind(changesBox.prefWidthProperty().multiply(0.95));
changesBox.getChildren().add(lineTxt);
}
changesBox.getChildren().add(new Separator());
}
changesBox.setPadding(new Insets(10, 10, 10, 10));
// Organize it nicely within a small ScrollPane.
// It took forever to get the text to wrap so this works.
ScrollPane changesPane = new ScrollPane(changesBox);
VBox.setVgrow(changesPane, Priority.ALWAYS);
changesPane.prefWidthProperty().bind(changelogStage.widthProperty());
changesPane.setFitToWidth(true);
changesBox.prefWidthProperty().bind(changesPane.widthProperty());
Button cancelButton = new Button("Close");
cancelButton.setCancelButton(true);
cancelButton.addEventFilter(MouseEvent.MOUSE_CLICKED, (e) -> changelogStage.close());
ButtonBar bBar = new ButtonBar();
bBar.getButtons().addAll(cancelButton);
bBar.setPadding(new Insets(10, 10, 10, 10));
changelogStage.setMinWidth(450);
changelogStage.setMinHeight(400);
changelogStage.setScene(new Scene(new VBox(changesPane, bBar), 450, 400));
changelogStage.show();
});
HBox bBar = new HBox(changelogButton, updateButton);
bBar.setAlignment(Pos.CENTER);
bBar.setSpacing(10);
bBar.setPadding(new Insets(10, 10, 10, 10));
mainBox.getChildren().addAll(logoView, nameTxt, buildTxt, devTxt, bBar);
return new Tab("Start Page", mainBox); return new Tab("Start Page", mainBox);
} }

View File

@ -1,71 +0,0 @@
package org.worlio.WorldsOrganizer;
import com.fasterxml.jackson.databind.json.JsonMapper;
import java.io.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class VersionManager {
String url;
public Version currentVersion = new Version(Console.getVersion());
public Version newVersion;
static JsonMapper mapper = new JsonMapper();
Map<?, ?> json;
int format;
private boolean isValid() {
return format == 2;
}
VersionManager() throws IOException {
json = readJsonFromUrl(Main.configManager.getStringValue(ConfigEntry.updateURL));
format = (int)json.get("format");
if (!isValid()) throw new IOException("Invalid JSON Update format: Format Version is not 2");
url = (String) json.get("url");
Map<?, ?> updates = (Map<?, ?>) json.get("versions");
LinkedHashMap<?, ?> ver = (LinkedHashMap<?, ?>) updates.get(Main.configManager.getStringValue(ConfigEntry.channel));
newVersion = new Version((String)ver.keySet().toArray()[0]);
}
public boolean hasUpdate() {
if (!isValid()) return false;
return newVersion.compareTo(currentVersion) >= 1;
}
public void pushUpdate() {
if (hasUpdate() && isValid()) {
Dialog.showUpdate(newVersion);
} else Console.print("No new updates available.");
}
public List<String> getChangelog(Version ver) {
if (!isValid()) return new ArrayList<>();
// God is horrified, and he has every right to be.
return (List<String>)((LinkedHashMap<?, ?>) ((Map<?,?>)json.get("versions")).get(Main.configManager.getStringValue(ConfigEntry.channel))).get(ver.get());
}
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
public static Map<?,?> readJsonFromUrl(String url) throws IOException {
try (InputStream is = new URL(url).openStream()) {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
String jsonText = readAll(rd);
return mapper.readValue(jsonText, Map.class);
}
}
}