Merge branch 'polochonGreg' into 'master'

Polochon download URL

Rebased from origin/polochon made by @nicolas 

See merge request !16
This commit is contained in:
Lucas 2016-11-09 13:42:10 +00:00
commit 7735da4ba9
4 changed files with 94 additions and 5 deletions

View File

@ -5,8 +5,12 @@ import (
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
"sort"
"strconv"
"github.com/odwrtw/papi" "github.com/odwrtw/papi"
polochon "github.com/odwrtw/polochon/lib"
"github.com/odwrtw/polochon/modules/pam"
"github.com/odwrtw/trakttv" "github.com/odwrtw/trakttv"
"gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/auth" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/auth"
@ -17,6 +21,12 @@ import (
var ErrPolochonUnavailable = fmt.Errorf("Invalid polochon address") var ErrPolochonUnavailable = fmt.Errorf("Invalid polochon address")
type SortByTitle []*Movie
func (a SortByTitle) Len() int { return len(a) }
func (a SortByTitle) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a SortByTitle) Less(i, j int) bool { return a[i].Title < a[j].Title }
func getPolochonMovies(user *users.User) ([]*Movie, error) { func getPolochonMovies(user *users.User) ([]*Movie, error) {
movies := []*Movie{} movies := []*Movie{}
@ -49,13 +59,56 @@ func getPolochonMovies(user *users.User) ([]*Movie, error) {
return movies, err return movies, err
} }
for _, pmovie := range pmovies { for _, pmovie := range pmovies {
movies = append(movies, New(pmovie.ImdbID)) movie := New(pmovie.ImdbID)
movie.PolochonURL, err = client.DownloadURL(&papi.Movie{ImdbID: movie.ImdbID})
if err != nil {
return nil, err
}
movies = append(movies, movie)
} }
return movies, nil return movies, nil
} }
func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error { func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error {
v := auth.GetCurrentUser(r, env.Log) v := auth.GetCurrentUser(r, env.Log)
params := struct {
Sort string
Order string
Start int
Limit int
}{
Sort: "title",
Order: "asc",
Start: 0,
Limit: 50,
}
err := r.ParseForm()
if err != nil {
return err
}
if sort := r.FormValue("sort"); sort != "" {
params.Sort = sort
}
if order := r.FormValue("order"); order != "" {
params.Order = order
}
if start := r.FormValue("start"); start != "" {
n, err := strconv.Atoi(start)
if err != nil {
return err
}
params.Start = n
}
if limit := r.FormValue("limit"); limit != "" {
n, err := strconv.Atoi(limit)
if err != nil {
return err
}
params.Limit = n
}
user, ok := v.(*users.User) user, ok := v.(*users.User)
if !ok { if !ok {
@ -75,16 +128,46 @@ func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error {
return err return err
} }
var polochonConfig config.UserPolochon
err = user.GetConfig("polochon", &polochonConfig)
if err != nil {
return err
}
detailer, err := pam.New(&pam.Params{
Endpoint: polochonConfig.URL,
Token: polochonConfig.Token,
})
for _, m := range movies { for _, m := range movies {
m.Detailers = []polochon.Detailer{detailer}
err := m.GetDetails(env, false) err := m.GetDetails(env, false)
if err != nil { if err != nil {
env.Log.Error(err) env.Log.Error(err)
} }
} }
env.Log.Info(movies) var smovies sort.Interface
web.SetData(r, "movies", movies) switch params.Sort {
case "title":
smovies = SortByTitle(movies)
default:
return fmt.Errorf("invalid sort param")
}
switch params.Order {
case "asc":
break
case "desc":
smovies = sort.Reverse(smovies)
default:
return fmt.Errorf("invalid order param")
}
sort.Sort(smovies)
web.SetData(r, "movies", movies[params.Start:params.Start+params.Limit])
return env.Rends(w, r, "movies/library") return env.Rends(w, r, "movies/library")
} }

View File

@ -50,6 +50,7 @@ var (
type Movie struct { type Movie struct {
sqly.BaseModel sqly.BaseModel
polochon.Movie polochon.Movie
PolochonURL string
} }
func New(imdbID string) *Movie { func New(imdbID string) *Movie {

View File

@ -43,7 +43,12 @@
<p class="movie-plot">{{ .Plot }}</p> <p class="movie-plot">{{ .Plot }}</p>
<div class="movie-details-buttons"> <div class="movie-details-buttons">
<a id="imdb-link" type="button" class="btn btn-warning" href="http://www.imdb.com/title/{{ .ImdbID }}"> {{ if .PolochonURL }}
<a type="button" class="btn btn-success btn-sm" href="{{ .PolochonURL }}">
<i class="fa fa-download"></i> Download
</a>
{{ end }}
<a id="imdb-link" type="button" class="btn btn-sm btn-warning" href="http://www.imdb.com/title/{{ .ImdbID }}">
<i class="fa fa-external-link"></i> IMDB <i class="fa fa-external-link"></i> IMDB
</a> </a>
</div> </div>

View File

@ -16,7 +16,7 @@
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li><p class="navbar-text">Library: </p></li> <li><p class="navbar-text">Library: </p></li>
<li {{ if eq $.Route "movies.polochon" }}class="active"{{ end }}> <li {{ if eq $.Route "movies.polochon" }}class="active"{{ end }}>
<a href="{{ URL "movies.polochon" }}">Movies{{ if eq $.Route "movies.polochon" }}<span class="sr-only">(current)</span>{{ end }}</a> <a href="{{ URL "movies.polochon" }}?limit=10">Movies{{ if eq $.Route "movies.polochon" }}<span class="sr-only">(current)</span>{{ end }}</a>
</li> </li>
<li><a href="#">TV Shows</a></li> <li><a href="#">TV Shows</a></li>