Run go fmt and add swap files to gitignore
Cette révision appartient à :
Parent
480064f3a2
révision
6adce8eda9
5 fichiers modifiés avec 118 ajouts et 112 suppressions
1
.gitignore
externe
1
.gitignore
externe
|
@ -5,3 +5,4 @@ nyaa
|
|||
nyaa.exe
|
||||
nyaa-master.exe
|
||||
*.zip
|
||||
*.swp
|
||||
|
|
14
main.go
14
main.go
|
@ -40,7 +40,7 @@ func checkErr(err error) {
|
|||
}
|
||||
|
||||
func unZlib(description []byte) string {
|
||||
if (len(description) > 0) {
|
||||
if len(description) > 0 {
|
||||
b := bytes.NewReader(description)
|
||||
log.Println(b)
|
||||
z, err := zlib.NewReader(b)
|
||||
|
@ -49,7 +49,7 @@ func unZlib(description []byte) string {
|
|||
p, err := ioutil.ReadAll(z)
|
||||
checkErr(err)
|
||||
return string(p)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
|
@ -112,7 +112,9 @@ func searchHandler(w http.ResponseWriter, r *http.Request) {
|
|||
maxPerPage = 50 // default Value maxPerPage
|
||||
}
|
||||
pagenum, _ := strconv.Atoi(html.EscapeString(page))
|
||||
if (pagenum == 0) { pagenum = 1 }
|
||||
if pagenum == 0 {
|
||||
pagenum = 1
|
||||
}
|
||||
searchQuery := r.URL.Query().Get("q")
|
||||
cat := r.URL.Query().Get("c")
|
||||
stat := r.URL.Query().Get("s")
|
||||
|
@ -151,7 +153,6 @@ func searchHandler(w http.ResponseWriter, r *http.Request) {
|
|||
navigationTorrents := Navigation{nbTorrents, maxPerPage, pagenum, "search_page"}
|
||||
htv := HomeTemplateVariables{b, getAllCategories(false), searchQuery, stat, cat, sort, order, navigationTorrents, r.URL, mux.CurrentRoute(r)}
|
||||
|
||||
|
||||
err := templates.ExecuteTemplate(w, "index.html", htv)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
|
@ -246,7 +247,9 @@ func rootHandler(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
nbTorrents := 0
|
||||
pagenum, _ := strconv.Atoi(html.EscapeString(page))
|
||||
if (pagenum == 0) { pagenum = 1 }
|
||||
if pagenum == 0 {
|
||||
pagenum = 1
|
||||
}
|
||||
|
||||
b := []TorrentsJson{}
|
||||
torrents, nbTorrents := getAllTorrents(maxPerPage, maxPerPage*(pagenum-1))
|
||||
|
@ -289,7 +292,6 @@ func main() {
|
|||
router.HandleFunc("/feed.xml", rssHandler)
|
||||
router.HandleFunc("/view/{id}", viewHandler).Name("view_torrent")
|
||||
|
||||
|
||||
http.Handle("/", router)
|
||||
|
||||
// Set up server,
|
||||
|
|
75
models.go
75
models.go
|
@ -18,17 +18,17 @@ type Feed struct {
|
|||
}
|
||||
|
||||
type Categories struct {
|
||||
Id int `gorm:"column:category_id"`
|
||||
Name string `gorm:"column:category_name"`
|
||||
Torrents []Torrents `gorm:"ForeignKey:category_id;AssociationForeignKey:category_id"`
|
||||
Sub_Categories []Sub_Categories `gorm:"ForeignKey:parent_id;AssociationForeignKey:category_id"`
|
||||
Id int `gorm:"column:category_id"`
|
||||
Name string `gorm:"column:category_name"`
|
||||
Torrents []Torrents `gorm:"ForeignKey:category_id;AssociationForeignKey:category_id"`
|
||||
Sub_Categories []Sub_Categories `gorm:"ForeignKey:parent_id;AssociationForeignKey:category_id"`
|
||||
}
|
||||
|
||||
type Sub_Categories struct {
|
||||
Id int `gorm:"column:sub_category_id"`
|
||||
Name string `gorm:"column:Sub_category_name"`
|
||||
Parent_id int `gorm:"column:parent_id"`
|
||||
Torrents []Torrents `gorm:"ForeignKey:sub_category_id;AssociationForeignKey:sub_category_id"`
|
||||
Id int `gorm:"column:sub_category_id"`
|
||||
Name string `gorm:"column:Sub_category_name"`
|
||||
Parent_id int `gorm:"column:parent_id"`
|
||||
Torrents []Torrents `gorm:"ForeignKey:sub_category_id;AssociationForeignKey:sub_category_id"`
|
||||
}
|
||||
|
||||
type Statuses struct {
|
||||
|
@ -42,7 +42,7 @@ type Torrents struct {
|
|||
Name string `gorm:"column:torrent_name"`
|
||||
Category_id int `gorm:"column:category_id"`
|
||||
Sub_category_id int `gorm:"column:sub_category_id"`
|
||||
Status int `gorm:"column:status_id"`
|
||||
Status int `gorm:"column:status_id"`
|
||||
Hash string `gorm:"column:torrent_hash"`
|
||||
Date int `gorm:"column:date"`
|
||||
Downloads int `gorm:"column:downloads"`
|
||||
|
@ -60,29 +60,29 @@ JSON Models Oject
|
|||
*/
|
||||
|
||||
type CategoryJson struct {
|
||||
Id string `json: "id"`
|
||||
Name string `json: "category"`
|
||||
Id string `json: "id"`
|
||||
Name string `json: "category"`
|
||||
Torrents []TorrentsJson `json: "torrents"`
|
||||
QueryRecordCount int `json: "queryRecordCount"`
|
||||
TotalRecordCount int `json: "totalRecordCount"`
|
||||
}
|
||||
|
||||
type SubCategoryJson struct {
|
||||
Id string `json: "id"`
|
||||
Name string `json: "category"`
|
||||
Id string `json: "id"`
|
||||
Name string `json: "category"`
|
||||
}
|
||||
|
||||
type TorrentsJson struct {
|
||||
Id string `json: "id"` // Is there a need to put the ID?
|
||||
Name string `json: "name"`
|
||||
Status int `json: "status"`
|
||||
Hash string `json: "hash"`
|
||||
Date int `json: "date"`
|
||||
Filesize string `json: "filesize"`
|
||||
Description string `json: "description"`
|
||||
Id string `json: "id"` // Is there a need to put the ID?
|
||||
Name string `json: "name"`
|
||||
Status int `json: "status"`
|
||||
Hash string `json: "hash"`
|
||||
Date int `json: "date"`
|
||||
Filesize string `json: "filesize"`
|
||||
Description string `json: "description"`
|
||||
Sub_Category SubCategoryJson `json: "sub_category"`
|
||||
Category CategoryJson `json: "category"`
|
||||
Magnet template.URL `json: "magnet"`
|
||||
Category CategoryJson `json: "category"`
|
||||
Magnet template.URL `json: "magnet"`
|
||||
}
|
||||
|
||||
type WhereParams struct {
|
||||
|
@ -90,7 +90,6 @@ type WhereParams struct {
|
|||
params []interface{}
|
||||
}
|
||||
|
||||
|
||||
/* Function to interact with Models
|
||||
*
|
||||
* Get the torrents with where clause
|
||||
|
@ -132,7 +131,7 @@ func getTorrentsOrderBy(parameters *WhereParams, orderBy string, limit int, offs
|
|||
var torrents []Torrents
|
||||
var dbQuery *gorm.DB
|
||||
var count int
|
||||
if (parameters != nil) { // if there is where parameters
|
||||
if parameters != nil { // if there is where parameters
|
||||
db.Model(&torrents).Where(parameters.conditions, parameters.params...).Count(&count)
|
||||
dbQuery = db.Model(&torrents).Where(parameters.conditions, parameters.params...)
|
||||
} else {
|
||||
|
@ -146,7 +145,7 @@ func getTorrentsOrderBy(parameters *WhereParams, orderBy string, limit int, offs
|
|||
if limit != 0 || offset != 0 { // if limits provided
|
||||
dbQuery = dbQuery.Limit(limit).Offset(offset)
|
||||
}
|
||||
dbQuery.Order(orderBy).Preload("Categories").Preload("Sub_Categories").Find(&torrents)
|
||||
dbQuery.Order(orderBy).Preload("Categories").Preload("Sub_Categories").Find(&torrents)
|
||||
return torrents, count
|
||||
|
||||
}
|
||||
|
@ -208,30 +207,30 @@ func createWhereParams(conditions string, params ...string) WhereParams {
|
|||
func (t *Torrents) toJson() TorrentsJson {
|
||||
magnet := "magnet:?xt=urn:btih:" + strings.TrimSpace(t.Hash) + "&dn=" + t.Name + trackers
|
||||
res := TorrentsJson{
|
||||
Id: strconv.Itoa(t.Id),
|
||||
Name: html.UnescapeString(t.Name),
|
||||
Status: t.Status,
|
||||
Hash: t.Hash,
|
||||
Date: t.Date,
|
||||
Filesize: t.Filesize,
|
||||
Description: unZlib(t.Description),
|
||||
Id: strconv.Itoa(t.Id),
|
||||
Name: html.UnescapeString(t.Name),
|
||||
Status: t.Status,
|
||||
Hash: t.Hash,
|
||||
Date: t.Date,
|
||||
Filesize: t.Filesize,
|
||||
Description: unZlib(t.Description),
|
||||
Sub_Category: t.Sub_Categories.toJson(),
|
||||
Category: t.Categories.toJson(),
|
||||
Magnet: safe(magnet)}
|
||||
Category: t.Categories.toJson(),
|
||||
Magnet: safe(magnet)}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
func (c *Sub_Categories) toJson() SubCategoryJson {
|
||||
return SubCategoryJson{
|
||||
Id: strconv.Itoa(c.Id),
|
||||
Name: html.UnescapeString(c.Name)}
|
||||
Id: strconv.Itoa(c.Id),
|
||||
Name: html.UnescapeString(c.Name)}
|
||||
}
|
||||
|
||||
func (c *Categories) toJson() CategoryJson {
|
||||
return CategoryJson{
|
||||
Id: strconv.Itoa(c.Id),
|
||||
Name: html.UnescapeString(c.Name)}
|
||||
Id: strconv.Itoa(c.Id),
|
||||
Name: html.UnescapeString(c.Name)}
|
||||
}
|
||||
|
||||
/* Complete the functions when necessary... */
|
||||
|
|
|
@ -1,50 +1,54 @@
|
|||
package main
|
||||
|
||||
import(
|
||||
"math"
|
||||
"html/template"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"log"
|
||||
import (
|
||||
"html/template"
|
||||
"log"
|
||||
"math"
|
||||
"net/url"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var funcMap = template.FuncMap{
|
||||
"min": math.Min,
|
||||
"genRoute": func (name string, params ...string) string {
|
||||
url, err := router.Get(name).URL(params...)
|
||||
if (err == nil) {
|
||||
return url.String()
|
||||
}
|
||||
return "error"
|
||||
},
|
||||
"genNav" : func (nav Navigation, currentUrl *url.URL, pagesSelectable int) template.HTML {
|
||||
maxPages := math.Ceil(float64(nav.TotalItem)/float64(nav.MaxItemPerPage))
|
||||
route := router.Get(nav.Route)
|
||||
"min": math.Min,
|
||||
"genRoute": func(name string, params ...string) string {
|
||||
url, err := router.Get(name).URL(params...)
|
||||
if err == nil {
|
||||
return url.String()
|
||||
}
|
||||
return "error"
|
||||
},
|
||||
"genNav": func(nav Navigation, currentUrl *url.URL, pagesSelectable int) template.HTML {
|
||||
maxPages := math.Ceil(float64(nav.TotalItem) / float64(nav.MaxItemPerPage))
|
||||
route := router.Get(nav.Route)
|
||||
|
||||
var ret = ""
|
||||
if nav.CurrentPage-1 > 0 {
|
||||
url, _ := route.URL("page", "1")
|
||||
ret = ret + "<li><a id=\"page-prev\" href=\""+ url.String() + "?" + currentUrl.RawQuery +"\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>"
|
||||
}
|
||||
startValue := 1
|
||||
if (nav.CurrentPage > pagesSelectable) {
|
||||
startValue = (int(math.Min((float64(nav.CurrentPage) + math.Floor(float64(pagesSelectable)/2)), maxPages))-pagesSelectable+1)
|
||||
}
|
||||
endValue := (startValue+pagesSelectable-1)
|
||||
if (endValue > int(maxPages)) { endValue = int(maxPages) }
|
||||
log.Println(nav.TotalItem)
|
||||
for i := startValue; i <= endValue; i++ {
|
||||
pageNum := strconv.Itoa(i)
|
||||
url,_ := route.URL("page", pageNum)
|
||||
ret = ret + "<li"
|
||||
if (i == nav.CurrentPage) { ret = ret + " class=\"active\"" }
|
||||
var ret = ""
|
||||
if nav.CurrentPage-1 > 0 {
|
||||
url, _ := route.URL("page", "1")
|
||||
ret = ret + "<li><a id=\"page-prev\" href=\"" + url.String() + "?" + currentUrl.RawQuery + "\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>"
|
||||
}
|
||||
startValue := 1
|
||||
if nav.CurrentPage > pagesSelectable {
|
||||
startValue = (int(math.Min((float64(nav.CurrentPage)+math.Floor(float64(pagesSelectable)/2)), maxPages)) - pagesSelectable + 1)
|
||||
}
|
||||
endValue := (startValue + pagesSelectable - 1)
|
||||
if endValue > int(maxPages) {
|
||||
endValue = int(maxPages)
|
||||
}
|
||||
log.Println(nav.TotalItem)
|
||||
for i := startValue; i <= endValue; i++ {
|
||||
pageNum := strconv.Itoa(i)
|
||||
url, _ := route.URL("page", pageNum)
|
||||
ret = ret + "<li"
|
||||
if i == nav.CurrentPage {
|
||||
ret = ret + " class=\"active\""
|
||||
}
|
||||
|
||||
ret = ret + "><a href=\""+ url.String() + "?" + currentUrl.RawQuery +"\">"+strconv.Itoa(i)+"</a></li>"
|
||||
}
|
||||
if nav.CurrentPage < int(maxPages) {
|
||||
url, _ := route.URL("page", strconv.Itoa(nav.CurrentPage+1))
|
||||
ret = ret + "<li><a id=\"page-next\" href=\""+ url.String() + "?" + currentUrl.RawQuery +"\" aria-label=\"Next\"><span aria-hidden=\"true\">»</span></a></li>"
|
||||
}
|
||||
return template.HTML(ret)
|
||||
},
|
||||
}
|
||||
ret = ret + "><a href=\"" + url.String() + "?" + currentUrl.RawQuery + "\">" + strconv.Itoa(i) + "</a></li>"
|
||||
}
|
||||
if nav.CurrentPage < int(maxPages) {
|
||||
url, _ := route.URL("page", strconv.Itoa(nav.CurrentPage+1))
|
||||
ret = ret + "<li><a id=\"page-next\" href=\"" + url.String() + "?" + currentUrl.RawQuery + "\" aria-label=\"Next\"><span aria-hidden=\"true\">»</span></a></li>"
|
||||
}
|
||||
return template.HTML(ret)
|
||||
},
|
||||
}
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"github.com/gorilla/mux"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
/* Each Page should have an object to pass to their own template
|
||||
/* Each Page should have an object to pass to their own template
|
||||
* Therefore, we put them in a separate file for better maintenance
|
||||
*/
|
||||
*/
|
||||
|
||||
type FaqTemplateVariables struct {
|
||||
URL *url.URL // For parsing Url in templates
|
||||
Route *mux.Route // For getting current route in templates
|
||||
Query string
|
||||
Status string
|
||||
Category string
|
||||
Sort string
|
||||
Order string
|
||||
Navigation Navigation
|
||||
URL *url.URL // For parsing Url in templates
|
||||
Route *mux.Route // For getting current route in templates
|
||||
Query string
|
||||
Status string
|
||||
Category string
|
||||
Sort string
|
||||
Order string
|
||||
Navigation Navigation
|
||||
}
|
||||
|
||||
type HomeTemplateVariables struct {
|
||||
ListTorrents []TorrentsJson
|
||||
ListCategories []Categories
|
||||
Query string
|
||||
Status string
|
||||
Category string
|
||||
Sort string
|
||||
Order string
|
||||
Navigation Navigation
|
||||
URL *url.URL // For parsing Url in templates
|
||||
Route *mux.Route // For getting current route in templates
|
||||
ListTorrents []TorrentsJson
|
||||
ListCategories []Categories
|
||||
Query string
|
||||
Status string
|
||||
Category string
|
||||
Sort string
|
||||
Order string
|
||||
Navigation Navigation
|
||||
URL *url.URL // For parsing Url in templates
|
||||
Route *mux.Route // For getting current route in templates
|
||||
}
|
||||
|
||||
type Navigation struct {
|
||||
TotalItem int
|
||||
MaxItemPerPage int
|
||||
CurrentPage int
|
||||
Route string
|
||||
TotalItem int
|
||||
MaxItemPerPage int
|
||||
CurrentPage int
|
||||
Route string
|
||||
}
|
||||
|
|
Référencer dans un nouveau ticket