aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt')
-rw-r--r--app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt95
1 files changed, 95 insertions, 0 deletions
diff --git a/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt
index 6e05579..ac45e2a 100644
--- a/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt
+++ b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt
@@ -1,12 +1,17 @@
package xyz.brysonsteck.serverfordummies
+import kotlinx.coroutines.*
+import kotlinx.coroutines.javafx.JavaFx
+
import java.io.File
import java.io.IOException
import java.awt.Checkbox
import java.util.Properties
+import java.net.URL
import javafx.beans.value.ChangeListener
import javafx.beans.value.ObservableValue
+import javafx.concurrent.Task
import javafx.beans.property.BooleanProperty
import javafx.collections.FXCollections
import javafx.fxml.FXML
@@ -19,18 +24,24 @@ import javafx.scene.control.Spinner
import javafx.scene.control.TitledPane
import javafx.scene.control.ButtonBar
import javafx.scene.control.CheckBox
+import javafx.scene.control.ProgressBar
import javafx.scene.layout.Border
import javafx.scene.layout.BorderStroke
import javafx.scene.layout.GridPane
import javafx.scene.layout.Pane
import javafx.scene.layout.HBox
+import javafx.scene.layout.VBox
import javafx.scene.text.TextAlignment
+import javafx.scene.text.Text
import javafx.scene.Scene
import javafx.scene.input.MouseEvent
import javafx.stage.FileChooser
import javafx.stage.FileChooser.ExtensionFilter
import javafx.stage.DirectoryChooser
+import javafx.stage.Modality
+import javafx.stage.Stage
import javafx.event.EventHandler
+import Download
class PrimaryController {
@FXML
@@ -82,6 +93,8 @@ class PrimaryController {
@FXML
lateinit private var maxTickSpinner: Spinner<kotlin.Int>
@FXML
+ lateinit private var statusBar: Label
+ @FXML
lateinit private var progressBar: ProgressBar
@FXML
@@ -92,6 +105,7 @@ class PrimaryController {
val result = dirChooser.showDialog(null)
if (result != null) {
currentDirectoryLabel.text = result.absolutePath
+ val real = loadServerDir(result.absolutePath)
parentPane.isDisable = false
worldSettingsPane.isDisable = false
buttonBar.isDisable = false
@@ -115,10 +129,91 @@ class PrimaryController {
@FXML
private fun onCheckboxClick() {
+
}
@FXML
private fun onSpinnerChange() {
}
+
+ @FXML
+ private fun onBuild() {
+ GlobalScope.launch(Dispatchers.Default) {
+ withContext(Dispatchers.JavaFx){statusBar.text = "Downloading a file..."}
+ progressBar.isVisible = true
+ val download = Download(URL("https://brysonsteck.xyz/pub/a-really-big-file"))
+ download.start()
+ while (download.status() == Download.Status.DOWNLOADING) {
+ var prog = (download.downloaded.toDouble() / download.contentLength.toDouble())
+ // for whatever reason I need to print something to the screen in order for it to work
+ print("")
+ if (prog >= 0.01) {
+ withContext(Dispatchers.JavaFx) {progressBar.progress = prog}
+ }
+ Thread.sleep(300)
+ }
+ progressBar.isVisible = false
+ withContext(Dispatchers.JavaFx){statusBar.text = "Ready."}
+ }
+ }
+
+ @FXML
+ private fun onStart() {
+
+ }
+
+ private fun createDialog() {
+ val dialog = Stage();
+ dialog.initModality(Modality.APPLICATION_MODAL);
+ val dialogScene = Scene(App().loadFXML("dialog"), 300.0, 200.0);
+ dialog.setScene(dialogScene);
+ dialog.show();
+ }
+
+ private fun loadServerDir(dir: String): Boolean {
+ createDialog()
+ var directory = dir
+ var hasServer = false
+ if (!File(directory).isDirectory) {
+ return false;
+ }
+
+ if (directory[directory.length-1] != File.separatorChar)
+ directory += File.separatorChar
+
+ val hasDummy = File(directory + "ServerForDummies").isDirectory
+
+ for (i in 20 downTo 8) {
+ for (j in 15 downTo 0) {
+ var spigotFile: String = ""
+ if (j == 0)
+ spigotFile += "spigot-1.$i.jar"
+ else
+ spigotFile += "spigot-1.$i.$j.jar";
+
+ hasServer = File(directory + spigotFile).isFile || File(directory + "server.jar").isFile
+ if (hasServer)
+ break;
+ }
+ }
+
+ val hasProperties = File(directory + File.separator + "server.properties").isFile
+
+ if (hasDummy && hasServer) {
+ // read jproperties
+ println("read jproperties")
+ } else if (hasDummy && !hasServer && hasProperties) {
+ // just needs to be built
+ println("build")
+ } else if (!hasDummy && hasServer) {
+ // server created externally
+ println("server made externally")
+ } else {
+ // assume clean directory
+ println("none")
+ }
+
+ return true;
+ }
} \ No newline at end of file