mirror of
https://github.com/EnumeratedDev/typer.git
synced 2026-09-16 05:36:10 +00:00
110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"slices"
|
|
"time"
|
|
"typer/runestring"
|
|
|
|
"github.com/gdamore/tcell/v2"
|
|
)
|
|
|
|
type TyperMessageUrgency uint
|
|
|
|
const (
|
|
TYPER_MESSAGE_INFO TyperMessageUrgency = iota
|
|
TYPER_MESSAGE_WARNING
|
|
TYPER_MESSAGE_ERROR
|
|
)
|
|
|
|
type TyperMessage struct {
|
|
Timestamp int64
|
|
Urgency TyperMessageUrgency
|
|
Message string
|
|
}
|
|
|
|
var lastMessage *TyperMessage
|
|
|
|
func (window *Window) PrintMessage(message string, urgency TyperMessageUrgency) {
|
|
lastMessage = &TyperMessage{Timestamp: time.Now().UnixMilli(), Message: message, Urgency: urgency}
|
|
|
|
logsBuffer := GetBufferByName("Typer Logs")
|
|
if logsBuffer != nil {
|
|
messageToPrint := ""
|
|
switch lastMessage.Urgency {
|
|
case TYPER_MESSAGE_INFO:
|
|
messageToPrint = "[INFO] "
|
|
case TYPER_MESSAGE_WARNING:
|
|
messageToPrint = "[WARNING] "
|
|
case TYPER_MESSAGE_ERROR:
|
|
messageToPrint = "[ERROR] "
|
|
default:
|
|
messageToPrint = "[???] "
|
|
}
|
|
|
|
messageToPrint += "[" + time.UnixMilli(lastMessage.Timestamp).Format("15:04:05") + "] "
|
|
messageToPrint += lastMessage.Message + "\n"
|
|
|
|
if len(logsBuffer.Contents) >= 1000 {
|
|
logsBuffer.Contents = slices.Delete(logsBuffer.Contents, 0, len(logsBuffer.Contents)-999)
|
|
}
|
|
|
|
logsBuffer.CursorPos = Position{
|
|
X: len(logsBuffer.Contents[len(logsBuffer.Contents)-1]),
|
|
Y: len(logsBuffer.Contents) - 1,
|
|
}
|
|
|
|
logsBuffer.WriteString(runestring.RuneString(messageToPrint))
|
|
}
|
|
|
|
err := window.screen.PostEvent(tcell.NewEventInterrupt(nil))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
go func() {
|
|
time.Sleep(5 * time.Second)
|
|
|
|
err := window.screen.PostEvent(tcell.NewEventInterrupt(nil))
|
|
if err != nil {
|
|
return
|
|
}
|
|
}()
|
|
}
|
|
|
|
func drawMessageBar(window *Window) {
|
|
screen := window.screen
|
|
|
|
messageBarStyle := tcell.StyleDefault.Background(CurrentStyle.MessageBarBg).Foreground(CurrentStyle.MessageBarFg)
|
|
|
|
sizeX, sizeY := screen.Size()
|
|
|
|
messageToPrint := ""
|
|
if lastMessage != nil && time.Since(time.UnixMilli(lastMessage.Timestamp)).Seconds() < 5 {
|
|
switch lastMessage.Urgency {
|
|
case TYPER_MESSAGE_INFO:
|
|
messageToPrint = "[INFO] "
|
|
case TYPER_MESSAGE_WARNING:
|
|
messageToPrint = "[WARNING] "
|
|
case TYPER_MESSAGE_ERROR:
|
|
messageToPrint = "[ERROR] "
|
|
default:
|
|
messageToPrint = "[???] "
|
|
}
|
|
messageToPrint += lastMessage.Message
|
|
}
|
|
|
|
for x := 0; x < sizeX; x++ {
|
|
char := ' '
|
|
if x < len(messageToPrint) {
|
|
char = int32(messageToPrint[x])
|
|
}
|
|
|
|
if currentInputRequest == nil {
|
|
screen.SetContent(x, sizeY-1, char, nil, messageBarStyle)
|
|
} else {
|
|
screen.SetContent(x, sizeY-2, char, nil, messageBarStyle)
|
|
}
|
|
|
|
}
|
|
}
|