diff --git a/router/rssHandler.go b/router/rssHandler.go
index 402dafd2..3b2e1cf7 100644
--- a/router/rssHandler.go
+++ b/router/rssHandler.go
@@ -1,17 +1,17 @@
package router
-import(
- "time"
- "net/http"
- "github.com/gorilla/feeds"
+import (
"github.com/ewhal/nyaa/config"
"github.com/ewhal/nyaa/util/search"
+ "github.com/gorilla/feeds"
+ "net/http"
"strconv"
+ "time"
)
func RssHandler(w http.ResponseWriter, r *http.Request) {
- _, torrents, _ := search.SearchByQuery( r, 1 )
+ _, torrents := search.SearchByQueryNoCount(r, 1)
created_as_time := time.Now()
if len(torrents) > 0 {
diff --git a/router/searchHandler.go b/router/searchHandler.go
index c44bf29e..b91933a8 100644
--- a/router/searchHandler.go
+++ b/router/searchHandler.go
@@ -23,7 +23,7 @@ func SearchHandler(w http.ResponseWriter, r *http.Request) {
search_param, torrents, nbTorrents := search.SearchByQuery(r, pagenum)
- for i, _ := range torrents {
+ for i := range torrents {
res := torrents[i].ToJson()
b = append(b, res)
}
diff --git a/service/torrent/torrent.go b/service/torrent/torrent.go
index d977ce94..096b9861 100644
--- a/service/torrent/torrent.go
+++ b/service/torrent/torrent.go
@@ -53,22 +53,28 @@ func GetTorrentById(id string) (model.Torrents, error) {
}
func GetTorrentsOrderBy(parameters *WhereParams, orderBy string, limit int, offset int) ([]model.Torrents, int) {
+ return getTorrentsOrderBy(parameters, orderBy, limit, offset, true)
+}
+
+func GetTorrentsOrderByNoCount(parameters *WhereParams, orderBy string, limit int, offset int) (torrents []model.Torrents) {
+ torrents, _ = getTorrentsOrderBy(parameters, orderBy, limit, offset, false)
+ return
+}
+
+func getTorrentsOrderBy(parameters *WhereParams, orderBy string, limit int, offset int, countAll bool) ([]model.Torrents, int) {
var torrents []model.Torrents
var dbQuery *gorm.DB
var count int
- conditions := "torrent_hash IS NOT NULL" // filter out broken entries
- if strings.HasPrefix(orderBy, "filesize") {
- // torrents w/ NULL filesize fuck up the sorting on postgres
- // TODO: fix this properly
- conditions += " AND filesize IS NOT NULL"
- }
-
+
+ conditions := "torrent_hash IS NOT NULL AND filesize > 0" //filter out broken entries
var params []interface{}
if parameters != nil { // if there is where parameters
conditions += " AND " + parameters.Conditions
params = parameters.Params
}
- db.ORM.Model(&torrents).Where(conditions, params...).Count(&count)
+ if countAll {
+ db.ORM.Model(&torrents).Where(conditions, params...).Count(&count)
+ }
dbQuery = db.ORM.Model(&torrents).Where(conditions, params...)
if orderBy == "" { // default OrderBy
@@ -86,7 +92,7 @@ func GetTorrentsOrderBy(parameters *WhereParams, orderBy string, limit int, offs
* Get Torrents with where parameters and limits, order by default
*/
func GetTorrents(parameters WhereParams, limit int, offset int) ([]model.Torrents, int) {
- return GetTorrentsOrderBy(¶meters, "", limit, offset)
+ return getTorrentsOrderBy(¶meters, "", limit, offset, true)
}
/* Get Torrents with where parameters but no limit and order by default (get all the torrents corresponding in the db)
@@ -107,6 +113,11 @@ func GetAllTorrents(limit int, offset int) ([]model.Torrents, int) {
return GetTorrentsOrderBy(nil, "", limit, offset)
}
+func GetAllTorrentsNoCouting(limit int, offset int) (torrents []model.Torrents) {
+ torrents, _ = getTorrentsOrderBy(nil, "", limit, offset, false)
+ return
+}
+
func GetAllTorrentsDB() ([]model.Torrents, int) {
return GetTorrentsOrderBy(nil, "", 0, 0)
}
diff --git a/templates/_captcha.html b/templates/_captcha.html
index 95fadb8e..4e90b98b 100644
--- a/templates/_captcha.html
+++ b/templates/_captcha.html
@@ -3,6 +3,6 @@
-
+
{{end}}
diff --git a/util/search/search.go b/util/search/search.go
index 3872adff..54afd959 100644
--- a/util/search/search.go
+++ b/util/search/search.go
@@ -31,6 +31,16 @@ func Init(backend string) {
}
func SearchByQuery(r *http.Request, pagenum int) (SearchParam, []model.Torrents, int) {
+ return searchByQuery(r, pagenum, true)
+
+}
+
+func SearchByQueryNoCount(r *http.Request, pagenum int) (param SearchParam, torrents []model.Torrents) {
+ param, torrents, _ = searchByQuery(r, pagenum, false)
+ return
+}
+
+func searchByQuery(r *http.Request, pagenum int, count bool) (search_param SearchParam, torrents []model.Torrents, n int) {
maxPerPage, errConv := strconv.Atoi(r.URL.Query().Get("max"))
if errConv != nil {
maxPerPage = 50 // default Value maxPerPage
@@ -39,7 +49,6 @@ func SearchByQuery(r *http.Request, pagenum int) (SearchParam, []model.Torrents,
if maxPerPage > 300 {
maxPerPage = 300
}
- search_param := SearchParam{}
search_param.Max = maxPerPage
search_param.Query = r.URL.Query().Get("q")
search_param.Category = r.URL.Query().Get("c")
@@ -82,13 +91,17 @@ func SearchByQuery(r *http.Request, pagenum int) (SearchParam, []model.Torrents,
parameters.Params = append(parameters.Params, search_param.Status)
}
searchQuerySplit := strings.Split(search_param.Query, " ")
- for i, _ := range searchQuerySplit {
- conditions = append(conditions, "torrent_name " + search_op + " ?")
+ for i := range searchQuerySplit {
+ conditions = append(conditions, "torrent_name LIKE ?")
parameters.Params = append(parameters.Params, "%"+searchQuerySplit[i]+"%")
}
parameters.Conditions = strings.Join(conditions[:], " AND ")
log.Infof("SQL query is :: %s\n", parameters.Conditions)
- torrents, n := torrentService.GetTorrentsOrderBy(¶meters, order_by, maxPerPage, maxPerPage*(pagenum-1))
- return search_param, torrents, n
+ if count {
+ torrents, n = torrentService.GetTorrentsOrderBy(¶meters, order_by, maxPerPage, maxPerPage*(pagenum-1))
+ } else {
+ torrents = torrentService.GetTorrentsOrderByNoCount(¶meters, order_by, maxPerPage, maxPerPage*(pagenum-1))
+ }
+ return
}