From 4426291d04ce4b27e9a97ccdd1e3390f3e531823 Mon Sep 17 00:00:00 2001 From: Max Wittig <max.wittig95@gmail.com> Date: Thu, 27 Oct 2016 22:49:30 +0200 Subject: [PATCH] you can now download levelpacks from raw url --- .../bricked/game/levels/LevelPackHandler.java | 3 +- .../bricked/game/levels/LevelPackParser.java | 36 +++++++------ .../bricked/ui/LevelPackSelectController.java | 27 ++++++++-- src/de/bricked/ui/LevelPackSelectGUI.fxml | 5 ++ src/de/bricked/utils/Downloader.java | 54 +++++++++++++++++++ src/de/bricked/utils/FileUtils.java | 2 +- 6 files changed, 105 insertions(+), 22 deletions(-) create mode 100644 src/de/bricked/utils/Downloader.java diff --git a/src/de/bricked/game/levels/LevelPackHandler.java b/src/de/bricked/game/levels/LevelPackHandler.java index cda1452..216f162 100644 --- a/src/de/bricked/game/levels/LevelPackHandler.java +++ b/src/de/bricked/game/levels/LevelPackHandler.java @@ -6,7 +6,6 @@ import tools.PathUtils; import java.io.*; import java.nio.file.FileSystems; import java.nio.file.Files; -import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -50,7 +49,7 @@ public class LevelPackHandler for(String currentFileContent : getFileContent()) { LevelPackParser levelPackParser = new LevelPackParser(currentFileContent); - levelPacks.add(levelPackParser.read()); + levelPacks.add(levelPackParser.getLevelPack()); } return sort(levelPacks); diff --git a/src/de/bricked/game/levels/LevelPackParser.java b/src/de/bricked/game/levels/LevelPackParser.java index 3245087..b68aaa3 100644 --- a/src/de/bricked/game/levels/LevelPackParser.java +++ b/src/de/bricked/game/levels/LevelPackParser.java @@ -14,10 +14,12 @@ public class LevelPackParser { private String fileContents; + private LevelPack levelPack; public LevelPackParser(String fileContents) { this.fileContents = fileContents; + read(); } private ArrayList<Level> parseLevels(JsonArray levelPackArray) @@ -71,21 +73,25 @@ public class LevelPackParser return levels; } - public LevelPack read() + private void read() + { + try + { + JsonObject root = new JsonParser().parse(fileContents).getAsJsonObject(); + String packageName = root.get("name").getAsString(); + String packageAuthor = root.get("author").getAsString(); + String packageVersion = root.get("version").getAsString(); + ArrayList<Level> levels = parseLevels(root.get("levelPack").getAsJsonArray()); + levelPack = new LevelPack(packageName, packageAuthor, packageVersion, levels); + } + catch(Exception e) + { + Logger.log(LogLevel.ERROR, Logger.exceptionToString(e)); + } + } + + public LevelPack getLevelPack() { - try - { - JsonObject root = new JsonParser().parse(fileContents).getAsJsonObject(); - String packageName = root.get("name").getAsString(); - String packageAuthor = root.get("author").getAsString(); - String packageVersion = root.get("version").getAsString(); - ArrayList<Level> levels = parseLevels(root.get("levelPack").getAsJsonArray()); - return new LevelPack(packageName, packageAuthor, packageVersion, levels); - } - catch(Exception e) - { - Logger.log(LogLevel.ERROR, Logger.exceptionToString(e)); - } - return null; + return levelPack; } } \ No newline at end of file diff --git a/src/de/bricked/ui/LevelPackSelectController.java b/src/de/bricked/ui/LevelPackSelectController.java index bc92149..06873f0 100644 --- a/src/de/bricked/ui/LevelPackSelectController.java +++ b/src/de/bricked/ui/LevelPackSelectController.java @@ -2,23 +2,23 @@ package de.bricked.ui; import java.io.IOException; import java.util.Locale; +import java.util.Optional; import java.util.ResourceBundle; import de.bricked.game.Game; import de.bricked.game.levels.LevelPack; import de.bricked.game.levels.LevelPackHandler; import de.bricked.ui.cells.LevelPackCell; +import de.bricked.utils.Downloader; import javafx.application.Platform; import javafx.collections.FXCollections; +import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; -import javafx.scene.control.Label; -import javafx.scene.control.ListCell; -import javafx.scene.control.ListView; -import javafx.scene.control.ScrollPane; +import javafx.scene.control.*; import javafx.scene.control.ScrollPane.ScrollBarPolicy; import javafx.scene.image.Image; import javafx.scene.input.KeyEvent; @@ -36,6 +36,7 @@ public class LevelPackSelectController @FXML private AnchorPane mainPane; @FXML private ScrollPane pane; @FXML private Label labelLevelPack; + @FXML private Button downloadLevelpackButton; public Stage stage; public Image icon = new Image("de/bricked/resources/icon.png"); @@ -76,6 +77,24 @@ public class LevelPackSelectController } }); + downloadLevelpackButton.setOnAction(new EventHandler<ActionEvent>() + { + @Override + public void handle(ActionEvent event) + { + TextInputDialog textInputDialog = new TextInputDialog(); + textInputDialog.setHeaderText(null); + textInputDialog.setContentText("URL of the raw levelpack"); + Optional<String> result = textInputDialog.showAndWait(); + if(result.isPresent()) + { + new Downloader().download(result.get()); + reload(); + } + + } + }); + stage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override diff --git a/src/de/bricked/ui/LevelPackSelectGUI.fxml b/src/de/bricked/ui/LevelPackSelectGUI.fxml index 8c2377e..886a106 100644 --- a/src/de/bricked/ui/LevelPackSelectGUI.fxml +++ b/src/de/bricked/ui/LevelPackSelectGUI.fxml @@ -19,5 +19,10 @@ </font> </Button> <ScrollPane fx:id="pane" layoutX="75.0" layoutY="126.0" maxHeight="549.0" maxWidth="500.0" prefHeight="549.0" prefWidth="500.0" /> + <Button fx:id="downloadLevelpackButton" layoutX="434.0" layoutY="715.0" minHeight="42.0" minWidth="141.0" mnemonicParsing="false" prefHeight="42.0" prefWidth="141.0" text="Download" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="20.0" /> + </font> + </Button> </children> </AnchorPane> diff --git a/src/de/bricked/utils/Downloader.java b/src/de/bricked/utils/Downloader.java new file mode 100644 index 0000000..0c6f65c --- /dev/null +++ b/src/de/bricked/utils/Downloader.java @@ -0,0 +1,54 @@ +package de.bricked.utils; + + +import de.bricked.game.levels.LevelPack; +import de.bricked.game.levels.LevelPackParser; +import tools.PathUtils; + +import java.io.File; +import java.io.FileWriter; +import java.nio.file.Paths; + +public class Downloader +{ + private LevelPack levelPack; + private LevelPackParser levelPackParser; + private String downloadedString = ""; + private String outDir; + private String dirname = "/deadspaghetti/bricked/levelpacks/"; + + public Downloader() + { + outDir = PathUtils.getOSindependentPath()+dirname; + PathUtils.checkFolder(new File(outDir)); + } + + public void download(String url) + { + downloadedString = FileUtils.getURLContent(url); + levelPackParser = new LevelPackParser(downloadedString); + levelPack = levelPackParser.getLevelPack(); + save(); + } + + private void save() + { + try + { + FileWriter fileWriter = new FileWriter(outDir+getPackName()+".json"); + fileWriter.write(downloadedString); + fileWriter.flush(); + fileWriter.close(); + } + catch (Exception e) + { + e.printStackTrace(); + } + + } + + private String getPackName() + { + return levelPack.getPackageName(); + } +} diff --git a/src/de/bricked/utils/FileUtils.java b/src/de/bricked/utils/FileUtils.java index 4aae5ac..accdf3c 100644 --- a/src/de/bricked/utils/FileUtils.java +++ b/src/de/bricked/utils/FileUtils.java @@ -44,7 +44,7 @@ public class FileUtils return null; } - public static String getURLContentFromJar(String urlString) + public static String getURLContent(String urlString) { try { -- GitLab