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