135 lines
3.0 KiB
Go
135 lines
3.0 KiB
Go
package movies
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"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"
|
|
|
|
"gitlab.quimbo.fr/odwrtw/canape-sql/auth"
|
|
"gitlab.quimbo.fr/odwrtw/canape-sql/config"
|
|
"gitlab.quimbo.fr/odwrtw/canape-sql/users"
|
|
"gitlab.quimbo.fr/odwrtw/canape-sql/web"
|
|
)
|
|
|
|
var ErrPolochonUnavailable = fmt.Errorf("Invalid polochon address")
|
|
|
|
func getPolochonMovies(user *users.User) ([]*Movie, error) {
|
|
movies := []*Movie{}
|
|
|
|
var polochonConfig config.UserPolochon
|
|
err := user.GetConfig("polochon", &polochonConfig)
|
|
if err != nil {
|
|
return movies, err
|
|
}
|
|
|
|
client, err := papi.New(polochonConfig.URL, polochonConfig.Token)
|
|
if err != nil {
|
|
return movies, err
|
|
}
|
|
pmovies, err := client.MoviesByID()
|
|
if err != nil {
|
|
// Catch network error for accessing specified polochon address
|
|
if uerr, ok := err.(*url.Error); ok {
|
|
if nerr, ok := uerr.Err.(*net.OpError); ok {
|
|
if nerr.Op == "dial" {
|
|
return movies, ErrPolochonUnavailable
|
|
}
|
|
|
|
}
|
|
}
|
|
return movies, err
|
|
}
|
|
for _, pmovie := range pmovies {
|
|
movies = append(movies, New(pmovie.ImdbID))
|
|
}
|
|
return movies, nil
|
|
}
|
|
|
|
func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
|
|
v := auth.GetCurrentUser(r)
|
|
user, ok := v.(*users.User)
|
|
if !ok {
|
|
return fmt.Errorf("invalid user type")
|
|
}
|
|
web.SetData(r, "user", user)
|
|
|
|
movies, err := getPolochonMovies(user)
|
|
|
|
if err != nil {
|
|
// Catch network error for accessing specified polochon address
|
|
if err == ErrPolochonUnavailable {
|
|
web.SetData(r, "error", "Invalid address")
|
|
return env.Rends(w, r, "movies/library")
|
|
}
|
|
|
|
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, env.Log)
|
|
if err != nil {
|
|
env.Log.Error(err)
|
|
}
|
|
}
|
|
|
|
env.Log.Info(movies)
|
|
|
|
return nil
|
|
}
|
|
|
|
func ExplorePopular(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
|
|
queryOption := trakttv.QueryOption{
|
|
ExtendedInfos: []trakttv.ExtendedInfo{
|
|
trakttv.ExtendedInfoMin,
|
|
},
|
|
Pagination: trakttv.Pagination{
|
|
Page: 1,
|
|
Limit: 20,
|
|
},
|
|
}
|
|
trakt := trakttv.New(env.Config.TraktTVClientID)
|
|
trakt.Endpoint = trakttv.ProductionEndpoint
|
|
tmovies, err := trakt.PopularMovies(queryOption)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
detailer, err := traktdetailer.New(&traktdetailer.Params{env.Config.TraktTVClientID})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
movies := []*Movie{}
|
|
ids := []string{}
|
|
for _, m := range tmovies {
|
|
movie := New(m.IDs.ImDB)
|
|
movie.Detailers = []polochon.Detailer{detailer}
|
|
err := movie.GetDetails(env.Database, env.Log)
|
|
if err != nil {
|
|
env.Log.Error(err)
|
|
continue
|
|
}
|
|
movies = append(movies, movie)
|
|
ids = append(ids, m.IDs.ImDB)
|
|
}
|
|
web.SetData(r, "movies", movies)
|
|
return env.Rends(w, r, "movies/library")
|
|
}
|