diff --git a/.gitignore b/.gitignore index 8248a38a..804bde0c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ nyaa nyaa.exe nyaa-master.exe *.zip +*.swp diff --git a/main.go b/main.go index 2743602c..46c62ccb 100644 --- a/main.go +++ b/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, diff --git a/models.go b/models.go index 57acdd79..b04400d6 100644 --- a/models.go +++ b/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... */ diff --git a/templateFunctions.go b/templateFunctions.go index 284de4d7..b3d2a563 100644 --- a/templateFunctions.go +++ b/templateFunctions.go @@ -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 + "
  • «
  • " - } - 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 + " 0 { + url, _ := route.URL("page", "1") + ret = ret + "
  • «
  • " + } + 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 + ""+strconv.Itoa(i)+"" - } - if nav.CurrentPage < int(maxPages) { - url, _ := route.URL("page", strconv.Itoa(nav.CurrentPage+1)) - ret = ret + "
  • »
  • " - } - return template.HTML(ret) - }, - } \ No newline at end of file + ret = ret + ">" + strconv.Itoa(i) + "" + } + if nav.CurrentPage < int(maxPages) { + url, _ := route.URL("page", strconv.Itoa(nav.CurrentPage+1)) + ret = ret + "
  • »
  • " + } + return template.HTML(ret) + }, +} diff --git a/templateVariables.go b/templateVariables.go index 1951f9b1..6ace36bd 100644 --- a/templateVariables.go +++ b/templateVariables.go @@ -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 }