From db7f11c473637caef0ff4b457725ab32435c2b17 Mon Sep 17 00:00:00 2001 From: Nicolas Duhamel Date: Tue, 28 Jun 2016 16:39:01 +0200 Subject: [PATCH 1/2] Show polochon movies and download link --- src/internal/movies/handlers.go | 23 ++++++++++++++++++++--- src/internal/movies/movies.go | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/internal/movies/handlers.go b/src/internal/movies/handlers.go index 8fc4dea..e7ff1e6 100644 --- a/src/internal/movies/handlers.go +++ b/src/internal/movies/handlers.go @@ -7,6 +7,8 @@ import ( "net/url" "github.com/odwrtw/papi" + polochon "github.com/odwrtw/polochon/lib" + "github.com/odwrtw/polochon/modules/pam" "github.com/odwrtw/trakttv" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/auth" @@ -49,7 +51,12 @@ func getPolochonMovies(user *users.User) ([]*Movie, error) { return movies, err } 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 } @@ -75,15 +82,25 @@ func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error { 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 { + m.Detailers = []polochon.Detailer{detailer} err := m.GetDetails(env, false) if err != nil { env.Log.Error(err) } } - env.Log.Info(movies) - web.SetData(r, "movies", movies) return env.Rends(w, r, "movies/library") } diff --git a/src/internal/movies/movies.go b/src/internal/movies/movies.go index 54eebd2..f1f60bd 100644 --- a/src/internal/movies/movies.go +++ b/src/internal/movies/movies.go @@ -50,6 +50,7 @@ var ( type Movie struct { sqly.BaseModel polochon.Movie + PolochonURL string } func New(imdbID string) *Movie { From 787aaea2b0b4417b59bb3df6e5b1da766ca843d0 Mon Sep 17 00:00:00 2001 From: Nicolas Duhamel Date: Tue, 28 Jun 2016 23:26:02 +0200 Subject: [PATCH 2/2] Add limit and sort in library display --- src/internal/movies/handlers.go | 68 ++++++++++++++++++++++++++++++- src/templates/movies/library.tmpl | 7 +++- src/templates/navbar.tmpl | 2 +- 3 files changed, 74 insertions(+), 3 deletions(-) diff --git a/src/internal/movies/handlers.go b/src/internal/movies/handlers.go index e7ff1e6..8f28f4d 100644 --- a/src/internal/movies/handlers.go +++ b/src/internal/movies/handlers.go @@ -5,6 +5,8 @@ import ( "net" "net/http" "net/url" + "sort" + "strconv" "github.com/odwrtw/papi" polochon "github.com/odwrtw/polochon/lib" @@ -19,6 +21,12 @@ import ( 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) { movies := []*Movie{} @@ -63,6 +71,44 @@ func getPolochonMovies(user *users.User) ([]*Movie, error) { func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error { 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) if !ok { @@ -101,7 +147,27 @@ func FromPolochon(env *web.Env, w http.ResponseWriter, r *http.Request) error { } } - web.SetData(r, "movies", movies) + var smovies sort.Interface + + 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") } diff --git a/src/templates/movies/library.tmpl b/src/templates/movies/library.tmpl index 3005c89..ee7a38b 100644 --- a/src/templates/movies/library.tmpl +++ b/src/templates/movies/library.tmpl @@ -43,7 +43,12 @@

{{ .Plot }}

diff --git a/src/templates/navbar.tmpl b/src/templates/navbar.tmpl index e7df2e9..b5ad630 100644 --- a/src/templates/navbar.tmpl +++ b/src/templates/navbar.tmpl @@ -16,7 +16,7 @@