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":
return m, tea.Quit
case "right", "tab":
m.activeTab = min(m.activeTab+1, len(m.Tabs)-1)
return m, nil
m.TabContent, cmd = m.nextTab()
cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
case "left", "shift+tab":
m.activeTab = max(m.activeTab-1, 0)
return m, nil
m.TabContent, cmd = m.prevTab()
cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
}
case tea.WindowSizeMsg:
m.windowSize = msg
if !m.initialized {
m.TabContent, cmd = NewEMDBTab(m.emdb, m.logger)
m.TabContent, cmd = NewTabEMDB(m.emdb, m.logger)
cmds = append(cmds, cmd)
m.initialized = true
}
@ -106,6 +108,29 @@ func (m baseModel) View() 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 {
var items []string
for i, t := range m.Tabs {

View File

@ -8,19 +8,19 @@ import (
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(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 := emdbTab{
m := tabEMDB{
emdb: emdb,
logger: logger,
list: list,
@ -29,11 +29,11 @@ func NewEMDBTab(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) {
return m, FetchMovieList(emdb, logger)
}
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
@ -54,11 +54,11 @@ 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) {
func (m *tabEMDB) Log(s string) {
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"
//}