diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt index dc0262224..d60ded2d8 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt @@ -6,6 +6,7 @@ import javafx.scene.control.Tab import javafx.scene.control.TabPane import javafx.scene.image.Image import javafx.scene.input.KeyCode +import javafx.stage.FileChooser import kotlinx.coroutines.runBlocking import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController import net.mamoe.mirai.console.graphical.model.BotModel @@ -16,7 +17,7 @@ import tornadofx.* class PrimaryView : View() { private val controller = find() - private lateinit var mainTabPane : TabPane + private lateinit var mainTabPane: TabPane override val root = borderpane { @@ -72,7 +73,7 @@ class PrimaryView : View() { center = jfxTabPane { - logTab("Main", controller.mainLog) + logTab("Main", controller.mainLog, closeable = false) tab("Plugins").content = find().root @@ -93,13 +94,35 @@ class PrimaryView : View() { private fun TabPane.logTab( text: String? = null, logs: ObservableList, + closeable: Boolean = true, op: Tab.() -> Unit = {} ) = tab(text) { vbox { buttonbar { - button("导出日志").action { } - button("关闭").action { close() } + + button("导出日志").action { + val path = chooseFile( + "选择保存路径", + arrayOf(FileChooser.ExtensionFilter("日志", "txt")), + FileChooserMode.Save + ) { + initialFileName = "$text.txt" + } + runAsyncWithOverlay { + path.firstOrNull()?.run { + if (!exists()) createNewFile() + writer().use { + logs.forEach { log -> it.appendln(log) } + } + true + } ?: false + }.ui {// isSucceed: Boolean -> + // notify something + } + + if (closeable) button("关闭").action { close() } + } } listview(logs) {