fetch movie details

This commit is contained in:
Erik Winter 2023-12-22 16:31:40 +01:00
parent c85371528a
commit 2fdcc0d259
5 changed files with 51 additions and 19 deletions

View File

@ -1,6 +1,9 @@
package clients package clients
import ( import (
"time"
"ewintr.nl/emdb/movie"
tmdb "github.com/cyruzin/golang-tmdb" tmdb "github.com/cyruzin/golang-tmdb"
) )
@ -21,6 +24,39 @@ func NewTMDB(apikey string) (*TMDB, error) {
}, nil }, nil
} }
func (t TMDB) Search(query string) (*tmdb.SearchMovies, error) { func (t TMDB) Search(query string) ([]movie.Movie, error) {
return t.c.GetSearchMovies(query, nil) results, err := t.c.GetSearchMovies(query, nil)
if err != nil {
return nil, err
}
movies := make([]movie.Movie, len(results.Results))
for i, result := range results.Results {
movies[i], err = t.GetMovie(result.ID)
if err != nil {
return nil, err
}
}
return movies, nil
}
func (t TMDB) GetMovie(id int64) (movie.Movie, error) {
result, err := t.c.GetMovieDetails(int(id), nil)
if err != nil {
return movie.Movie{}, err
}
var year int
if release, err := time.Parse("2006-01-02", result.ReleaseDate); err == nil {
year = release.Year()
}
return movie.Movie{
Title: result.Title,
TMDBID: result.ID,
Year: year,
Summary: result.Overview,
}, nil
} }

View File

@ -15,11 +15,6 @@ func main() {
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)
} }
//
//movies, err := tdb.Search("stark fear")
//for _, m := range movies.Results {
// fmt.Printf("result: %+v\n", m)
//}
p := tui.New(tdb) p := tui.New(tdb)
if _, err := p.Run(); err != nil { if _, err := p.Run(); err != nil {

View File

@ -15,9 +15,9 @@ func (m Movie) FilterValue() string {
} }
func (m Movie) Title() string { func (m Movie) Title() string {
return m.m.Title return fmt.Sprintf("%s (%d)", m.m.Title, m.m.Year)
} }
func (m Movie) Description() string { func (m Movie) Description() string {
return fmt.Sprintf("description: %s", m.m.Title) return fmt.Sprintf("%s", m.m.Summary)
} }

View File

@ -4,12 +4,10 @@ import (
"fmt" "fmt"
"ewintr.nl/emdb/cmd/terminal-client/clients" "ewintr.nl/emdb/cmd/terminal-client/clients"
"ewintr.nl/emdb/movie"
"github.com/charmbracelet/bubbles/list" "github.com/charmbracelet/bubbles/list"
"github.com/charmbracelet/bubbles/textinput" "github.com/charmbracelet/bubbles/textinput"
"github.com/charmbracelet/bubbles/viewport" "github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
) )
func New(tmdb *clients.TMDB) *tea.Program { func New(tmdb *clients.TMDB) *tea.Program {
@ -51,9 +49,6 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case tea.WindowSizeMsg: case tea.WindowSizeMsg:
if !m.ready { if !m.ready {
m.initialModel(msg.Width, msg.Height) m.initialModel(msg.Width, msg.Height)
} else {
m.logViewport.Width = msg.Width
m.logViewport.Height = 10
} }
} }
@ -83,11 +78,15 @@ func (m *model) Search() {
return return
} }
m.Log(fmt.Sprintf("found %d results", len(movies)))
items := []list.Item{} items := []list.Item{}
for _, res := range movies.Results { for _, res := range movies {
items = append(items, Movie{m: movie.Movie{Title: res.Title}}) items = append(items, Movie{m: res})
fmt.Printf("result: %+v\n", res.Title) //fmt.Printf("result: %+v\n", res.Title)
} }
//for i := 0; i < 10; i++ {
// items = append(items, Movie{m: movie.Movie{Title: fmt.Sprintf("title %d", i)}})
//}
m.searchResults.SetItems(items) m.searchResults.SetItems(items)
m.focused = "result" m.focused = "result"
@ -97,7 +96,7 @@ func (m model) View() string {
if !m.ready { if !m.ready {
return "\n Initializing..." return "\n Initializing..."
} }
return lipgloss.JoinVertical(lipgloss.Left, m.searchInput.View(), m.searchResults.View(), m.logViewport.View()) return fmt.Sprintf("%s\n---\n%s\n---\n%s", m.searchInput.View(), m.searchResults.View(), m.logViewport.View())
} }
func (m *model) initialModel(width, height int) { func (m *model) initialModel(width, height int) {
@ -109,7 +108,7 @@ func (m *model) initialModel(width, height int) {
m.searchInput = si m.searchInput = si
m.searchInput.Focus() m.searchInput.Focus()
m.searchResults = list.New([]list.Item{}, list.NewDefaultDelegate(), width, height-30) m.searchResults = list.New([]list.Item{}, list.NewDefaultDelegate(), width, height-50)
m.searchResults.Title = "Search results" m.searchResults.Title = "Search results"
m.searchResults.SetShowHelp(false) m.searchResults.SetShowHelp(false)

View File

@ -2,6 +2,7 @@ package movie
type Movie struct { type Movie struct {
ID string `json:"id"` ID string `json:"id"`
TMDBID int64 `json:"tmdbID"`
IMDBID string `json:"imdbID"` IMDBID string `json:"imdbID"`
Title string `json:"title"` Title string `json:"title"`
EnglishTitle string `json:"englishTitle"` EnglishTitle string `json:"englishTitle"`
@ -9,6 +10,7 @@ type Movie struct {
Directors []string `json:"directors"` Directors []string `json:"directors"`
WatchedOn string `json:"watchedOn"` WatchedOn string `json:"watchedOn"`
Rating int `json:"rating"` Rating int `json:"rating"`
Summary string `json:"summary"`
Comment string `json:"comment"` Comment string `json:"comment"`
} }