Allow movies.GetDetails to be forced
To check from the internet even if the movie is already in the database
This commit is contained in:
parent
b9bfa5f625
commit
403ca081cc
@ -79,7 +79,7 @@ func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, m := range movies {
|
for _, m := range movies {
|
||||||
err := m.GetDetails(env)
|
err := m.GetDetails(env, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
env.Log.Error(err)
|
env.Log.Error(err)
|
||||||
}
|
}
|
||||||
@ -119,7 +119,7 @@ func ExplorePopular(env *web.Env, w http.ResponseWriter, r *http.Request) error
|
|||||||
for _, m := range tmovies {
|
for _, m := range tmovies {
|
||||||
movie := New(m.IDs.ImDB)
|
movie := New(m.IDs.ImDB)
|
||||||
movie.Detailers = []polochon.Detailer{detailer}
|
movie.Detailers = []polochon.Detailer{detailer}
|
||||||
err := movie.GetDetails(env)
|
err := movie.GetDetails(env, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
env.Log.Error(err)
|
env.Log.Error(err)
|
||||||
continue
|
continue
|
||||||
|
@ -17,6 +17,11 @@ const (
|
|||||||
VALUES (:imdbid, :title, :rating, :votes, :plot, :tmdbid, :year, :originaltitle, :runtime, :sorttitle, :tagline)
|
VALUES (:imdbid, :title, :rating, :votes, :plot, :tmdbid, :year, :originaltitle, :runtime, :sorttitle, :tagline)
|
||||||
RETURNING id;`
|
RETURNING id;`
|
||||||
|
|
||||||
|
updateMovieQuery = `
|
||||||
|
UPDATE movies
|
||||||
|
SET imdb_id=:imdbid, title=:title, rating=:rating, votes=:votes, plot=:plot, tmdb_id=:tmdbid, year=:year, original_title=:originaltitle, runtime=:runtime, sort_title=:sorttitle, tagline=:tagline
|
||||||
|
WHERE ID = :id;`
|
||||||
|
|
||||||
getMovieQueryByImdbID = `
|
getMovieQueryByImdbID = `
|
||||||
SELECT
|
SELECT
|
||||||
id, imdb_id AS imdbid, title, rating, votes, plot,
|
id, imdb_id AS imdbid, title, rating, votes, plot,
|
||||||
@ -74,25 +79,40 @@ func (m *Movie) Get(db *sqlx.DB) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDetails retrieves details for the movie, first try to
|
// GetDetails retrieves details for the movie, first try to get info from db,
|
||||||
// get info from db, if not exists, use polochon.Detailer
|
// if not exists, use polochon.Detailer and save informations in the database
|
||||||
// and save informations in the database for future use
|
// for future use
|
||||||
func (m *Movie) GetDetails(env *web.Env) error {
|
//
|
||||||
m.Detailers = env.Config.MovieDetailers
|
// If force is used, the detailer will be used even if the movie is found in
|
||||||
|
// database
|
||||||
|
func (m *Movie) GetDetails(env *web.Env, force bool) error {
|
||||||
|
if len(m.Detailers) == 0 {
|
||||||
|
m.Detailers = env.Config.MovieDetailers
|
||||||
|
}
|
||||||
|
|
||||||
log := env.Log.WithFields(logrus.Fields{
|
log := env.Log.WithFields(logrus.Fields{
|
||||||
"imdb_id": m.ImdbID,
|
"imdb_id": m.ImdbID,
|
||||||
"function": "movies.GetDetails",
|
"function": "movies.GetDetails",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// If the movie is not in db, we should add it, otherwise we should update
|
||||||
|
// it
|
||||||
|
var dbFunc func(db *sqlx.DB) error
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
err = m.Get(env.Database)
|
err = m.Get(env.Database)
|
||||||
if err == nil {
|
switch err {
|
||||||
|
case nil:
|
||||||
log.Debug("movie found in database")
|
log.Debug("movie found in database")
|
||||||
return nil
|
dbFunc = m.Update
|
||||||
}
|
if !force {
|
||||||
if err != ErrNotFound {
|
return nil
|
||||||
// Unexpected error
|
}
|
||||||
|
case ErrNotFound:
|
||||||
|
dbFunc = m.Add
|
||||||
log.Debug("movie not found in database")
|
log.Debug("movie not found in database")
|
||||||
|
default:
|
||||||
|
// Unexpected error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,7 +124,7 @@ func (m *Movie) GetDetails(env *web.Env) error {
|
|||||||
|
|
||||||
log.Debug("got details from detailers")
|
log.Debug("got details from detailers")
|
||||||
|
|
||||||
err = m.Add(env.Database)
|
err = dbFunc(env.Database)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -138,6 +158,12 @@ func (m *Movie) Add(db *sqlx.DB) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update a movie in the database
|
||||||
|
func (m *Movie) Update(db *sqlx.DB) error {
|
||||||
|
_, err := db.NamedQuery(updateMovieQuery, m)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Delete movie from database
|
// Delete movie from database
|
||||||
func (m *Movie) Delete(db *sqlx.DB) error {
|
func (m *Movie) Delete(db *sqlx.DB) error {
|
||||||
r, err := db.Exec(deleteMovieQuery, m.ID)
|
r, err := db.Exec(deleteMovieQuery, m.ID)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user