From 0be36f71b8741046474a87f9d56c8676a636bc36 Mon Sep 17 00:00:00 2001 From: Him188 Date: Mon, 17 Feb 2020 14:13:18 +0800 Subject: [PATCH 1/9] More useful `.incoming` --- .../kotlin/net.mamoe.mirai/event/MessageSubscribers.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt index 1c32ad94b..052e5ebe3 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt @@ -129,9 +129,11 @@ inline fun Bot.subscribeFriendMessages(crossinline listeners: MessageSubscri /** * 返回一个指定事件的接收通道 + * + * @param capacity 同 [Channel] 的参数, 参见 [Channel.Factory] 中的常量. */ -inline fun Bot.incoming(): ReceiveChannel { - return Channel(8).apply { +inline fun CoroutineScope.incoming(capacity: Int = Channel.RENDEZVOUS): ReceiveChannel { + return Channel(capacity).apply { subscribeAlways { send(this) } From 69ff37765458c89fa77998e6052687cdaa346c92 Mon Sep 17 00:00:00 2001 From: Him188 Date: Mon, 17 Feb 2020 14:14:16 +0800 Subject: [PATCH 2/9] Add references --- .../net.mamoe.mirai/event/MessageSubscribers.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt index 052e5ebe3..5cb5489c0 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt @@ -28,6 +28,8 @@ import kotlin.contracts.contract /** * 订阅来自所有 [Bot] 的所有联系人的消息事件. 联系人可以是任意群或任意好友或临时会话. + * + * @see CoroutineScope.incoming */ @UseExperimental(ExperimentalContracts::class) @MessageDsl @@ -49,6 +51,8 @@ inline fun CoroutineScope.subscribeMessages(crossinline listeners: MessageSu /** * 订阅来自所有 [Bot] 的所有群消息事件 + * + * @see CoroutineScope.incoming */ @UseExperimental(ExperimentalContracts::class) @MessageDsl @@ -65,6 +69,8 @@ inline fun CoroutineScope.subscribeGroupMessages(crossinline listeners: Mess /** * 订阅来自所有 [Bot] 的所有好友消息事件 + * + * @see CoroutineScope.incoming */ @UseExperimental(ExperimentalContracts::class) @MessageDsl @@ -81,6 +87,8 @@ inline fun CoroutineScope.subscribeFriendMessages(crossinline listeners: Mes /** * 订阅来自这个 [Bot] 的所有联系人的消息事件. 联系人可以是任意群或任意好友或临时会话. + * + * @see CoroutineScope.incoming */ @UseExperimental(ExperimentalContracts::class) @MessageDsl @@ -97,6 +105,8 @@ inline fun Bot.subscribeMessages(crossinline listeners: MessageSubscribersBu /** * 订阅来自这个 [Bot] 的所有群消息事件 + * + * @see CoroutineScope.incoming */ @UseExperimental(ExperimentalContracts::class) @MessageDsl @@ -113,6 +123,8 @@ inline fun Bot.subscribeGroupMessages(crossinline listeners: MessageSubscrib /** * 订阅来自这个 [Bot] 的所有好友消息事件. + * + * @see CoroutineScope.incoming */ @UseExperimental(ExperimentalContracts::class) @MessageDsl @@ -131,6 +143,10 @@ inline fun Bot.subscribeFriendMessages(crossinline listeners: MessageSubscri * 返回一个指定事件的接收通道 * * @param capacity 同 [Channel] 的参数, 参见 [Channel.Factory] 中的常量. + * + * @see subscribeFriendMessages + * @see subscribeMessages + * @see subscribeGroupMessages */ inline fun CoroutineScope.incoming(capacity: Int = Channel.RENDEZVOUS): ReceiveChannel { return Channel(capacity).apply { From 24eaa15c0d3b52530aebcde60d6d0577c1ce0b8e Mon Sep 17 00:00:00 2001 From: ryoii Date: Mon, 17 Feb 2020 18:30:27 +0800 Subject: [PATCH 3/9] graphical console import jfoenix UI --- mirai-console-graphical/build.gradle.kts | 1 + .../kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/mirai-console-graphical/build.gradle.kts b/mirai-console-graphical/build.gradle.kts index e52642d61..ab92cffa2 100644 --- a/mirai-console-graphical/build.gradle.kts +++ b/mirai-console-graphical/build.gradle.kts @@ -29,6 +29,7 @@ dependencies { api(project(":mirai-console")) runtimeOnly(files("../mirai-core-qqandroid/build/classes/kotlin/jvm/main")) api(group = "no.tornado", name = "tornadofx", version = "1.7.19") + api(group = "com.jfoenix", name = "jfoenix", version = "9.0.8") api("org.bouncycastle:bcprov-jdk15on:1.64") // classpath is not set correctly by IDE } 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 1900e25cc..51e229cbd 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 @@ -2,7 +2,6 @@ package net.mamoe.mirai.console.graphical.view import javafx.scene.control.TabPane import javafx.stage.Modality -import net.mamoe.mirai.Bot import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController import tornadofx.* From efa404d0d3c5b186c5874e611a2363044c85df07 Mon Sep 17 00:00:00 2001 From: Him188 Date: Mon, 17 Feb 2020 18:36:08 +0800 Subject: [PATCH 4/9] Try fix compilation bug --- .../event/internal/InternalEventListeners.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt index c72941469..e439a0974 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt @@ -90,6 +90,15 @@ internal object EventListenerManager { private val lock = atomic(false) + private fun setLockValue(value: Boolean) { + lock.value = value + } + + @Suppress("BooleanLiteralArgument") + private fun trySetLockTrue(): Boolean { + return lock.compareAndSet(false, true) + } + @Suppress("UNCHECKED_CAST", "BooleanLiteralArgument") internal tailrec fun get(clazz: KClass): EventListeners { registries.forEach { @@ -97,10 +106,10 @@ internal object EventListenerManager { return it.listeners as EventListeners } } - if (lock.compareAndSet(false, true)) { + if (trySetLockTrue()) { val registry = Registry(clazz, EventListeners()) registries.addLast(registry) - lock.value = false + setLockValue(false) return registry.listeners as EventListeners } return get(clazz) From 8985c20c0ce4328a4106008068a19254aa81205e Mon Sep 17 00:00:00 2001 From: ryoii Date: Mon, 17 Feb 2020 23:10:14 +0800 Subject: [PATCH 5/9] f*ck JFoenix --- .../console/graphical/util/JFoenixAdaptor.kt | 28 ++++++ .../console/graphical/view/PrimaryView.kt | 90 ++++++++++++------- 2 files changed, 86 insertions(+), 32 deletions(-) create mode 100644 mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt new file mode 100644 index 000000000..726378f61 --- /dev/null +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt @@ -0,0 +1,28 @@ +package net.mamoe.mirai.console.graphical.util + +import com.jfoenix.controls.JFXButton +import com.jfoenix.controls.JFXListView +import com.jfoenix.controls.JFXTabPane +import javafx.collections.ObservableList +import javafx.event.EventTarget +import javafx.scene.Node +import javafx.scene.control.Button +import javafx.scene.control.ListView +import javafx.scene.control.TabPane +import tornadofx.SortedFilteredList +import tornadofx.attachTo + +internal fun EventTarget.jfxTabPane(op: TabPane.() -> Unit = {}) = JFXTabPane().attachTo(this, op) + +internal fun EventTarget.jfxButton(text: String = "", graphic: Node? = null, op: Button.() -> Unit = {}) = + JFXButton(text).attachTo(this, op) { + if (graphic != null) it.graphic = graphic + } + +internal fun EventTarget.jfxListView(values: ObservableList? = null, op: ListView.() -> Unit = {}) = + JFXListView().attachTo(this, op) { + if (values != null) { + if (values is SortedFilteredList) values.bindTo(it) + else it.items = values + } + } 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 51e229cbd..cf0005a01 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 @@ -1,9 +1,15 @@ package net.mamoe.mirai.console.graphical.view +import com.jfoenix.controls.JFXListCell import javafx.scene.control.TabPane -import javafx.stage.Modality +import javafx.scene.image.Image import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController +import net.mamoe.mirai.console.graphical.model.BotModel +import net.mamoe.mirai.console.graphical.util.jfxButton +import net.mamoe.mirai.console.graphical.util.jfxListView +import net.mamoe.mirai.console.graphical.util.jfxTabPane import tornadofx.* +import java.io.FileInputStream class PrimaryView : View() { @@ -11,45 +17,65 @@ class PrimaryView : View() { override val root = borderpane { - top = menubar { - menu("机器人") { - item("登录").action { - find().openModal( - modality = Modality.APPLICATION_MODAL, - resizable = false - ) + prefWidth = 1000.0 + prefHeight = 650.0 + + left = vbox { + + imageview(Image(FileInputStream("logo.png"))) + + // bot list + jfxListView(controller.botList) { + fitToParentSize() +// prefHeight = 100.0 + setCellFactory { + object : JFXListCell() { + init { + onDoubleClick { + (center as TabPane).tab(item.uin.toString()) { + listview(item.logHistory) + select() + onDoubleClick { close() } + } + } + } + + override fun updateItem(item: BotModel?, empty: Boolean) { + super.updateItem(item, empty) + if (item != null && !empty) { + graphic = null + text = item.uin.toString() + } else { + graphic = null + text = "" + } + } + } + } + } + + gridpane { + row { + jfxButton("登录") + jfxButton("插件") + jfxButton("设置") } } } - left = listview(controller.botList) { - fitToParentHeight() + center = jfxTabPane { + tab("Main") { + listview(controller.mainLog) { - cellFormat { - - graphic = vbox { - label(it.uin.toString()) -// label(stringBinding(it.botProperty) { if (value != null) value.nick else "登陆中" }) - } - - onDoubleClick { - (center as TabPane).tab(it.uin.toString()) { - listview(it.logHistory) - - isClosable = true - select() + fitToParentSize() + cellFormat { + graphic = label(it) { + maxWidthProperty().bind(this@listview.widthProperty()) + isWrapText = true + } } } } } - - center = tabpane { - tab("Main") { - listview(controller.mainLog) - - isClosable = false - } - } } - } \ No newline at end of file From 7ff9906bca22664fb0fd7a45861b51783b30d915 Mon Sep 17 00:00:00 2001 From: ryoii Date: Tue, 18 Feb 2020 01:24:14 +0800 Subject: [PATCH 6/9] f*ck JFoenix --- .../console/graphical/util/JFoenixAdaptor.kt | 28 ++++++++--- .../console/graphical/view/LoginFragment.kt | 20 +++++--- .../console/graphical/view/PrimaryView.kt | 49 ++++++++++++++----- .../java/demo/subscribe/SubscribeSamples.kt | 4 +- .../src/main/kotlin/demo/gentleman/Main.kt | 2 +- 5 files changed, 76 insertions(+), 27 deletions(-) diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt index 726378f61..94663e510 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt @@ -1,16 +1,14 @@ package net.mamoe.mirai.console.graphical.util -import com.jfoenix.controls.JFXButton -import com.jfoenix.controls.JFXListView -import com.jfoenix.controls.JFXTabPane +import com.jfoenix.controls.* +import javafx.beans.value.ObservableValue import javafx.collections.ObservableList import javafx.event.EventTarget import javafx.scene.Node -import javafx.scene.control.Button -import javafx.scene.control.ListView -import javafx.scene.control.TabPane +import javafx.scene.control.* import tornadofx.SortedFilteredList import tornadofx.attachTo +import tornadofx.bind internal fun EventTarget.jfxTabPane(op: TabPane.() -> Unit = {}) = JFXTabPane().attachTo(this, op) @@ -19,6 +17,24 @@ internal fun EventTarget.jfxButton(text: String = "", graphic: Node? = null, op: if (graphic != null) it.graphic = graphic } +fun EventTarget.jfxTextfield(value: String? = null, op: TextField.() -> Unit = {}) = JFXTextField().attachTo(this, op) { + if (value != null) it.text = value +} + +fun EventTarget.jfxTextfield(property: ObservableValue, op: TextField.() -> Unit = {}) = jfxTextfield().apply { + bind(property) + op(this) +} + +fun EventTarget.jfxPasswordfield(value: String? = null, op: TextField.() -> Unit = {}) = JFXPasswordField().attachTo(this, op) { + if (value != null) it.text = value +} + +fun EventTarget.jfxPasswordfield(property: ObservableValue, op: TextField.() -> Unit = {}) = jfxPasswordfield().apply { + bind(property) + op(this) +} + internal fun EventTarget.jfxListView(values: ObservableList? = null, op: ListView.() -> Unit = {}) = JFXListView().attachTo(this, op) { if (values != null) { diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt index 1290b7808..c0f1b460c 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt @@ -1,27 +1,31 @@ package net.mamoe.mirai.console.graphical.view +import com.jfoenix.controls.JFXTextField import javafx.beans.property.SimpleStringProperty import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController +import net.mamoe.mirai.console.graphical.util.jfxButton +import net.mamoe.mirai.console.graphical.util.jfxPasswordfield +import net.mamoe.mirai.console.graphical.util.jfxTextfield import tornadofx.* class LoginFragment : Fragment() { private val controller = find(FX.defaultScope) - private val qq = SimpleStringProperty() - private val psd = SimpleStringProperty() + private val qq = SimpleStringProperty("0") + private val psd = SimpleStringProperty("") override val root = form { fieldset("登录") { field("QQ") { - textfield(qq) + jfxTextfield(qq) } field("密码") { - passwordfield(psd) - } - button("登录").action { - controller.login(qq.value, psd.value) - close() + jfxPasswordfield(psd) } } + jfxButton("登录").action { + controller.login(qq.value, psd.value) + close() + } } } \ No newline at end of file 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 cf0005a01..291ef9a4d 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 @@ -1,8 +1,13 @@ package net.mamoe.mirai.console.graphical.view import com.jfoenix.controls.JFXListCell +import javafx.geometry.Insets +import javafx.geometry.Pos +import javafx.scene.control.Tab import javafx.scene.control.TabPane import javafx.scene.image.Image +import javafx.scene.paint.Color +import javafx.scene.text.FontWeight import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController import net.mamoe.mirai.console.graphical.model.BotModel import net.mamoe.mirai.console.graphical.util.jfxButton @@ -27,16 +32,23 @@ class PrimaryView : View() { // bot list jfxListView(controller.botList) { fitToParentSize() -// prefHeight = 100.0 + setCellFactory { object : JFXListCell() { + var tab: Tab? = null + init { onDoubleClick { - (center as TabPane).tab(item.uin.toString()) { - listview(item.logHistory) - select() - onDoubleClick { close() } + if (tab == null) { + (center as TabPane).tab(item.uin.toString()) { + listview(item.logHistory) + onDoubleClick { close() } + tab = this + } + } else { + (center as TabPane).tabs.add(tab) } + tab?.select() } } @@ -54,11 +66,26 @@ class PrimaryView : View() { } } - gridpane { - row { - jfxButton("登录") - jfxButton("插件") - jfxButton("设置") + hbox { + padding = Insets(10.0) + spacing = 10.0 + alignment = Pos.CENTER + + jfxButton("L").action { + find().openModal() + } + jfxButton("P") + jfxButton("S") + + + style { backgroundColor += c("00BCD4") } + children.style(true) { + backgroundColor += c("00BCD4") + fontSize = 15.px + fontWeight = FontWeight.BOLD + textFill = Color.WHITE + borderRadius += box(25.px) + backgroundRadius += box(25.px) } } } @@ -78,4 +105,4 @@ class PrimaryView : View() { } } } -} \ No newline at end of file +} diff --git a/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt b/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt index 79c921519..88931f882 100644 --- a/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt +++ b/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt @@ -28,8 +28,10 @@ import net.mamoe.mirai.message.sendAsImageTo import net.mamoe.mirai.qqandroid.Bot import net.mamoe.mirai.qqandroid.QQAndroid import net.mamoe.mirai.utils.FileBasedDeviceInfo +import net.mamoe.mirai.utils.MiraiInternalAPI import java.io.File +@MiraiInternalAPI private fun readTestAccount(): BotAccount? { val file = File("testAccount.txt") if (!file.exists() || !file.canRead()) { @@ -59,7 +61,7 @@ suspend fun main() { bot.messageDSL() directlySubscribe(bot) - bot.network.awaitDisconnection()//等到直到断开连接 + bot.join()//等到直到断开连接 } /** diff --git a/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt b/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt index bd15503f9..5efe33cd8 100644 --- a/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt +++ b/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt @@ -176,7 +176,7 @@ suspend fun main() { } - bot.network.awaitDisconnection()//等到直到断开连接 + bot.join()//等到直到断开连接 } private fun newTestTempFile(filename: String = "${UUID.randomUUID()}", suffix: String = ".tmp"): File = From 6601f9a06cd3bafbfd09dddf90fc65484bdbc9b6 Mon Sep 17 00:00:00 2001 From: Him188 Date: Tue, 18 Feb 2020 11:45:29 +0800 Subject: [PATCH 7/9] Revert workflow main.yml --- .github/workflows/main.yml | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 70e881e1f..fa162c885 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,16 +8,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: Setup Java JDK - uses: actions/setup-java@v1.3.0 - with: - # The Java version to make available on the path. Takes a whole or semver Java version, or 1.x syntax (e.g. 1.8 => Java 8.x) - java-version: 11 - # The package type (jre, jdk, jdk+fx) - java-package: jdk+fx - - name: Gradle Command - uses: eskatos/gradle-command-action@v1 - with: - # Gradle command line arguments, see gradle --help - arguments: build -x mirai-core:jvmTest + - uses: actions/checkout@v1 + - name: setup-android + uses: msfjarvis/setup-android@0.2 + with: + # Gradle tasks to run - If you want to run ./gradlew assemble, specify assemble here. + gradleTasks: build -x mirai-core:jvmTest + From 2e70218c1a046de5cb23666643e89882b6c46d24 Mon Sep 17 00:00:00 2001 From: Him188 Date: Tue, 18 Feb 2020 11:45:57 +0800 Subject: [PATCH 8/9] Set jfx properly --- mirai-console-graphical/build.gradle.kts | 6 +++++ settings.gradle | 34 +++++++++++------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/mirai-console-graphical/build.gradle.kts b/mirai-console-graphical/build.gradle.kts index ab92cffa2..29e821737 100644 --- a/mirai-console-graphical/build.gradle.kts +++ b/mirai-console-graphical/build.gradle.kts @@ -1,9 +1,15 @@ plugins { id("kotlinx-serialization") + id("org.openjfx.javafxplugin") version "0.0.8" id("kotlin") id("java") } +javafx { + version = "11" + modules = listOf("javafx.controls") + //mainClassName = "Application" +} apply(plugin = "com.github.johnrengelman.shadow") diff --git a/settings.gradle b/settings.gradle index 9dc004651..cd3ee4be4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -44,7 +44,6 @@ include(':mirai-core-qqandroid') include(':mirai-japt') include(':mirai-console') -include(':mirai-console-graphical') include(':mirai-console-terminal') //include(':mirai-api') include(':mirai-api-http') @@ -54,24 +53,23 @@ include(':mirai-demos:mirai-demo-java') include(':mirai-plugins') include(':mirai-plugins:image-sender') -def javaVersion = System.getProperty("java.version") -def versionPos = javaVersion.indexOf(".") -if (versionPos==-1) versionPos = javaVersion.indexOf("-") -if (versionPos==-1){ - println("jdk version unknown") -}else{ - def javaVersionNum = javaVersion.substring(0, versionPos).toInteger() - if (javaVersionNum >= 11) { - println("jdk版本为 "+ javaVersionNum) - //include(':mirai-debug') - } else { - println("当前使用的 JDK 版本为 ${System.getProperty("java.version")}, 最低需要 JDK 11 才能引入模块 `:mirai-debug`") +try{ + def javaVersion = System.getProperty("java.version") + def versionPos = javaVersion.indexOf(".") + if (versionPos==-1) versionPos = javaVersion.indexOf("-") + if (versionPos==-1){ + println("jdk version unknown") + }else{ + def javaVersionNum = javaVersion.substring(0, versionPos).toInteger() + if (javaVersionNum >= 11) { + println("jdk版本为 "+ javaVersionNum) + include(':mirai-console-graphical') + } else { + println("当前使用的 JDK 版本为 ${System.getProperty("java.version")}, 最低需要 JDK 11 才能引入模块 `:mirai-debug`") + } } +}catch(Exception ignored){ + } -project(':mirai-demos:mirai-demo-1').projectDir = file('mirai-demos/mirai-demo-1') -project(':mirai-demos:mirai-demo-gentleman').projectDir = file('mirai-demos/mirai-demo-gentleman') -project(':mirai-demos:mirai-demo-java').projectDir = file('mirai-demos/mirai-demo-java') -project(':mirai-plugins:image-sender').projectDir = file('mirai-plugins/image-sender') - enableFeaturePreview('GRADLE_METADATA') \ No newline at end of file From cb50a337e0b68cba25ceeec58305b86c0ff164e8 Mon Sep 17 00:00:00 2001 From: Him188 Date: Tue, 18 Feb 2020 11:46:10 +0800 Subject: [PATCH 9/9] Load resources --- .../mirai/console/graphical/view/PrimaryView.kt | 2 +- .../src/main/resources/logo.png | Bin 0 -> 3974 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 mirai-console-graphical/src/main/resources/logo.png 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 291ef9a4d..58036ac6e 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 @@ -27,7 +27,7 @@ class PrimaryView : View() { left = vbox { - imageview(Image(FileInputStream("logo.png"))) + imageview(Image(PrimaryView::class.java.classLoader.getResourceAsStream("logo.png"))) // bot list jfxListView(controller.botList) { diff --git a/mirai-console-graphical/src/main/resources/logo.png b/mirai-console-graphical/src/main/resources/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7be6c687173594899ce8f3ef3a8ea47d763168b1 GIT binary patch literal 3974 zcmV;14|(v3P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw000jW zNkl+KhNOk0)oKgGHfZ#pCbcb1!6B&+5~wf;Ol5}qzUSO?&)H}1z4r3+ z+jq{)+{X;Vgg-Q4-K@J`Ywz{@{(j%zW340dW_wcuZ))I84g9~=z>(jT#*t$ZTnxa$ zyCpvGA*q}<#@zN%nYi^s@wMDD=iR@o(~C}iu`mAKLsPqxf&1&usp1PFEB~ZpZ~uri zC-ybp8i($17zQ^-q2D&f)txx+&Oev+Jd-TTig>+acdc}?@9@eWU2Kj^d3Mq@d?nAvSlC^sSs446L!q z#}Uw7ijWr@^SS|i{4cBfYK`J;{bXU6*vXfpAo|6Flatqs$MG#QwLmJNCw}gU*F`oY zFES^g%f)0|W=4{pll6`~@S}(FA6!hZOMQ099Q?!=TCHZg_xshVcQgpSYdqiZZeGlt zu6aNGkE$GQC34jjp46+Jgn<>$`4XBQEcYb#W3d+gC-1m1lE#=X z#vc>UOT?!aW=xFhKqbqufJ!TXi6vQ2rPE1lI>`QOupWJTxo^JuOMg5(u~op=x_(Un zA3Y`$dk=;WPfx|a5O@{Ib6UDQNaL=(*{nrwF^xPkvT;OQl zeKh?1)O7r7aae^gv5YsJOieqMrps`^Cc_yhwYE z^9sk7_)(Q(LxQ-*c_4lqN?fhV_*mTX{mNZ7Up#d0&GOX4KaiCR$h7J9MFD*BOYuFE zlm2Jxgcb2(H0R0QD|3V~f^SNa8d)Q%j7u!n&Fqs#3*OfdJibay*b?zkWN-yXVnsMf z-;G7)aEo;@W|47+05gllRwW1msm2|AsCY|JxI6B-Reto%f06l3((Z8K?QpNWb@X$v zp>FPPHsjDBytTeGn}tMGBg4#-R3nN;7R*p#@}NE|Qh6&8AIj)gOQ8>P-sL>zm?Qi$ zN09reNOS-|D8oO2wdxWyaQ5*?n$zR5Z-01rW5x{SKKDsUpf;)_aXdLZZC-nxVXY^o5 zM;7ax^b;$sye_qP5-RXmwM(QbqmC$L5Y~rUfKT znt&kuVu`3xmu7n?)9v&lw;qxA?WBFZw<7?Ay{*>pm^C2M5N*(SyH!ZWQG1STX-Xa# z6fzy`!TjS;e(%N{;4DKX??H6B3Xc`MX@uOram-&v_>gCSQ6L_|3nnG-X!!Mg4aKQM zv6c2j?v0Jf{a^c-@R99pM*tY|Hs50cN6$|K)*Iu_xbW^A<_fc&YFj(&AN;dnygMkLdd@-w@4 zc}E$rt?dNB5GHSc-Qv)qYI>|`g$OFcQu7?Smke@gW-X~I06(MG36Cmh3=kC-DIJcg z(yA|%e!+A5Q?AGHgPS&l_IOq-V^+FbqeCxmiD2~;C^^IuM(VAaR4eYok5ImEMX(LP zuYXEff$z^c*kzGAC(<+ku!iC^@}yLheYBr+J(+?Q5s4}cVl2=A01jDFgK5+f>U)}j zwNcQO8YXL$zF`qmeW1Xpa?Zo68Lm;2=R&mbp(V*L2m^`h9tqSxglpW+!%b})0B<~= zG$Lag+9wD`xm1-tP)8$=mc_mGTxz|VOvF{P=qv!B4%#<3uHg^K=t@BZfrjN#!Kk)X z`)Zv6ZD+4wk$FB!A96l;k!K2;G5#JDvO!vFx+vC>;8_f}dO$|fk}^sg1%V(1$xF`_Sg~?OKxELU zq@h*)Me~Edm+|UDlZ+vIt7Y^Z7DdEC@v%Y}k)+=u3_RDi0bmu?W}rz3k!`e}kpsHx zs`*^HbGb~N9+#QQKFW#;bxTNs%f)xEmKMPK0fClP=mG~W0jSn>8YopJE(8~}t^$@| z$-y5ftz)?#rBSf*vENYPs=g_B6AZT8rjfL-oXUU&Frc9{LALY z!_UoF^ieHjtUgZoq`ZhHSaq!vLYsg{(UwM0ZG;GqR@p2|rmv>tCAV`LW4cgTTHDBTp zT}uZ4Amh{;s%^%o#?@LnP90r$0a$yK@9UyNzo}u+>Z%Sso!2%2s7?8A$6<=)PX0Fw zo$Qxie71LIHqKRG4Wp`kbH*1Gc>ntdh&bxlny=JSTo%Eu^4$^!7%(1uJl8bloo(6B9`^!! zrO^kg#s|&_2&Xl(`Z%)ILs~ir z;FL02%vmClCOox3_CLHs%rB`|+pwU9)6(IUj)-Rm)MMkYuSX@2f-ztMeYVjy0r-bc z3o~4>u`W*^Nmm!{a!pJ!K8u1mj=tqiA`{WVqWO$DLa3wKv(SbGQK?Qn*HEcWjbNpg zEdm#Gux^wd3JA~%K+SF#wLmXTA^kzx&y$jGXNA<)F1ZcXv&V)5d!k7C%#UUU^8}ZK z3D9JQ)`u@K_fPnqIwy20BMQ&7`g9sbn~XWdedRe}RM!xM$Ff$+u~i>7B;B?7(@1XZ8*^5)=SR zKS1Lubc#?TXN@$BD^2R$2Xq1uwVFFaIi($oB291(!t09LvIxnO9&2!U>BEn1X2~WB zox^qEvxUX{!Fr|mK(*@LHi+>7N6Oa-lFp&bD>%nVRrBhQy09nF2^(6%xKiT|?G_qR zVXKBnty&xubLzN@bSS3lW};D%VC7zSV+F`3(p;WIGWF-P?R8l|-}=pmWVyGx{;8Fv z{-D1)l)=hChHFgHTNK-8-)G27L;OFOWh%6!+z!BHQDP>gs zN^K&K?r7s9`e?Y?l>vHLTykr;!Y97*#AXLpAeRk5U;g%gO7`<%`W-h}w?&rUN&y(= z2x{SX!S1xvD8&M(ptLBUj5xDy0(gtbt#xu@#@P3G8Hf zRlfeN&&Y#1=hmjs-;nl?_toyHx6S>HsDDeH9k#H(hhlG;a+~#XwZ_&Vt2NZ+u_tPB zY9|jgdV`uuaw=D~7GYDFr`%7HNct;7Sz46-D+_Yuy?-W8?Ih^sSU^Ei8d zI(rPs=F)XbN#37SX|f_CYRU{)qWjId8W>}i0l0o@&eXZoWuKtwsDNZ|p^Mf_Z zuQ^8M7UlTAJtcqoy_YsTW-ExT7C8TUbUr$2$klW0nm_bf6`(0ruk~17AGubpyW>WA z=QY#bJ7y1*Xc|sb0@-+hi;-}nqYm17J`!Ao)2>sKYRjV*IbR3031HQ~19{@Onq{Gy#J$=%B>ob2ZU%{Wr zg1WJ)A*%$T0JOr`B&=Sa-$p?6IO_Ub0i6#@0gZr-EV0chjHygk*fDHMbj7&TS(xzS zfPPnB7 g-$+^h?|$ol0S{tdJ?OmbumAu607*qoM6N<$f-KFU9RL6T literal 0 HcmV?d00001