major architecture refactor

This commit is contained in:
juancwu 2026-01-23 03:10:53 +00:00
commit f82d06dbf0
11 changed files with 636 additions and 272 deletions

86
internal/ui/model.go Normal file
View file

@ -0,0 +1,86 @@
package ui
import (
"fmt"
"os"
"git.juancwu.dev/juancwu/porkbacon/internal/config"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/messages"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/login"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/menu"
tea "github.com/charmbracelet/bubbletea"
)
type MainModel struct {
currentPage messages.Page
login *login.Model
menu *menu.Model
isMenuInit bool
width int
height int
}
func New() MainModel {
cfg, err := config.Load()
if err != nil {
fmt.Printf("Error loading config: %v\n", err)
os.Exit(1)
}
return MainModel{
currentPage: messages.PageLogin,
login: login.New(cfg),
}
}
func (m MainModel) Init() tea.Cmd {
return m.login.Init()
}
func (m MainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmd tea.Cmd
var cmds []tea.Cmd
switch msg := msg.(type) {
case tea.WindowSizeMsg:
m.width = msg.Width
m.height = msg.Height
case messages.SwitchPageMsg:
m.currentPage = msg.Page
return m, nil
case messages.SessionReadyMsg:
m.menu = menu.New(msg.Client)
if m.width > 0 && m.height > 0 {
newMenu, _ := m.menu.Update(tea.WindowSizeMsg{Width: m.width, Height: m.height})
m.menu = newMenu.(*menu.Model)
}
m.currentPage = messages.PageMenu
m.isMenuInit = true
return m, m.menu.Init()
}
switch m.currentPage {
case messages.PageLogin:
var newLogin tea.Model
newLogin, cmd = m.login.Update(msg)
m.login = newLogin.(*login.Model)
case messages.PageMenu:
var newMenu tea.Model
newMenu, cmd = m.menu.Update(msg)
m.menu = newMenu.(*menu.Model)
}
cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
}
func (m MainModel) View() string {
switch m.currentPage {
case messages.PageLogin:
return m.login.View()
case messages.PageMenu:
return m.menu.View()
default:
return "Unknown Page"
}
}