From b9bfa5f625ee62e0b291bc5e32f1830971d8b966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Sun, 6 Nov 2016 23:38:14 +0100 Subject: [PATCH] Add tmdb in the config file and use it as detailer Until the detailers are available in the configuration file, let's use tmdb as the default detailer for the movies --- config.yml.exemple | 1 + src/internal/config/canape.go | 16 ++++++++++++++++ src/internal/movies/handlers.go | 15 +++------------ src/internal/movies/movies.go | 26 ++++++++++++++++++++------ 4 files changed, 40 insertions(+), 18 deletions(-) diff --git a/config.yml.exemple b/config.yml.exemple index 2b948bb..07a4295 100644 --- a/config.yml.exemple +++ b/config.yml.exemple @@ -5,6 +5,7 @@ authorizer: cost: 10 pgdsn: postgres://test:test@127.0.0.1:5432/dev?sslmode=disable trakttv_client_id: my_trakttv_client_id +tmdb_api_key: my_tmdb_key listen_port: 3000 templates_dir: build/templates public_dir: build/public diff --git a/src/internal/config/canape.go b/src/internal/config/canape.go index beacf47..55ff3bf 100644 --- a/src/internal/config/canape.go +++ b/src/internal/config/canape.go @@ -4,6 +4,9 @@ import ( "io/ioutil" "os" + polochon "github.com/odwrtw/polochon/lib" + "github.com/odwrtw/polochon/modules/tmdb" + "gopkg.in/yaml.v2" ) @@ -14,6 +17,10 @@ type Config struct { TraktTVClientID string `yaml:"trakttv_client_id"` TemplatesDir string `yaml:"templates_dir"` PublicDir string `yaml:"public_dir"` + + // TODO improve the detailers configurations + TmdbAPIKey string `yaml:"tmdb_api_key"` + MovieDetailers []polochon.Detailer } type AuthorizerConfig struct { @@ -42,5 +49,14 @@ func Load(path string) (*Config, error) { return nil, err } + cf.MovieDetailers = []polochon.Detailer{} + if cf.TmdbAPIKey != "" { + d, err := tmdb.New(&tmdb.Params{cf.TmdbAPIKey}) + if err != nil { + return nil, err + } + cf.MovieDetailers = append(cf.MovieDetailers, d) + } + return cf, nil } diff --git a/src/internal/movies/handlers.go b/src/internal/movies/handlers.go index c701312..a5af68d 100644 --- a/src/internal/movies/handlers.go +++ b/src/internal/movies/handlers.go @@ -5,11 +5,10 @@ import ( "net" "net/http" "net/url" - "path/filepath" + "github.com/gorilla/mux" "github.com/odwrtw/papi" "github.com/odwrtw/polochon/lib" - "github.com/odwrtw/polochon/modules/mock" traktdetailer "github.com/odwrtw/polochon/modules/trakttv" "github.com/odwrtw/trakttv" @@ -79,16 +78,8 @@ func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error { return err } - //TODO use configurable detailer - // detailer, err := tmdb.New(&tmdb.Params{"57be344f84917b3f32c68a678f1482eb"}) - detailer, _ := mock.NewDetailer(nil) - if err != nil { - return err - } - for _, m := range movies { - m.Detailers = []polochon.Detailer{detailer} - err := m.GetDetails(env.Database, filepath.Join(env.Config.PublicDir, "img", "movies"), env.Log) + err := m.GetDetails(env) if err != nil { env.Log.Error(err) } @@ -128,7 +119,7 @@ func ExplorePopular(env *web.Env, w http.ResponseWriter, r *http.Request) error for _, m := range tmovies { movie := New(m.IDs.ImDB) movie.Detailers = []polochon.Detailer{detailer} - err := movie.GetDetails(env.Database, filepath.Join(env.Config.PublicDir, "img", "movies"), env.Log) + err := movie.GetDetails(env) if err != nil { env.Log.Error(err) continue diff --git a/src/internal/movies/movies.go b/src/internal/movies/movies.go index b1e0157..b0ec930 100644 --- a/src/internal/movies/movies.go +++ b/src/internal/movies/movies.go @@ -77,35 +77,49 @@ func (m *Movie) Get(db *sqlx.DB) error { // GetDetails retrieves details for the movie, first try to // get info from db, if not exists, use polochon.Detailer // and save informations in the database for future use -func (m *Movie) GetDetails(db *sqlx.DB, imgPath string, log *logrus.Entry) error { +func (m *Movie) GetDetails(env *web.Env) error { + m.Detailers = env.Config.MovieDetailers + + log := env.Log.WithFields(logrus.Fields{ + "imdb_id": m.ImdbID, + "function": "movies.GetDetails", + }) var err error - err = m.Get(db) + err = m.Get(env.Database) if err == nil { - // found ok + log.Debug("movie found in database") return nil } if err != ErrNotFound { // Unexpected error + log.Debug("movie not found in database") return err } // so we got ErrNotFound so GetDetails from a detailer - err = m.Movie.GetDetails(log) + err = m.Movie.GetDetails(env.Log) if err != nil { return err } - err = m.Add(db) + log.Debug("got details from detailers") + + err = m.Add(env.Database) if err != nil { return err } + log.Debug("movie added in database") + // Download poster - err = web.Download(m.Thumb, filepath.Join(imgPath, m.ImdbID+".jpg")) + imgPath := filepath.Join(env.Config.PublicDir, "img", "movies", m.ImdbID+".jpg") + err = web.Download(m.Thumb, imgPath) if err != nil { return err } + log.Debug("poster downloaded") + return nil }