Revert "remove config typex"

This reverts commit bfb3d38092.
This commit is contained in:
Erik Winter 2023-12-24 11:03:32 +01:00
parent bfb3d38092
commit aa1efab569
6 changed files with 43 additions and 52 deletions

View File

@ -9,6 +9,7 @@ import (
) )
func main() { func main() {
logger := tui.NewLogger()
tmdb, err := client.NewTMDB(os.Getenv("TMDB_API_KEY")) tmdb, err := client.NewTMDB(os.Getenv("TMDB_API_KEY"))
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
@ -16,11 +17,12 @@ func main() {
} }
emdb := client.NewEMDB("https://emdb.ewintr.nl", os.Getenv("EMDB_API_KEY")) emdb := client.NewEMDB("https://emdb.ewintr.nl", os.Getenv("EMDB_API_KEY"))
p, err := tui.New(emdb, tmdb) p, err := tui.New(emdb, tmdb, logger)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)
} }
logger.SetProgram(p)
if _, err := p.Run(); err != nil { if _, err := p.Run(); err != nil {
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)

View File

@ -4,29 +4,36 @@ import (
"fmt" "fmt"
"strings" "strings"
"ewintr.nl/emdb/client"
"github.com/charmbracelet/bubbles/viewport" "github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss" "github.com/charmbracelet/lipgloss"
) )
type baseModel struct { type baseModel struct {
emdb *client.EMDB
tmdb *client.TMDB
Tabs []string Tabs []string
TabContent tea.Model TabContent tea.Model
activeTab int activeTab int
initialized bool initialized bool
logger *Logger
logViewport viewport.Model logViewport viewport.Model
windowSize tea.WindowSizeMsg windowSize tea.WindowSizeMsg
contentSize tea.WindowSizeMsg contentSize tea.WindowSizeMsg
tabSize tea.WindowSizeMsg tabSize tea.WindowSizeMsg
} }
func NewBaseModel() (tea.Model, tea.Cmd) { func NewBaseModel(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (tea.Model, tea.Cmd) {
logViewport := viewport.New(0, 0) logViewport := viewport.New(0, 0)
logViewport.KeyMap = viewport.KeyMap{} logViewport.KeyMap = viewport.KeyMap{}
m := baseModel{ m := baseModel{
emdb: emdb,
tmdb: tmdb,
Tabs: []string{"Erik's movie database", "The movie database"}, Tabs: []string{"Erik's movie database", "The movie database"},
logViewport: logViewport, logViewport: logViewport,
logger: logger,
} }
m.setSize() m.setSize()
@ -56,11 +63,11 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case tea.WindowSizeMsg: case tea.WindowSizeMsg:
m.windowSize = msg m.windowSize = msg
if !m.initialized { if !m.initialized {
m.TabContent, cmd = NewTabEMDB() m.TabContent, cmd = NewEMDBTab(m.emdb, m.logger)
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
m.initialized = true m.initialized = true
} }
logger.Log(fmt.Sprintf("new window size: %dx%d", msg.Width, msg.Height)) m.Log(fmt.Sprintf("new window size: %dx%d", msg.Width, msg.Height))
m.setSize() m.setSize()
tabSize := TabSizeMsgType{ tabSize := TabSizeMsgType{
Width: m.contentSize.Width, Width: m.contentSize.Width,
@ -68,21 +75,23 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
} }
m.TabContent, cmd = m.TabContent.Update(tabSize) m.TabContent, cmd = m.TabContent.Update(tabSize)
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
logger.Log("done with resize") m.Log("done with resize")
//case FetchMoviesCmd:
// cmds = append(cmds, FetchMovieList(m.emdb, m.logger))
} }
m.TabContent, cmd = m.TabContent.Update(msg) m.TabContent, cmd = m.TabContent.Update(msg)
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
m.logViewport.SetContent(logger.Content()) m.logViewport.SetContent(strings.Join(m.logger.Lines, "\n"))
m.logViewport.GotoBottom() m.logViewport.GotoBottom()
m.logViewport, cmd = m.logViewport.Update(msg) m.logViewport, cmd = m.logViewport.Update(msg)
return m, tea.Batch(cmds...) return m, tea.Batch(cmds...)
} }
func (m *baseModel) Log(msg string) {
m.logger.Log(msg)
}
func (m baseModel) View() string { func (m baseModel) View() string {
if !m.initialized { if !m.initialized {
return "\n Initializing..." return "\n Initializing..."

View File

@ -3,12 +3,11 @@ package tui
import ( import (
"fmt" "fmt"
"ewintr.nl/emdb/client"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
) )
type FetchMoviesCmd tea.Cmd func FetchMovieList(emdb *client.EMDB, logger *Logger) tea.Cmd {
func FetchMovieList() tea.Cmd {
return func() tea.Msg { return func() tea.Msg {
logger.Log("fetching emdb movies...") logger.Log("fetching emdb movies...")
ems, err := emdb.GetMovies() ems, err := emdb.GetMovies()

View File

@ -1,32 +1,37 @@
package tui package tui
import ( import (
"ewintr.nl/emdb/client"
"github.com/charmbracelet/bubbles/list" "github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
) )
type tabEMDB struct { type emdbTab struct {
initialized bool initialized bool
list list.Model list list.Model
emdb *client.EMDB
logger *Logger
} }
func NewTabEMDB() (tea.Model, tea.Cmd) { func NewEMDBTab(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) {
list := list.New([]list.Item{}, list.NewDefaultDelegate(), 0, 0) list := list.New([]list.Item{}, list.NewDefaultDelegate(), 0, 0)
list.Title = "Movies" list.Title = "Movies"
list.SetShowHelp(false) list.SetShowHelp(false)
m := tabEMDB{ m := emdbTab{
emdb: emdb,
logger: logger,
list: list, list: list,
} }
return m, FetchMovieList() return m, FetchMovieList(emdb, logger)
} }
func (m tabEMDB) Init() tea.Cmd { func (m emdbTab) Init() tea.Cmd {
return nil return nil
} }
func (m tabEMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) { func (m emdbTab) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmd tea.Cmd var cmd tea.Cmd
var cmds []tea.Cmd var cmds []tea.Cmd
@ -47,6 +52,10 @@ func (m tabEMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, tea.Batch(cmds...) return m, tea.Batch(cmds...)
} }
func (m tabEMDB) View() string { func (m emdbTab) View() string {
return m.list.View() return m.list.View()
} }
func (m *emdbTab) Log(s string) {
m.logger.Log(s)
}

View File

@ -1,13 +1,5 @@
package tui package tui
import "ewintr.nl/emdb/client"
type tabTMDB struct {
initialized bool
tmdb *client.TMDB
logger *Logger
}
//focused string //focused string
//searchInput textinput.Model //searchInput textinput.Model
//searchResults list.Model //searchResults list.Model

View File

@ -1,11 +1,8 @@
package tui package tui
import ( import (
"fmt"
"os"
"strings"
"ewintr.nl/emdb/client" "ewintr.nl/emdb/client"
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss" "github.com/charmbracelet/lipgloss"
"github.com/muesli/termenv" "github.com/muesli/termenv"
@ -21,10 +18,6 @@ var (
Padding(0, 1). Padding(0, 1).
Border(lipgloss.NormalBorder(), true) Border(lipgloss.NormalBorder(), true)
logLineCount = 5 logLineCount = 5
emdb *client.EMDB
tmdb *client.TMDB
logger = NewLogger()
) )
type Logger struct { type Logger struct {
@ -46,27 +39,14 @@ func (l *Logger) Log(s string) {
l.Lines = append(l.Lines, s) l.Lines = append(l.Lines, s)
} }
func (l *Logger) Content() string {
if l.Lines == nil {
return "logger not initialized"
}
return strings.Join(l.Lines, "\n")
}
type TabSizeMsgType tea.WindowSizeMsg type TabSizeMsgType tea.WindowSizeMsg
func New(emdb *client.EMDB, tmdb *client.TMDB) (*tea.Program, error) { func New(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (*tea.Program, error) {
emdb = emdb logViewport := viewport.New(0, 0)
tmdb = tmdb logViewport.KeyMap = viewport.KeyMap{}
fmt.Printf("emdb: %v\n", emdb) m, _ := NewBaseModel(emdb, tmdb, logger)
os.Exit(0)
m, _ := NewBaseModel()
p := tea.NewProgram(m, tea.WithAltScreen()) p := tea.NewProgram(m, tea.WithAltScreen())
logger.SetProgram(p)
return p, nil return p, nil
} }