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 4837f321..b461a66b 100644 --- a/service/torrent/torrent.go +++ b/service/torrent/torrent.go @@ -53,6 +53,15 @@ 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 @@ -62,7 +71,9 @@ func GetTorrentsOrderBy(parameters *WhereParams, orderBy string, limit int, offs 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 == "" { @@ -80,7 +91,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) @@ -101,6 +112,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/util/search/search.go b/util/search/search.go index f79d3f4d..f0487bed 100644 --- a/util/search/search.go +++ b/util/search/search.go @@ -20,6 +20,16 @@ type SearchParam struct { } 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 @@ -28,7 +38,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") @@ -71,13 +80,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 { + 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 }