import a movie from tmdb
This commit is contained in:
parent
c9254b2aac
commit
0dd81e68d4
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue