Skip to content

Commit

Permalink
sync with dev:1b08df1
Browse files Browse the repository at this point in the history
fix bug:
1. paging error in search query page
2. cannot subscribe a feed if the feedurl contains parameters
  • Loading branch information
m3ng9i committed Aug 17, 2015
1 parent a8775fc commit 9fe4259
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 28 deletions.
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ QReader 是一个单用户的阅读器,不适合多人共同使用。

[直接下载 QReader 可执行程序](https://github.com/m3ng9i/qreader/releases)

最新版本:v0.2.1
最新版本:v0.2.2

## 更新说明

- 2015-07-03 v0.2.1 发布。新增搜索功能;文章页增加其他文章链接。
- 2015-05-22 v0.2 发布
- 2015-08-18 v0.2.2 发布:修复若干bug
- 2015-07-03 v0.2.1 发布:新增搜索功能;文章页增加其他文章链接
- 2015-05-22 v0.2 发布

## 更新方式

Expand All @@ -26,7 +27,10 @@ QReader 是一个单用户的阅读器,不适合多人共同使用。
4. 将之前备份的 `feed.db``config.ini` 文件放回到更新后的 `sitedata` 目录下;
5. 重新启动 QReader。

注意:在更新程序及 `sitedata` 后不要进行初始化,否则你的历史订阅数据将会被清空。
注意:

- 在更新程序及 `sitedata` 后不要进行初始化,否则你的历史订阅数据将会被清空。
- 如果在下载界面没有找到适合你的操作系统的可执行程序,请自行编译程序。

## 0. 功能

Expand Down
93 changes: 79 additions & 14 deletions api/feed.go
Original file line number Diff line number Diff line change
Expand Up @@ -560,10 +560,6 @@ example: /api/articles/tag/blog/10/100
route: starred
path: /api/articles/starred/{limit}/{offset}
example: /api/articles/starred/10/100
route: search
path: /api/articles/search/{limit}/{offset}?q={query}
example: /api/articles/search/10/100?q={query}
*/
func ArticleList(route string) martini.Handler {
return func(w http.ResponseWriter, r *http.Request, params martini.Params, rid httphelper.RequestId) {
Expand Down Expand Up @@ -623,16 +619,6 @@ func ArticleList(route string) martini.Handler {
} else if route == "starred" {
list ,err = model.GetStarredArticleList(limit, offset)

} else if route == "search" {
sq, err := model.Search(httphelper.QueryValue(r, "q"))
if err != nil {
result.Error = ErrSearchSyntaxError
result.IntError = err
result.Response(w)
return
}
list, err = sq.List(limit, offset)

} else {
result.Error = ErrUnexpectedError
result.IntError = fmt.Errorf(ErrUnexpectedError.ErrMsg)
Expand Down Expand Up @@ -666,6 +652,85 @@ func ArticleList(route string) martini.Handler {
}


/*
Article list of search result.
path: /api/articles/search/{deflimit}?q={query}&page={page}
example: /api/articles/search/10?q=num:20&page=10
*/
func SearchList() martini.Handler {

return func(w http.ResponseWriter, r *http.Request, params martini.Params, rid httphelper.RequestId) {
var result Result
result.RequestId = rid

r.ParseForm()

var limit, page int

l, _ := strconv.ParseInt(params["deflimit"], 10, 0)
p, _ := strconv.ParseInt(httphelper.QueryValue(r, "page", "0"), 10, 0)
limit = int(l)
page = int(p)

if limit <= 0 {
result.Error = ErrBadRequest
result.IntError = fmt.Errorf("Parameter 'limit' not correct.")
result.Response(w)
return
}

if page <= 0 {
page = 1
}

sq, err := model.Search(httphelper.QueryValue(r, "q"))
if err != nil {
result.Error = ErrSearchSyntaxError
result.IntError = err
result.Response(w)
return
}

if sq.Num == nil {
sq.Num = &limit
}

list, err := sq.List(page)
if err != nil {
result.Error = ErrQueryDB
result.IntError = err
result.Response(w)
return
}

if len(list.Articles) == 0 {
result.Error = ErrNoResultsFound
result.IntError = fmt.Errorf(ErrNoResultsFound.Error())
result.Response(w)
return
}

for i, _ := range list.Articles {
utils.SanitizeSelf(&list.Articles[i].Name)
utils.SanitizeSelf(&list.Articles[i].Author)
utils.SanitizeSelf(&list.Articles[i].Title)
}

var t struct {
model.ArticleList
Limit int `json:"limit"` // used for paging
}
t.ArticleList = list
t.Limit = *sq.Num

result.Success = true
result.Result = t
result.Response(w)
}
}


/* Get feedinfo.
method: GET
Expand Down
2 changes: 1 addition & 1 deletion model/feed.go
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ type Article struct {

type ArticleList struct {
Articles []*Article `xorm:"extends"`
Number int64
Number int64 // amount of all articles
}


Expand Down
10 changes: 6 additions & 4 deletions model/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ func Search(q string) (sq SearchQuery, err error) {


// Get article list of search query.
func (this *SearchQuery) List(limit, offset int) (list ArticleList, err error) {
func (this *SearchQuery) List(page int) (list ArticleList, err error) {

session := global.Orm.NewSession()
defer session.Close()
Expand Down Expand Up @@ -443,11 +443,13 @@ func (this *SearchQuery) List(limit, offset int) (list ArticleList, err error) {
sql += " " + s
}

if this.Num != nil && *this.Num > 0 {
limit = *this.Num
if this.Num == nil {
err = fmt.Errorf("'num' not provide for search query.")
session.Rollback()
return
}

sql = fmt.Sprintf("%s limit %d, %d", sql, offset, limit)
sql = fmt.Sprintf("%s limit %d, %d", sql, (page - 1) * *this.Num, *this.Num)

err = session.Sql(sql).Find(&list.Articles)

Expand Down
2 changes: 1 addition & 1 deletion qreader.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import "github.com/m3ng9i/qreader/utils"
import "github.com/m3ng9i/qreader/server"


var _version_ = "v0.2.1" // program version, from git tag
var _version_ = "v0.2.2" // program version, from git tag
var _branch_ = "unknown" // git branch
var _commitId_ = "0000000" // git commit id
var _buildTime_ = "0000-00-00 00:00" // build time
Expand Down
2 changes: 1 addition & 1 deletion server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func createRouter() martini.Router {
router.Get( "/api/articles/fid/:fid/:limit/:offset", api.ArticleList("fid"))
router.Get( "/api/articles/tag/:tag/:limit/:offset", api.ArticleList("tag"))
router.Get( "/api/articles/starred/:limit/:offset", api.ArticleList("starred"))
router.Get( "/api/articles/search/:limit/:offset", api.ArticleList("search"))
router.Get( "/api/articles/search/:deflimit", api.SearchList())
router.Put( "/api/articles/read", api.MarkArticlesRead())
router.Put( "/api/articles/starred", api.MarkArticlesStarred())
router.Get( "/api/article/content/:id", api.Article())
Expand Down
7 changes: 4 additions & 3 deletions sitedata/client/include/qreader.js
Original file line number Diff line number Diff line change
Expand Up @@ -325,13 +325,13 @@ QReader.app.controller("ArticleListController", function($location, $http, $rout

} else if (route == "search") {

var query = $location.search().q || "";
var query = encodeURIComponent($location.search().q || "");
if (query == "") {
QDoc.SetError("路由错误:query 值无效。");
return
}

request_url = QReader.api.articlesSearch + limit + "/" + offset + "?q=" + query;
request_url = QReader.api.articlesSearch + limit + "?q=" + query + "&page=" + page;
$scope.pagelinkPrefix = "/#/articles/search?q=" + query + "&";
}
} else if (route == "random") {
Expand Down Expand Up @@ -371,6 +371,7 @@ QReader.app.controller("ArticleListController", function($location, $http, $rout
if (data.success) {
if (route == "unread" || route == "fid" || route == "tag" || route == "starred" || route == "search") {
data.result.page = page;
limit = data.result.limit || limit; // result of api.SearchList() contains a variable named limit
data.result.pagenum = Math.ceil(data.result.Number / limit);
}
$scope.data = data.result;
Expand Down Expand Up @@ -516,7 +517,7 @@ QReader.app.controller("FeedListController", function($http, $scope, $route, $lo
}

var subscriptionRequestUrl = function(feedurl) {
var url = QReader.api.subscription + "?url=" + feedurl;
var url = QReader.api.subscription + "?url=" + encodeURIComponent(feedurl);
return url;
}

Expand Down

0 comments on commit 9fe4259

Please sign in to comment.