251 lines
6.5 KiB
Go
251 lines
6.5 KiB
Go
package extmedias
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
polochon "github.com/odwrtw/polochon/lib"
|
|
"github.com/sirupsen/logrus"
|
|
"gitlab.quimbo.fr/odwrtw/canape/backend/auth"
|
|
"gitlab.quimbo.fr/odwrtw/canape/backend/backend"
|
|
"gitlab.quimbo.fr/odwrtw/canape/backend/movies"
|
|
"gitlab.quimbo.fr/odwrtw/canape/backend/shows"
|
|
"gitlab.quimbo.fr/odwrtw/canape/backend/users"
|
|
"gitlab.quimbo.fr/odwrtw/canape/backend/web"
|
|
)
|
|
|
|
// RefreshHandler refresh the explored movies
|
|
func RefreshHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"function": "extmedias.RefreshHandler",
|
|
})
|
|
log.Debugf("refreshing shows and movies")
|
|
Refresh(env)
|
|
log.Debugf("done refreshing shows and movies")
|
|
return nil
|
|
}
|
|
|
|
// RefreshMoviesHandler refresh the explored movies
|
|
func RefreshMoviesHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"function": "extmedias.RefreshMoviesHandler",
|
|
})
|
|
log.Debugf("refreshing movies")
|
|
RefreshMovies(env)
|
|
log.Debugf("done refreshing movies")
|
|
return nil
|
|
}
|
|
|
|
// RefreshShowsHandler refresh the explored shows
|
|
func RefreshShowsHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"function": "extmedias.RefreshShowsHandler",
|
|
})
|
|
log.Debugf("refreshing shows")
|
|
RefreshShows(env)
|
|
log.Debugf("done refreshing shows")
|
|
return nil
|
|
}
|
|
|
|
// GetMovies get some movies
|
|
func GetMovies(env *web.Env, user *users.User, source string, category string) ([]*movies.Movie, error) {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"source": source,
|
|
"category": category,
|
|
"function": "extmedias.GetMovies",
|
|
})
|
|
log.Debugf("getting movies")
|
|
media, err := backend.Explore(env.Database, "movie", source, category)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Create a papi client
|
|
client, err := user.NewPapiClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Get the user's polochon movies
|
|
pMovies, err := client.GetMovies()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Get the user's wishlisted movies
|
|
moviesWishlist, err := backend.GetMovieWishlist(env.Database, user.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
movieList := []*movies.Movie{}
|
|
// Fill all the movies infos from the list of IDs
|
|
for _, id := range media.IDs {
|
|
pMovie, _ := pMovies.Has(id)
|
|
movie := movies.New(id, client, pMovie, moviesWishlist.IsMovieInWishlist(id), env.Config.PublicDir, env.Config.ImgURLPrefix)
|
|
// First check in the DB
|
|
before := []polochon.Detailer{env.Backend.Detailer}
|
|
// Then with the default detailers
|
|
after := env.Config.MovieDetailers
|
|
err := movie.GetAndFetch(env, before, after)
|
|
if err != nil {
|
|
env.Log.Errorf("error while getting movie details : %s", err)
|
|
continue
|
|
}
|
|
|
|
// Look only for torrents in db
|
|
torrenters := []polochon.Torrenter{env.Backend.Torrenter}
|
|
err = movie.GetTorrents(env, torrenters)
|
|
if err != nil {
|
|
env.Log.Errorf("error while getting movie torrents : %s", err)
|
|
continue
|
|
}
|
|
|
|
movieList = append(movieList, movie)
|
|
}
|
|
return movieList, nil
|
|
}
|
|
|
|
// GetShows get some shows
|
|
func GetShows(env *web.Env, user *users.User, source string, category string, force bool) ([]*shows.Show, error) {
|
|
log := env.Log.WithFields(logrus.Fields{
|
|
"source": source,
|
|
"category": category,
|
|
"function": "extmedias.GetShows",
|
|
})
|
|
log.Debugf("getting shows")
|
|
// Get the user's polochon config
|
|
media, err := backend.Explore(env.Database, "show", source, category)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Create a papi client
|
|
client, err := user.NewPapiClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Get the polochon's shows
|
|
pShows, err := client.GetShows()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Get the user's wishlisted shows
|
|
wShows, err := backend.GetShowWishlist(env.Database, user.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
showList := []*shows.Show{}
|
|
// Fill all the shows infos from the list of IDs
|
|
for _, id := range media.IDs {
|
|
pShow, _ := pShows.Has(id)
|
|
wShow, _ := wShows.IsShowInWishlist(id)
|
|
show := shows.NewWithClient(id, client, pShow, wShow, env.Config.PublicDir, env.Config.ImgURLPrefix)
|
|
|
|
// First check in the DB
|
|
before := []polochon.Detailer{env.Backend.Detailer}
|
|
// Then with the default detailers
|
|
after := env.Config.ShowDetailers
|
|
err := show.GetAndFetch(env, before, after)
|
|
if err != nil {
|
|
env.Log.Errorf("error while getting show details : %s", err)
|
|
continue
|
|
}
|
|
showList = append(showList, show)
|
|
}
|
|
return showList, nil
|
|
}
|
|
|
|
// ExploreMovies will explore some movies from the db
|
|
func ExploreMovies(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
err := r.ParseForm()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
source := r.FormValue("source")
|
|
// Default source
|
|
if source == "" {
|
|
source = "trakttv"
|
|
}
|
|
|
|
category := r.FormValue("category")
|
|
// Default category
|
|
if category == "" {
|
|
category = "popular"
|
|
}
|
|
|
|
v := auth.GetCurrentUser(r, env.Log)
|
|
user, ok := v.(*users.User)
|
|
if !ok {
|
|
return env.RenderError(w, errors.New("invalid user"))
|
|
}
|
|
|
|
// Get the medias without trying to refresh them
|
|
movies, err := GetMovies(env, user, source, category)
|
|
if err != nil {
|
|
return env.RenderError(w, err)
|
|
}
|
|
|
|
return env.RenderJSON(w, movies)
|
|
}
|
|
|
|
// ExploreShows will explore some shows
|
|
func ExploreShows(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
err := r.ParseForm()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
source := r.FormValue("source")
|
|
// Default source
|
|
if source == "" {
|
|
source = "eztv"
|
|
}
|
|
|
|
category := r.FormValue("category")
|
|
// Default category
|
|
if category == "" {
|
|
category = "rating"
|
|
}
|
|
|
|
v := auth.GetCurrentUser(r, env.Log)
|
|
user, ok := v.(*users.User)
|
|
if !ok {
|
|
return env.RenderError(w, errors.New("invalid user"))
|
|
}
|
|
|
|
// Get the medias without trying to refresh them
|
|
shows, err := GetShows(env, user, source, category, false)
|
|
if err != nil {
|
|
return env.RenderError(w, err)
|
|
}
|
|
|
|
return env.RenderJSON(w, shows)
|
|
}
|
|
|
|
// MovieExplorerOptions will return all the explore movie options available
|
|
func MovieExplorerOptions(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
// Get the list of movie explorer options available
|
|
movieOptions, err := GetMovieOptions(env)
|
|
if err != nil {
|
|
return env.RenderError(w, err)
|
|
}
|
|
|
|
return env.RenderJSON(w, movieOptions)
|
|
}
|
|
|
|
// ShowExplorerOptions will return all the explore show options available
|
|
func ShowExplorerOptions(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
|
// Get the list of show explorer options available
|
|
showOptions, err := GetShowOptions(env)
|
|
if err != nil {
|
|
return env.RenderError(w, err)
|
|
}
|
|
|
|
return env.RenderJSON(w, showOptions)
|
|
}
|