diff --git a/cmd/terminal-client/main.go b/cmd/terminal-client/main.go index b52a298..3a05b81 100644 --- a/cmd/terminal-client/main.go +++ b/cmd/terminal-client/main.go @@ -9,7 +9,6 @@ import ( ) func main() { - logger := tui.NewLogger() tmdb, err := client.NewTMDB(os.Getenv("TMDB_API_KEY")) if err != nil { fmt.Println(err) @@ -17,12 +16,11 @@ func main() { } emdb := client.NewEMDB("https://emdb.ewintr.nl", os.Getenv("EMDB_API_KEY")) - p, err := tui.New(emdb, tmdb, logger) + p, err := tui.New(emdb, tmdb) if err != nil { fmt.Println(err) os.Exit(1) } - logger.SetProgram(p) if _, err := p.Run(); err != nil { fmt.Println(err) os.Exit(1) diff --git a/cmd/terminal-client/tui/basemodel.go b/cmd/terminal-client/tui/basemodel.go index 9c281bf..9cc9e63 100644 --- a/cmd/terminal-client/tui/basemodel.go +++ b/cmd/terminal-client/tui/basemodel.go @@ -4,36 +4,29 @@ import ( "fmt" "strings" - "ewintr.nl/emdb/client" "github.com/charmbracelet/bubbles/viewport" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" ) type baseModel struct { - emdb *client.EMDB - tmdb *client.TMDB Tabs []string TabContent tea.Model activeTab int initialized bool - logger *Logger logViewport viewport.Model windowSize tea.WindowSizeMsg contentSize tea.WindowSizeMsg tabSize tea.WindowSizeMsg } -func NewBaseModel(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (tea.Model, tea.Cmd) { +func NewBaseModel() (tea.Model, tea.Cmd) { logViewport := viewport.New(0, 0) logViewport.KeyMap = viewport.KeyMap{} m := baseModel{ - emdb: emdb, - tmdb: tmdb, Tabs: []string{"Erik's movie database", "The movie database"}, logViewport: logViewport, - logger: logger, } m.setSize() @@ -63,11 +56,11 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case tea.WindowSizeMsg: m.windowSize = msg if !m.initialized { - m.TabContent, cmd = NewEMDBTab(m.emdb, m.logger) + m.TabContent, cmd = NewTabEMDB() cmds = append(cmds, cmd) m.initialized = true } - m.Log(fmt.Sprintf("new window size: %dx%d", msg.Width, msg.Height)) + logger.Log(fmt.Sprintf("new window size: %dx%d", msg.Width, msg.Height)) m.setSize() tabSize := TabSizeMsgType{ Width: m.contentSize.Width, @@ -75,23 +68,21 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } m.TabContent, cmd = m.TabContent.Update(tabSize) cmds = append(cmds, cmd) - m.Log("done with resize") + logger.Log("done with resize") + //case FetchMoviesCmd: + // cmds = append(cmds, FetchMovieList(m.emdb, m.logger)) } m.TabContent, cmd = m.TabContent.Update(msg) cmds = append(cmds, cmd) - m.logViewport.SetContent(strings.Join(m.logger.Lines, "\n")) + m.logViewport.SetContent(logger.Content()) m.logViewport.GotoBottom() m.logViewport, cmd = m.logViewport.Update(msg) return m, tea.Batch(cmds...) } -func (m *baseModel) Log(msg string) { - m.logger.Log(msg) -} - func (m baseModel) View() string { if !m.initialized { return "\n Initializing..." diff --git a/cmd/terminal-client/tui/command.go b/cmd/terminal-client/tui/command.go index 1453173..faa7e0c 100644 --- a/cmd/terminal-client/tui/command.go +++ b/cmd/terminal-client/tui/command.go @@ -3,11 +3,12 @@ package tui import ( "fmt" - "ewintr.nl/emdb/client" tea "github.com/charmbracelet/bubbletea" ) -func FetchMovieList(emdb *client.EMDB, logger *Logger) tea.Cmd { +type FetchMoviesCmd tea.Cmd + +func FetchMovieList() tea.Cmd { return func() tea.Msg { logger.Log("fetching emdb movies...") ems, err := emdb.GetMovies() diff --git a/cmd/terminal-client/tui/tabemdb.go b/cmd/terminal-client/tui/tabemdb.go index 20d89f9..2271c1a 100644 --- a/cmd/terminal-client/tui/tabemdb.go +++ b/cmd/terminal-client/tui/tabemdb.go @@ -1,37 +1,32 @@ package tui import ( - "ewintr.nl/emdb/client" "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" ) -type emdbTab struct { +type tabEMDB struct { initialized bool list list.Model - emdb *client.EMDB - logger *Logger } -func NewEMDBTab(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) { +func NewTabEMDB() (tea.Model, tea.Cmd) { list := list.New([]list.Item{}, list.NewDefaultDelegate(), 0, 0) list.Title = "Movies" list.SetShowHelp(false) - m := emdbTab{ - emdb: emdb, - logger: logger, - list: list, + m := tabEMDB{ + list: list, } - return m, FetchMovieList(emdb, logger) + return m, FetchMovieList() } -func (m emdbTab) Init() tea.Cmd { +func (m tabEMDB) Init() tea.Cmd { return nil } -func (m emdbTab) Update(msg tea.Msg) (tea.Model, tea.Cmd) { +func (m tabEMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var cmd tea.Cmd var cmds []tea.Cmd @@ -52,10 +47,6 @@ func (m emdbTab) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, tea.Batch(cmds...) } -func (m emdbTab) View() string { +func (m tabEMDB) View() string { return m.list.View() } - -func (m *emdbTab) Log(s string) { - m.logger.Log(s) -} diff --git a/cmd/terminal-client/tui/tabimdb.go b/cmd/terminal-client/tui/tabimdb.go index 37a525e..d16c93d 100644 --- a/cmd/terminal-client/tui/tabimdb.go +++ b/cmd/terminal-client/tui/tabimdb.go @@ -1,5 +1,13 @@ package tui +import "ewintr.nl/emdb/client" + +type tabTMDB struct { + initialized bool + tmdb *client.TMDB + logger *Logger +} + //focused string //searchInput textinput.Model //searchResults list.Model diff --git a/cmd/terminal-client/tui/tui.go b/cmd/terminal-client/tui/tui.go index a9c6a60..ae047e0 100644 --- a/cmd/terminal-client/tui/tui.go +++ b/cmd/terminal-client/tui/tui.go @@ -1,8 +1,11 @@ package tui import ( + "fmt" + "os" + "strings" + "ewintr.nl/emdb/client" - "github.com/charmbracelet/bubbles/viewport" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" "github.com/muesli/termenv" @@ -18,6 +21,10 @@ var ( Padding(0, 1). Border(lipgloss.NormalBorder(), true) logLineCount = 5 + + emdb *client.EMDB + tmdb *client.TMDB + logger = NewLogger() ) type Logger struct { @@ -39,14 +46,27 @@ func (l *Logger) Log(s string) { 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 -func New(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (*tea.Program, error) { - logViewport := viewport.New(0, 0) - logViewport.KeyMap = viewport.KeyMap{} +func New(emdb *client.EMDB, tmdb *client.TMDB) (*tea.Program, error) { + emdb = emdb + tmdb = tmdb - m, _ := NewBaseModel(emdb, tmdb, logger) + fmt.Printf("emdb: %v\n", emdb) + os.Exit(0) + + m, _ := NewBaseModel() p := tea.NewProgram(m, tea.WithAltScreen()) + logger.SetProgram(p) + return p, nil }