Files

101 lines
1.7 KiB
Go

package main
import (
"fmt"
"os"
tea "github.com/charmbracelet/bubbletea"
"git.ohea.xyz/cursorius/tui/screens"
"git.ohea.xyz/cursorius/tui/settings"
)
type model struct {
screen tea.Model
width int
height int
}
func (m model) Init() tea.Cmd {
return nil
}
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.WindowSizeMsg:
m.width = msg.Width
m.height = msg.Height
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c":
return m, tea.Quit
}
case screens.ScreenSwitchMsg:
// when new screen is created, send WindowSizeMsg to init size
m.screen = msg.NewScreen
return m, func() tea.Msg {
return tea.WindowSizeMsg{
Width: m.width,
Height: m.height,
}
}
case error:
m.screen = screens.ErrorScreen{
Err: msg,
}
return m, nil
}
var cmd tea.Cmd
m.screen, cmd = m.screen.Update(msg)
return m, cmd
}
func (m model) View() string {
return m.screen.View()
}
func main() {
conf, err := settings.GetConfig()
if err != nil {
fmt.Printf("Error: %v", err)
return
}
initialModel := model{
screen: screens.CreateLogin(
conf,
//[]screens.CursoriusServer{
// {
// Name: "local-test",
// Url: "http://127.0.0.1:45421/graphql",
// Token: "",
// },
// {
// Name: "ohea",
// Url: "https://ci.cursorius.server",
// Token: "test",
// },
// {
// Name: "nohea",
// Url: "https://ci.cursoriuspreview.server",
// Token: "test",
// },
// {
// Name: "work",
// Url: "https://ci.acme.corp",
// Token: "test",
// },
//},
),
}
p := tea.NewProgram(initialModel, tea.WithAltScreen())
if _, err := p.Run(); err != nil {
fmt.Printf("Alas, there's been an error: %v", err)
os.Exit(1)
}
}