diff --git a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt index f2cb0c5..4564b90 100644 --- a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt +++ b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt @@ -8,6 +8,13 @@ class FoundationGradlePlugin : Plugin { override fun apply(project: Project) { project.extensions.create("foundation") val setupPaperServer = project.tasks.create("setupPaperServer") + project.afterEvaluate { -> + setupPaperServer.dependsOn(*project.subprojects + .filter { it.name.startsWith("foundation-") } + .map { it.tasks.getByName("build") } + .toTypedArray() + ) + } val runPaperServer = project.tasks.create("runPaperServer") runPaperServer.dependsOn(setupPaperServer) } diff --git a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt index 177f88d..ea4adfc 100644 --- a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt +++ b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt @@ -57,4 +57,9 @@ object Util { return outPath } + + fun isPlatformWindows(): Boolean { + val os = System.getProperty("os.name") + return os != null && os.lowercase().startsWith("windows") + } } \ No newline at end of file diff --git a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt index 35d991e..df66427 100644 --- a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt +++ b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt @@ -42,25 +42,28 @@ class BackupCommand( return true } - try { - val server = sender.server - server.scheduler.runTaskAsynchronously(plugin, Runnable { - runBackup(server) - }) - } catch (e: Exception) { - sender.sendMessage(String.format("Failed to backup: %s", e.message)) + val server = sender.server + server.scheduler.runTaskAsynchronously(plugin) { -> + runBackup(server, sender) } - return true } // TODO: Pull backup creation code into a separate service. - private fun runBackup(server: Server) = try { + private fun runBackup(server: Server, sender: CommandSender? = null) = try { RUNNING.set(true) - server.sendMessage(Util.formatSystemMessage("Backup started.")) + server.scheduler.runTask(plugin) { -> + server.sendMessage(Util.formatSystemMessage("Backup started.")) + } - val backupFileName = String.format("backup-%s.zip", Instant.now().toString()) + val backupTime = Instant.now() + val backupIdentifier = if (Util.isPlatformWindows()) { + backupTime.toEpochMilli().toString() + } else { + backupTime.toString() + } + val backupFileName = String.format("backup-%s.zip", backupIdentifier) val backupPath = backupsPath.resolve(backupFileName) val backupFile = backupPath.toFile() @@ -82,9 +85,18 @@ class BackupCommand( ) } Unit + } catch (e: Exception) { + if (sender != null) { + server.scheduler.runTask(plugin) { -> + sender.sendMessage(String.format("Failed to backup: %s", e.message)) + } + } + plugin.slF4JLogger.warn("Failed to backup.", e) } finally { RUNNING.set(false) - server.sendMessage(Util.formatSystemMessage("Backup finished.")) + server.scheduler.runTask(plugin) { -> + server.sendMessage(Util.formatSystemMessage("Backup finished.")) + } } private fun backupPlugins(server: Server, zipStream: ZipOutputStream) { @@ -92,7 +104,7 @@ class BackupCommand( addDirectoryToZip(zipStream, server.pluginsFolder.toPath()) } catch (e: IOException) { // TODO: Add error handling. - e.printStackTrace() + plugin.slF4JLogger.warn("Failed to backup plugins.", e) } }