This commit is contained in:
Erik Winter 2023-12-24 12:55:38 +01:00
parent 79308b7ac2
commit e52602a35f
4 changed files with 109 additions and 36 deletions

View File

@ -54,16 +54,18 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case "ctrl+c", "q", "esc": case "ctrl+c", "q", "esc":
return m, tea.Quit return m, tea.Quit
case "right", "tab": case "right", "tab":
m.activeTab = min(m.activeTab+1, len(m.Tabs)-1) m.TabContent, cmd = m.nextTab()
return m, nil cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
case "left", "shift+tab": case "left", "shift+tab":
m.activeTab = max(m.activeTab-1, 0) m.TabContent, cmd = m.prevTab()
return m, nil cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
} }
case tea.WindowSizeMsg: case tea.WindowSizeMsg:
m.windowSize = msg m.windowSize = msg
if !m.initialized { if !m.initialized {
m.TabContent, cmd = NewEMDBTab(m.emdb, m.logger) m.TabContent, cmd = NewTabEMDB(m.emdb, m.logger)
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
m.initialized = true m.initialized = true
} }
@ -106,6 +108,29 @@ func (m baseModel) View() string {
return docStyle.Render(doc.String()) return docStyle.Render(doc.String())
} }
func (m *baseModel) nextTab() (tea.Model, tea.Cmd) {
m.activeTab = min(m.activeTab+1, len(m.Tabs)-1)
return m.newTab()
}
func (m *baseModel) prevTab() (tea.Model, tea.Cmd) {
m.activeTab = max(m.activeTab-1, 0)
return m.newTab()
}
func (m *baseModel) newTab() (tea.Model, tea.Cmd) {
switch m.activeTab {
case 0:
return NewTabEMDB(m.emdb, m.logger)
case 1:
return NewTabTMDB(m.tmdb, m.logger)
default:
return nil, nil
}
}
func (m *baseModel) renderMenu() string { func (m *baseModel) renderMenu() string {
var items []string var items []string
for i, t := range m.Tabs { for i, t := range m.Tabs {

View File

@ -8,19 +8,19 @@ import (
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
) )
type emdbTab struct { type tabEMDB struct {
initialized bool initialized bool
list list.Model list list.Model
emdb *client.EMDB emdb *client.EMDB
logger *Logger logger *Logger
} }
func NewEMDBTab(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) { func NewTabEMDB(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 := emdbTab{ m := tabEMDB{
emdb: emdb, emdb: emdb,
logger: logger, logger: logger,
list: list, list: list,
@ -29,11 +29,11 @@ func NewEMDBTab(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) {
return m, FetchMovieList(emdb, logger) return m, FetchMovieList(emdb, logger)
} }
func (m emdbTab) Init() tea.Cmd { func (m tabEMDB) Init() tea.Cmd {
return nil 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 cmd tea.Cmd
var cmds []tea.Cmd var cmds []tea.Cmd
@ -54,11 +54,11 @@ func (m emdbTab) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, tea.Batch(cmds...) return m, tea.Batch(cmds...)
} }
func (m emdbTab) View() string { func (m tabEMDB) View() string {
return m.list.View() return m.list.View()
} }
func (m *emdbTab) Log(s string) { func (m *tabEMDB) Log(s string) {
m.logger.Log(s) m.logger.Log(s)
} }

View File

@ -1,24 +0,0 @@
package tui
//focused string
//searchInput textinput.Model
//searchResults list.Model
//movieList list.Model
//func (m *model) Search() {
// m.Log("start search")
// movies, err := m.tmdb.Search(m.searchInput.Value())
// if err != nil {
// m.Log(fmt.Sprintf("error: %v", err))
// return
// }
//
// m.Log(fmt.Sprintf("found %d results", len(movies)))
// items := []list.Item{}
// for _, res := range movies {
// items = append(items, Movie{m: res})
// }
//
// m.searchResults.SetItems(items)
// m.focused = "result"
//}

View File

@ -0,0 +1,72 @@
package tui
import (
"ewintr.nl/emdb/client"
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
)
//focused string
//searchInput textinput.Model
//searchResults list.Model
//movieLis
type tabTMDB struct {
initialized bool
results list.Model
tmdb *client.TMDB
logger *Logger
}
func NewTabTMDB(tmdb *client.TMDB, logger *Logger) (tea.Model, tea.Cmd) {
m := tabTMDB{
tmdb: tmdb,
logger: logger,
}
return m, nil
}
func (m tabTMDB) Init() tea.Cmd {
return nil
}
func (m tabTMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmd tea.Cmd
var cmds []tea.Cmd
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c", "q", "esc":
return m, tea.Quit
}
}
m.results, cmd = m.results.Update(msg)
cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
}
func (m tabTMDB) View() string {
return "tmdb"
}
//func (m *model) Search() {
// m.Log("start search")
// movies, err := m.tmdb.Search(m.searchInput.Value())
// if err != nil {
// m.Log(fmt.Sprintf("error: %v", err))
// return
// }
//
// m.Log(fmt.Sprintf("found %d results", len(movies)))
// items := []list.Item{}
// for _, res := range movies {
// items = append(items, Movie{m: res})
// }
//
// m.searchResults.SetItems(items)
// m.focused = "result"
//}