diff --git a/server/handlers.go b/server/handlers.go index 06d253e..2f650f6 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -332,7 +332,8 @@ func ItemListHandler(rw http.ResponseWriter, req *http.Request) { if search := query.Get("search"); len(search) != 0 { filter.Search = &search } - items := db(req).ListItems(filter, (curPage-1)*perPage, perPage) + newestFirst := query.Get("oldest_first") != "true" + items := db(req).ListItems(filter, (curPage-1)*perPage, perPage, newestFirst) count := db(req).CountItems(filter) writeJSON(rw, map[string]interface{}{ "page": map[string]int{ diff --git a/storage/item.go b/storage/item.go index 16883c7..130a807 100644 --- a/storage/item.go +++ b/storage/item.go @@ -131,9 +131,13 @@ func listQueryPredicate(filter ItemFilter) (string, []interface{}) { return predicate, args } -func (s *Storage) ListItems(filter ItemFilter, offset, limit int) []Item { +func (s *Storage) ListItems(filter ItemFilter, offset, limit int, newestFirst bool) []Item { predicate, args := listQueryPredicate(filter) result := make([]Item, 0, 0) + order := "desc" + if !newestFirst { + order = "asc" + } query := fmt.Sprintf(` select i.id, i.guid, i.feed_id, i.title, i.link, i.description, @@ -141,9 +145,9 @@ func (s *Storage) ListItems(filter ItemFilter, offset, limit int) []Item { from items i join feeds f on f.id = i.feed_id where %s - order by i.date desc + order by i.date %s limit %d offset %d - `, predicate, limit, offset) + `, predicate, order, limit, offset) rows, err := s.db.Query(query, args...) if err != nil { s.log.Print(err) diff --git a/storage/settings.go b/storage/settings.go index 7646690..71befdd 100644 --- a/storage/settings.go +++ b/storage/settings.go @@ -8,6 +8,7 @@ func settingsDefaults() map[string]interface{} { "feed": "", "feed_list_width": 300, "item_list_width": 300, + "sort_newest_first": true, } } diff --git a/template/index.html b/template/index.html index a182d1a..b5932f8 100644 --- a/template/index.html +++ b/template/index.html @@ -23,11 +23,21 @@ {% inline "plus.svg" %} New Feed - + {% inline "list.svg" %} Manage Feeds + Sort by + + {% inline "check.svg" %} + Newest First + + + {% inline "check.svg" %} + Oldest First + +