|
|
@@ -11,6 +11,8 @@ import com.googlecode.lanterna.terminal.Terminal
|
|
|
import com.googlecode.lanterna.terminal.TerminalResizeListener
|
|
|
import com.googlecode.lanterna.terminal.swing.SwingTerminal
|
|
|
import com.googlecode.lanterna.terminal.swing.SwingTerminalFrame
|
|
|
+import kotlinx.coroutines.*
|
|
|
+import net.mamoe.mirai.MiraiConsoleUI.LoggerDrawer.cleanPage
|
|
|
import net.mamoe.mirai.MiraiConsoleUI.LoggerDrawer.drawLog
|
|
|
import net.mamoe.mirai.MiraiConsoleUI.LoggerDrawer.redrawLogs
|
|
|
import net.mamoe.mirai.utils.currentTimeSeconds
|
|
|
@@ -24,10 +26,13 @@ import kotlin.math.ceil
|
|
|
|
|
|
object MiraiConsoleUI {
|
|
|
|
|
|
- val log = mutableMapOf<Long, LimitLinkedQueue<String>>().also { it[0L] = LimitLinkedQueue(50) }
|
|
|
+ val log = mutableMapOf<Long, LimitLinkedQueue<String>>().also {
|
|
|
+ it[0L] = LimitLinkedQueue(50)
|
|
|
+ it[2821869985L] = LimitLinkedQueue(50)
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- private val screens = mutableListOf(0L)
|
|
|
+ private val screens = mutableListOf(0L, 2821869985L)
|
|
|
private var currentScreenId = 0
|
|
|
|
|
|
fun addBotScreen(uin: Long) {
|
|
|
@@ -68,12 +73,46 @@ object MiraiConsoleUI {
|
|
|
}
|
|
|
textGraphics = terminal.newTextGraphics()
|
|
|
|
|
|
+ /*
|
|
|
+ var lastRedrawTime = 0L
|
|
|
+ var lastNewWidth = 0
|
|
|
+ var lastNewHeight = 0
|
|
|
+
|
|
|
terminal.addResizeListener(TerminalResizeListener { terminal1: Terminal, newSize: TerminalSize ->
|
|
|
- terminal.clearScreen()
|
|
|
- inited = false
|
|
|
- update()
|
|
|
- redrawCommand()
|
|
|
- redrawLogs(log[screens[currentScreenId]]!!)
|
|
|
+ try {
|
|
|
+ if (lastNewHeight == newSize.rows
|
|
|
+ &&
|
|
|
+ lastNewWidth == newSize.columns
|
|
|
+ ) {
|
|
|
+ return@TerminalResizeListener
|
|
|
+ }
|
|
|
+ lastNewHeight = newSize.rows
|
|
|
+ lastNewWidth = newSize.columns
|
|
|
+ terminal.clearScreen()
|
|
|
+ if(terminal !is SwingTerminalFrame) {
|
|
|
+ Thread.sleep(300)
|
|
|
+ }
|
|
|
+ update()
|
|
|
+ redrawCommand()
|
|
|
+ redrawLogs(log[screens[currentScreenId]]!!)
|
|
|
+ }catch (ignored:Exception){
|
|
|
+
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ */
|
|
|
+ var lastJob: Job? = null
|
|
|
+ terminal.addResizeListener(TerminalResizeListener { terminal1: Terminal, newSize: TerminalSize ->
|
|
|
+ lastJob = GlobalScope.launch {
|
|
|
+ delay(300)
|
|
|
+ if (lastJob == coroutineContext[Job]) {
|
|
|
+ terminal.clearScreen()
|
|
|
+ //inited = false
|
|
|
+ update()
|
|
|
+ redrawCommand()
|
|
|
+ redrawLogs(log[screens[currentScreenId]]!!)
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
|
|
|
if (terminal !is SwingTerminalFrame) {
|
|
|
@@ -104,10 +143,14 @@ object MiraiConsoleUI {
|
|
|
when (keyStroke.keyType) {
|
|
|
KeyType.ArrowLeft -> {
|
|
|
currentScreenId = getLeftScreenId()
|
|
|
+ clearRows(2)
|
|
|
+ cleanPage()
|
|
|
update()
|
|
|
}
|
|
|
KeyType.ArrowRight -> {
|
|
|
currentScreenId = getRightScreenId()
|
|
|
+ clearRows(2)
|
|
|
+ cleanPage()
|
|
|
update()
|
|
|
}
|
|
|
KeyType.Enter -> {
|
|
|
@@ -156,7 +199,6 @@ object MiraiConsoleUI {
|
|
|
}
|
|
|
|
|
|
|
|
|
- var inited = false
|
|
|
fun clearRows(row: Int) {
|
|
|
textGraphics.putString(0, row, " ".repeat(terminal.terminalSize.columns))
|
|
|
}
|
|
|
@@ -167,25 +209,24 @@ object MiraiConsoleUI {
|
|
|
val width = terminal.terminalSize.columns
|
|
|
val height = terminal.terminalSize.rows
|
|
|
terminal.setBackgroundColor(TextColor.ANSI.DEFAULT)
|
|
|
- if (!inited) {
|
|
|
- val mainTitle = "Mirai Console v0.01 Core v0.15"
|
|
|
- textGraphics.foregroundColor = TextColor.ANSI.WHITE
|
|
|
- textGraphics.backgroundColor = TextColor.ANSI.GREEN
|
|
|
- textGraphics.putString((width - mainTitle.length) / 2, 1, mainTitle, SGR.BOLD)
|
|
|
- textGraphics.foregroundColor = TextColor.ANSI.DEFAULT
|
|
|
- textGraphics.backgroundColor = TextColor.ANSI.DEFAULT
|
|
|
- textGraphics.putString(2, 3, "-".repeat(width - 4))
|
|
|
- textGraphics.putString(2, 5, "-".repeat(width - 4))
|
|
|
- textGraphics.putString(2, height - 4, "-".repeat(width - 4))
|
|
|
- textGraphics.putString(2, height - 3, "|>>>")
|
|
|
- textGraphics.putString(width - 3, height - 3, "|")
|
|
|
- textGraphics.putString(2, height - 2, "-".repeat(width - 4))
|
|
|
- inited = true
|
|
|
- }
|
|
|
+
|
|
|
+ val mainTitle = "Mirai Console v0.01 Core v0.15"
|
|
|
+ textGraphics.foregroundColor = TextColor.ANSI.WHITE
|
|
|
+ textGraphics.backgroundColor = TextColor.ANSI.GREEN
|
|
|
+ textGraphics.putString((width - mainTitle.length) / 2, 1, mainTitle, SGR.BOLD)
|
|
|
+ textGraphics.foregroundColor = TextColor.ANSI.DEFAULT
|
|
|
+ textGraphics.backgroundColor = TextColor.ANSI.DEFAULT
|
|
|
+ textGraphics.putString(2, 3, "-".repeat(width - 4))
|
|
|
+ textGraphics.putString(2, 5, "-".repeat(width - 4))
|
|
|
+ textGraphics.putString(2, height - 4, "-".repeat(width - 4))
|
|
|
+ textGraphics.putString(2, height - 3, "|>>>")
|
|
|
+ textGraphics.putString(width - 3, height - 3, "|")
|
|
|
+ textGraphics.putString(2, height - 2, "-".repeat(width - 4))
|
|
|
+
|
|
|
textGraphics.foregroundColor = TextColor.ANSI.DEFAULT
|
|
|
textGraphics.backgroundColor = TextColor.ANSI.DEFAULT
|
|
|
val leftName = getScreenName(getLeftScreenId())
|
|
|
- clearRows(2)
|
|
|
+ // clearRows(2)
|
|
|
textGraphics.putString((width - title.length) / 2 - "$leftName << ".length, 2, "$leftName << ")
|
|
|
textGraphics.foregroundColor = TextColor.ANSI.WHITE
|
|
|
textGraphics.backgroundColor = TextColor.ANSI.YELLOW
|
|
|
@@ -230,14 +271,14 @@ object MiraiConsoleUI {
|
|
|
var currentHeight = 6
|
|
|
|
|
|
fun drawLog(string: String, flush: Boolean = true) {
|
|
|
- val maxHeight = terminal.terminalSize.rows - 6
|
|
|
+ val maxHeight = terminal.terminalSize.rows - 4
|
|
|
val heightNeed = (string.length / (terminal.terminalSize.columns - 6)) + 1
|
|
|
if (currentHeight + heightNeed > maxHeight) {
|
|
|
cleanPage()
|
|
|
}
|
|
|
textGraphics.foregroundColor = TextColor.ANSI.GREEN
|
|
|
textGraphics.backgroundColor = TextColor.ANSI.DEFAULT
|
|
|
- val width = terminal.terminalSize.columns - 6
|
|
|
+ val width = terminal.terminalSize.columns - 7
|
|
|
var x = string
|
|
|
while (true) {
|
|
|
if (x == "") break
|
|
|
@@ -264,7 +305,7 @@ object MiraiConsoleUI {
|
|
|
|
|
|
|
|
|
fun cleanPage() {
|
|
|
- for (index in 6 until terminal.terminalSize.rows - 6) {
|
|
|
+ for (index in 6 until terminal.terminalSize.rows - 4) {
|
|
|
clearRows(index)
|
|
|
}
|
|
|
currentHeight = 6
|
|
|
@@ -272,20 +313,21 @@ object MiraiConsoleUI {
|
|
|
|
|
|
|
|
|
fun redrawLogs(toDraw: List<String>) {
|
|
|
- this.cleanPage()
|
|
|
+ //this.cleanPage()
|
|
|
+ currentHeight = 6
|
|
|
var logsToDraw = 0
|
|
|
var vara = 0
|
|
|
- toDraw.reversed().forEach {
|
|
|
+ toDraw.forEach {
|
|
|
val heightNeed = (it.length / (terminal.terminalSize.columns - 6)) + 1
|
|
|
vara += heightNeed
|
|
|
- if (currentHeight + vara < terminal.terminalSize.rows - 6) {
|
|
|
+ if (currentHeight + vara < terminal.terminalSize.rows - 4) {
|
|
|
logsToDraw++
|
|
|
} else {
|
|
|
- return
|
|
|
+ return@forEach
|
|
|
}
|
|
|
}
|
|
|
- for (index in (toDraw.size - logsToDraw) until toDraw.size - 1) {
|
|
|
- drawLog(toDraw[index], false)
|
|
|
+ for (index in 0 until logsToDraw) {
|
|
|
+ drawLog(toDraw[logsToDraw - index - 1], false)
|
|
|
}
|
|
|
if (terminal is SwingTerminalFrame) {
|
|
|
terminal.flush()
|