From 68c32ba9620daaefe33e68bccf16008611aa5aea Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Mon, 25 Dec 2023 13:29:43 +0100 Subject: [PATCH] reset tab message --- Makefile | 2 +- cmd/terminal-client/main.go | 2 +- cmd/terminal-client/tui/basemodel.go | 7 ++++--- cmd/terminal-client/tui/tabemdb.go | 2 +- cmd/terminal-client/tui/tabset.go | 13 ++++++++++--- cmd/terminal-client/tui/tabtmdb.go | 27 ++++++++++++++++++--------- cmd/terminal-client/tui/tui.go | 1 - 7 files changed, 35 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 5fcdc34..f813207 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ run-api: go run ./cmd/api-service/service.go -apikey localOnly run-tui: - go run ./cmd/terminal-client/main.go + EMDB_BASE_URL=http://localhost:8085/ EMDB_API_KEY=hoi go run ./cmd/terminal-client/main.go build-api: go build -o emdb-api ./cmd/api-service/service.go diff --git a/cmd/terminal-client/main.go b/cmd/terminal-client/main.go index b52a298..f3e48d6 100644 --- a/cmd/terminal-client/main.go +++ b/cmd/terminal-client/main.go @@ -15,7 +15,7 @@ func main() { fmt.Println(err) os.Exit(1) } - emdb := client.NewEMDB("https://emdb.ewintr.nl", os.Getenv("EMDB_API_KEY")) + emdb := client.NewEMDB(os.Getenv("EMDB_BASE_URL"), os.Getenv("EMDB_API_KEY")) p, err := tui.New(emdb, tmdb, logger) if err != nil { diff --git a/cmd/terminal-client/tui/basemodel.go b/cmd/terminal-client/tui/basemodel.go index 07014cd..bf974ee 100644 --- a/cmd/terminal-client/tui/basemodel.go +++ b/cmd/terminal-client/tui/basemodel.go @@ -64,20 +64,21 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { cmds = append(cmds, cmd) tmdbTab, cmd = NewTabTMDB(m.emdb, m.tmdb, m.logger) cmds = append(cmds, cmd) - m.tabs.AddTab("emdb", "EMDB", emdbTab) + m.tabs.AddTab("emdb", "Watched movies", emdbTab) m.tabs.AddTab("tmdb", "TMDB", tmdbTab) m.initialized = true } m.Log(fmt.Sprintf("new window size: %dx%d", msg.Width, msg.Height)) m.setSize() - tabSize := TabSizeMsgType{ + tabSize := TabSizeMsg{ Width: m.contentSize.Width, Height: m.contentSize.Height, } cmds = append(cmds, m.tabs.Update(tabSize)) case NewMovie: m.Log(fmt.Sprintf("imported movie %s", msg.m.Title)) - cmd = m.tabs.Update(msg) + m.tabs.Select("emdb") + cmds = append(cmds, FetchMovieList(m.emdb)) case error: m.Log(fmt.Sprintf("ERROR: %s", msg.Error())) default: diff --git a/cmd/terminal-client/tui/tabemdb.go b/cmd/terminal-client/tui/tabemdb.go index 2cf544f..3ca2557 100644 --- a/cmd/terminal-client/tui/tabemdb.go +++ b/cmd/terminal-client/tui/tabemdb.go @@ -39,7 +39,7 @@ func (m tabEMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var cmds []tea.Cmd switch msg := msg.(type) { - case TabSizeMsgType: + case TabSizeMsg: if !m.initialized { m.initialized = true } diff --git a/cmd/terminal-client/tui/tabset.go b/cmd/terminal-client/tui/tabset.go index 60a2759..68ef9ca 100644 --- a/cmd/terminal-client/tui/tabset.go +++ b/cmd/terminal-client/tui/tabset.go @@ -7,12 +7,15 @@ import ( "github.com/charmbracelet/lipgloss" ) +type TabSizeMsg tea.WindowSizeMsg +type TabResetMsg string + type TabSet struct { active int order []string title map[string]string tabs map[string]tea.Model - size TabSizeMsgType + size TabSizeMsg } func NewTabSet() *TabSet { @@ -57,12 +60,16 @@ func (t *TabSet) Update(msg tea.Msg) tea.Cmd { var cmds []tea.Cmd switch msg.(type) { - case TabSizeMsgType: + case TabSizeMsg: for _, name := range t.order { t.tabs[name], cmd = t.tabs[name].Update(msg) cmds = append(cmds, cmd) } - t.size = msg.(TabSizeMsgType) + t.size = msg.(TabSizeMsg) + case TabResetMsg: + name := string(msg.(TabResetMsg)) + t.tabs[name], cmd = t.tabs[name].Update(msg) + //case ImportMovieMsg: // t.Select("emdb") // t.tabs["emdb"], cmd = t.tabs["emdb"].Update(msg) diff --git a/cmd/terminal-client/tui/tabtmdb.go b/cmd/terminal-client/tui/tabtmdb.go index cd63c3e..25ad604 100644 --- a/cmd/terminal-client/tui/tabtmdb.go +++ b/cmd/terminal-client/tui/tabtmdb.go @@ -38,25 +38,28 @@ func (m tabTMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var cmds []tea.Cmd switch msg := msg.(type) { - case TabSizeMsgType: + case TabSizeMsg: if !m.initialized { m.initialModel(msg.Width, msg.Height) } m.initialized = true m.searchResults.SetSize(msg.Width, msg.Height) + case TabResetMsg: + m.searchInput.SetValue("") + m.searchResults.SetItems([]list.Item{}) + m.searchInput.Focus() + m.focused = "search" case tea.KeyMsg: switch msg.String() { case "enter": switch m.focused { case "search": - cmds = append(cmds, SearchTMDB(m.tmdb, m.searchInput.Value())) + cmds = append(cmds, m.SearchTMDBCmd(m.searchInput.Value())) m.searchInput.Blur() m.Log("search tmdb...") case "result": movie := m.searchResults.SelectedItem().(Movie) - m.Log(fmt.Sprintf("selected movie %s", movie.Title)) - cmds = append(cmds, ImportMovie(m.emdb, movie)) - + cmds = append(cmds, m.ImportMovieCmd(movie), m.ResetCmd()) } } case Movies: @@ -99,9 +102,9 @@ func (m *tabTMDB) initialModel(width, height int) { m.focused = "search" } -func SearchTMDB(tmdb *client.TMDB, query string) tea.Cmd { +func (m *tabTMDB) SearchTMDBCmd(query string) tea.Cmd { return func() tea.Msg { - tms, err := tmdb.Search(query) + tms, err := m.tmdb.Search(query) if err != nil { return err } @@ -109,9 +112,9 @@ func SearchTMDB(tmdb *client.TMDB, query string) tea.Cmd { } } -func ImportMovie(emdb *client.EMDB, movie Movie) tea.Cmd { +func (m *tabTMDB) ImportMovieCmd(movie Movie) tea.Cmd { return func() tea.Msg { - newMovie, err := emdb.AddMovie(movie.m) + newMovie, err := m.emdb.AddMovie(movie.m) if err != nil { return err } @@ -119,3 +122,9 @@ func ImportMovie(emdb *client.EMDB, movie Movie) tea.Cmd { return NewMovie(Movie{m: newMovie}) } } + +func (m *tabTMDB) ResetCmd() tea.Cmd { + return func() tea.Msg { + return TabResetMsg("tmdb") + } +} diff --git a/cmd/terminal-client/tui/tui.go b/cmd/terminal-client/tui/tui.go index 0d61cff..8b4def0 100644 --- a/cmd/terminal-client/tui/tui.go +++ b/cmd/terminal-client/tui/tui.go @@ -34,7 +34,6 @@ func NewLogger() *Logger { func (l *Logger) SetProgram(p *tea.Program) { l.p = p } func (l *Logger) Log(s string) { l.Lines = append(l.Lines, s) } -type TabSizeMsgType tea.WindowSizeMsg type NewMovie Movie func New(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (*tea.Program, error) {