diff --git a/api/entry.go b/api/entry.go index 2cff47c2..275a775a 100644 --- a/api/entry.go +++ b/api/entry.go @@ -8,6 +8,7 @@ import ( json_parser "encoding/json" "errors" "net/http" + "strconv" "time" "miniflux.app/http/request" @@ -240,7 +241,10 @@ func configureFilters(builder *storage.EntryQueryBuilder, r *http.Request) { } if request.HasQueryParam(r, "starred") { - builder.WithStarred() + starred, err := strconv.ParseBool(r.URL.Query().Get("starred")) + if err == nil { + builder.WithStarred(starred) + } } searchQuery := request.QueryStringParam(r, "search", "") diff --git a/client/client.go b/client/client.go index fe0c7310..895c5886 100644 --- a/client/client.go +++ b/client/client.go @@ -542,8 +542,8 @@ func buildFilterQueryString(path string, filter *Filter) string { values.Set("before_entry_id", strconv.FormatInt(filter.BeforeEntryID, 10)) } - if filter.Starred { - values.Set("starred", "1") + if filter.Starred != "" { + values.Set("starred", filter.Starred) } if filter.Search != "" { diff --git a/client/model.go b/client/model.go index f6c5c265..56b0c5f0 100644 --- a/client/model.go +++ b/client/model.go @@ -221,6 +221,11 @@ type Enclosure struct { // Enclosures represents a list of attachments. type Enclosures []*Enclosure +const ( + FilterNotStarred = "0" + FilterOnlyStarred = "1" +) + // Filter is used to filter entries. type Filter struct { Status string @@ -228,7 +233,7 @@ type Filter struct { Limit int Order string Direction string - Starred bool + Starred string Before int64 After int64 BeforeEntryID int64 diff --git a/fever/handler.go b/fever/handler.go index bdb3db2a..794f2f01 100644 --- a/fever/handler.go +++ b/fever/handler.go @@ -365,7 +365,7 @@ func (h *handler) handleSavedItems(w http.ResponseWriter, r *http.Request) { logger.Debug("[Fever] Fetching saved items for user #%d", userID) builder := h.store.NewEntryQueryBuilder(userID) - builder.WithStarred() + builder.WithStarred(true) entryIDs, err := builder.GetEntryIDs() if err != nil { diff --git a/googlereader/handler.go b/googlereader/handler.go index bd272246..41c1a885 100644 --- a/googlereader/handler.go +++ b/googlereader/handler.go @@ -1141,7 +1141,7 @@ func (h *handler) handleStarredStream(w http.ResponseWriter, r *http.Request, rm clientIP := request.ClientIP(r) builder := h.store.NewEntryQueryBuilder(rm.UserID) - builder.WithStarred() + builder.WithStarred(true) builder.WithLimit(rm.Count) builder.WithOrder(model.DefaultSortingOrder) builder.WithDirection(rm.SortDirection) diff --git a/storage/entry_query_builder.go b/storage/entry_query_builder.go index 621d15ea..437e769c 100644 --- a/storage/entry_query_builder.go +++ b/storage/entry_query_builder.go @@ -42,8 +42,12 @@ func (e *EntryQueryBuilder) WithSearchQuery(query string) *EntryQueryBuilder { } // WithStarred adds starred filter. -func (e *EntryQueryBuilder) WithStarred() *EntryQueryBuilder { - e.conditions = append(e.conditions, "e.starred is true") +func (e *EntryQueryBuilder) WithStarred(starred bool) *EntryQueryBuilder { + if starred { + e.conditions = append(e.conditions, "e.starred is true") + } else { + e.conditions = append(e.conditions, "e.starred is false") + } return e } diff --git a/tests/entry_test.go b/tests/entry_test.go index 253e02d2..c25019fb 100644 --- a/tests/entry_test.go +++ b/tests/entry_test.go @@ -2,6 +2,7 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build integration // +build integration package tests @@ -123,7 +124,7 @@ func TestGetAllEntries(t *testing.T) { t.Fatalf(`The items should be sorted differently "%v" vs "%v"`, resultWithDifferentSorting.Entries[0].Title, resultWithoutSorting.Entries[0].Title) } - resultWithStarredEntries, err := client.Entries(&miniflux.Filter{Starred: true}) + resultWithStarredEntries, err := client.Entries(&miniflux.Filter{Starred: miniflux.FilterOnlyStarred}) if err != nil { t.Fatal(err) } diff --git a/ui/bookmark_entries.go b/ui/bookmark_entries.go index ba3ff1ec..225131d0 100644 --- a/ui/bookmark_entries.go +++ b/ui/bookmark_entries.go @@ -25,7 +25,7 @@ func (h *handler) showStarredPage(w http.ResponseWriter, r *http.Request) { offset := request.QueryIntParam(r, "offset", 0) builder := h.store.NewEntryQueryBuilder(user.ID) builder.WithoutStatus(model.EntryStatusRemoved) - builder.WithStarred() + builder.WithStarred(true) builder.WithOrder(user.EntryOrder) builder.WithDirection(user.EntryDirection) builder.WithOffset(offset)