diff --git a/src/de/bricked/game/levels/LevelPackHandler.java b/src/de/bricked/game/levels/LevelPackHandler.java index cda1452988b77d6b8bcaa52d1708c9248fca84fe..216f162564bda1f268e2d28a0b8156855a3a84a8 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 324508766bfb2ca53b63e9ed085ff9b9cfe73bf8..b68aaa3a7930c51b0525a26b114f133ec4cc3418 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 bc9214928a97266a61bdaaf473b6826b0b377a63..06873f00c9450d747ef23e27744e5503b803bd73 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 8c2377e952f1e617ac3a35befdeff135589a52d3..886a10633914b5a6ae76fb1feeb0df69f0a3e705 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 0000000000000000000000000000000000000000..0c6f65c8cc87f2c0219b765d31147ae73c24310f --- /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 4aae5ac38919b376cbbec957365e5244943e3cc8..accdf3c1ba7054690f7da80a9f408e59c54ec252 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 {