import a movie from tmdb

This commit is contained in:
Erik Winter 2023-12-25 09:21:00 +01:00
parent c9254b2aac
commit 0dd81e68d4
5 changed files with 74 additions and 3 deletions

View File

@ -1,6 +1,7 @@
package client package client
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
@ -50,3 +51,39 @@ func (e *EMDB) GetMovies() ([]model.Movie, error) {
return movies, nil return movies, nil
} }
func (e *EMDB) AddMovie(movie model.Movie) (model.Movie, error) {
body, err := json.Marshal(movie)
if err != nil {
return model.Movie{}, err
}
url := fmt.Sprintf("%s/movie", e.baseURL)
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
if err != nil {
return model.Movie{}, err
}
req.Header.Add("Authorization", e.apiKey)
resp, err := e.c.Do(req)
if err != nil {
return model.Movie{}, err
}
if resp.StatusCode != http.StatusOK {
return model.Movie{}, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
}
newBody, err := io.ReadAll(resp.Body)
if err != nil {
return model.Movie{}, err
}
defer resp.Body.Close()
var newMovie model.Movie
if err := json.Unmarshal(newBody, &newMovie); err != nil {
return model.Movie{}, err
}
return newMovie, nil
}

View File

@ -62,7 +62,7 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var emdbTab, tmdbTab tea.Model var emdbTab, tmdbTab tea.Model
emdbTab, cmd = NewTabEMDB(m.emdb, m.logger) emdbTab, cmd = NewTabEMDB(m.emdb, m.logger)
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
tmdbTab, cmd = NewTabTMDB(m.tmdb, m.logger) tmdbTab, cmd = NewTabTMDB(m.emdb, m.tmdb, m.logger)
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
m.tabs.AddTab("emdb", "EMDB", emdbTab) m.tabs.AddTab("emdb", "EMDB", emdbTab)
m.tabs.AddTab("tmdb", "TMDB", tmdbTab) m.tabs.AddTab("tmdb", "TMDB", tmdbTab)
@ -75,6 +75,9 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
Height: m.contentSize.Height, Height: m.contentSize.Height,
} }
cmds = append(cmds, m.tabs.Update(tabSize)) cmds = append(cmds, m.tabs.Update(tabSize))
case NewMovie:
m.Log(fmt.Sprintf("imported movie %s", msg.m.Title))
cmd = m.tabs.Update(msg)
case error: case error:
m.Log(fmt.Sprintf("ERROR: %s", msg.Error())) m.Log(fmt.Sprintf("ERROR: %s", msg.Error()))
default: default:

View File

@ -43,6 +43,15 @@ func (t *TabSet) Previous() {
} }
} }
func (t *TabSet) Select(name string) {
for i, n := range t.order {
if n == name {
t.active = i
return
}
}
}
func (t *TabSet) Update(msg tea.Msg) tea.Cmd { func (t *TabSet) Update(msg tea.Msg) tea.Cmd {
var cmd tea.Cmd var cmd tea.Cmd
var cmds []tea.Cmd var cmds []tea.Cmd
@ -54,6 +63,9 @@ func (t *TabSet) Update(msg tea.Msg) tea.Cmd {
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
} }
t.size = msg.(TabSizeMsgType) t.size = msg.(TabSizeMsgType)
//case ImportMovieMsg:
// t.Select("emdb")
// t.tabs["emdb"], cmd = t.tabs["emdb"].Update(msg)
default: default:
name := t.order[t.active] name := t.order[t.active]
t.tabs[name], cmd = t.tabs[name].Update(msg) t.tabs[name], cmd = t.tabs[name].Update(msg)

View File

@ -10,16 +10,18 @@ import (
) )
type tabTMDB struct { type tabTMDB struct {
emdb *client.EMDB
tmdb *client.TMDB
initialized bool initialized bool
focused string focused string
searchInput textinput.Model searchInput textinput.Model
searchResults list.Model searchResults list.Model
tmdb *client.TMDB
logger *Logger logger *Logger
} }
func NewTabTMDB(tmdb *client.TMDB, logger *Logger) (tea.Model, tea.Cmd) { func NewTabTMDB(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (tea.Model, tea.Cmd) {
m := tabTMDB{ m := tabTMDB{
emdb: emdb,
tmdb: tmdb, tmdb: tmdb,
logger: logger, logger: logger,
} }
@ -50,6 +52,11 @@ func (m tabTMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
cmds = append(cmds, SearchTMDB(m.tmdb, m.searchInput.Value())) cmds = append(cmds, SearchTMDB(m.tmdb, m.searchInput.Value()))
m.searchInput.Blur() m.searchInput.Blur()
m.Log("search tmdb...") 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))
} }
} }
case Movies: case Movies:
@ -101,3 +108,14 @@ func SearchTMDB(tmdb *client.TMDB, query string) tea.Cmd {
return Movies(tms) return Movies(tms)
} }
} }
func ImportMovie(emdb *client.EMDB, movie Movie) tea.Cmd {
return func() tea.Msg {
newMovie, err := emdb.AddMovie(movie.m)
if err != nil {
return err
}
return NewMovie(Movie{m: newMovie})
}
}

View File

@ -35,6 +35,7 @@ func (l *Logger) SetProgram(p *tea.Program) { l.p = p }
func (l *Logger) Log(s string) { l.Lines = append(l.Lines, s) } func (l *Logger) Log(s string) { l.Lines = append(l.Lines, s) }
type TabSizeMsgType tea.WindowSizeMsg type TabSizeMsgType tea.WindowSizeMsg
type NewMovie Movie
func New(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (*tea.Program, error) { func New(emdb *client.EMDB, tmdb *client.TMDB, logger *Logger) (*tea.Program, error) {
logViewport := viewport.New(0, 0) logViewport := viewport.New(0, 0)