mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-25 06:50:09 +08:00
Standard Captcha update (#543)
* Standard Captcha update - Add icon - Typo - System tips * Remove unnecessary message. * Update WindowHelperJvm.kt
This commit is contained in:
parent
648777e1bd
commit
e643988c87
@ -95,7 +95,7 @@ public class StandardCharImageLoginSolver(
|
||||
if (img == null) {
|
||||
logger.info("无法创建字符图片. 请查看文件")
|
||||
} else {
|
||||
logger.info(img.createCharImg())
|
||||
logger.info("\n" + img.createCharImg())
|
||||
}
|
||||
} catch (throwable: Throwable) {
|
||||
logger.info("创建字符图片时出错($throwable)。请查看文件")
|
||||
|
@ -16,25 +16,66 @@ package net.mamoe.mirai.utils
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import java.awt.BorderLayout
|
||||
import java.awt.Desktop
|
||||
import java.awt.Dimension
|
||||
import java.awt.Toolkit
|
||||
import java.awt.event.KeyEvent
|
||||
import java.awt.event.KeyListener
|
||||
import java.awt.event.WindowAdapter
|
||||
import java.awt.event.WindowEvent
|
||||
import java.awt.image.BufferedImage
|
||||
import java.io.File
|
||||
import javax.imageio.ImageIO
|
||||
import javax.swing.JFrame
|
||||
import javax.swing.JTextField
|
||||
import javax.swing.SwingUtilities
|
||||
|
||||
// 隔离类代码
|
||||
@Suppress("DEPRECATION")
|
||||
internal object WindowHelperJvm {
|
||||
internal val isDesktopSupported: Boolean =
|
||||
kotlin.runCatching {
|
||||
System.getProperty("mirai.no-desktop") === null && Desktop.isDesktopSupported()
|
||||
}.getOrElse {
|
||||
internal val isDesktopSupported: Boolean = kotlin.run {
|
||||
if (System.getProperty("mirai.no-desktop") === null) {
|
||||
kotlin.runCatching {
|
||||
Class.forName("java.awt.Desktop")
|
||||
Class.forName("java.awt.Toolkit")
|
||||
}.onFailure { return@run false } // Android OS
|
||||
kotlin.runCatching {
|
||||
Toolkit.getDefaultToolkit()
|
||||
}.onFailure { // AWT Error, #270
|
||||
return@run false
|
||||
}
|
||||
kotlin.runCatching {
|
||||
Desktop.isDesktopSupported().also { stat ->
|
||||
if (stat) {
|
||||
MiraiLogger.info(
|
||||
"""
|
||||
Mirai 正在使用桌面环境,
|
||||
如果你正在使用SSH, 或无法访问桌面等,
|
||||
请将 `mirai.no-desktop` 添加到 JVM 系统属性中 (-Dmirai.no-desktop)
|
||||
然后重启 Mirai
|
||||
""".trimIndent()
|
||||
)
|
||||
MiraiLogger.info(
|
||||
"""
|
||||
Mirai using DesktopCaptcha System.
|
||||
If you are running on SSH, cannot access desktop or more.
|
||||
Please add `mirai.no-desktop` to JVM properties (-Dmirai.no-desktop)
|
||||
Then restart mirai
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
}.getOrElse {
|
||||
// Should not happen
|
||||
MiraiLogger.warning("Exception in checking desktop support.", it)
|
||||
false
|
||||
}
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal class WindowInitialzier(private val initializer: WindowInitialzier.(JFrame) -> Unit) {
|
||||
internal class WindowInitializer(private val initializer: WindowInitializer.(JFrame) -> Unit) {
|
||||
private lateinit var frame0: JFrame
|
||||
val frame: JFrame get() = frame0
|
||||
fun java.awt.Component.append() {
|
||||
@ -51,12 +92,20 @@ internal class WindowInitialzier(private val initializer: WindowInitialzier.(JFr
|
||||
}
|
||||
}
|
||||
|
||||
internal suspend fun openWindow(title: String = "", initializer: WindowInitialzier.(JFrame) -> Unit = {}): String {
|
||||
return openWindow(title, WindowInitialzier(initializer))
|
||||
internal val windowIcon: BufferedImage? by lazy {
|
||||
WindowHelperJvm::class.java.getResourceAsStream("project-mirai.png")?.use {
|
||||
ImageIO.read(it)
|
||||
}
|
||||
}
|
||||
|
||||
internal suspend fun openWindow(title: String = "", initializer: WindowInitialzier = WindowInitialzier {}): String {
|
||||
internal suspend fun openWindow(title: String = "", initializer: WindowInitializer.(JFrame) -> Unit = {}): String {
|
||||
return openWindow(title, WindowInitializer(initializer))
|
||||
}
|
||||
|
||||
internal suspend fun openWindow(title: String = "", initializer: WindowInitializer = WindowInitializer {}): String {
|
||||
val frame = JFrame()
|
||||
frame.iconImage = windowIcon
|
||||
frame.minimumSize = Dimension(228, 62) // From Windows 10
|
||||
val value = JTextField()
|
||||
val def = CompletableDeferred<String>()
|
||||
value.addKeyListener(object : KeyListener {
|
||||
@ -89,9 +138,9 @@ internal suspend fun openWindow(title: String = "", initializer: WindowInitialzi
|
||||
frame.title = title
|
||||
frame.isVisible = true
|
||||
|
||||
val result = def.await().trim()
|
||||
SwingUtilities.invokeLater {
|
||||
frame.dispose()
|
||||
return def.await().trim().also {
|
||||
SwingUtilities.invokeLater {
|
||||
frame.dispose()
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Loading…
Reference in New Issue
Block a user