golines -w src

This commit is contained in:
nkanaev
2026-04-25 22:45:33 +01:00
parent f01c26b2c2
commit f1bdbbc0af
14 changed files with 206 additions and 49 deletions

View File

@@ -191,7 +191,10 @@ func listQueryPredicate(filter ItemFilter, newestFirst bool) (string, []interfac
terms[idx] = word + "*"
}
cond = append(cond, "i.search_rowid in (select rowid from search where search match :search)")
cond = append(
cond,
"i.search_rowid in (select rowid from search where search match :search)",
)
args = append(args, sql.Named("search", strings.Join(terms, " ")))
}
if filter.After != nil {
@@ -199,7 +202,13 @@ func listQueryPredicate(filter ItemFilter, newestFirst bool) (string, []interfac
if newestFirst {
compare = "<"
}
cond = append(cond, fmt.Sprintf("(i.date, i.id) %s (select date, id from items where id = :after_id)", compare))
cond = append(
cond,
fmt.Sprintf(
"(i.date, i.id) %s (select date, id from items where id = :after_id)",
compare,
),
)
args = append(args, sql.Named("after_id", *filter.After))
}
if filter.IDs != nil && len(*filter.IDs) > 0 {
@@ -249,7 +258,12 @@ func (s *Storage) CountItems(filter ItemFilter) int {
return count
}
func (s *Storage) ListItems(filter ItemFilter, limit int, newestFirst bool, withContent bool) []Item {
func (s *Storage) ListItems(
filter ItemFilter,
limit int,
newestFirst bool,
withContent bool,
) []Item {
predicate, args := listQueryPredicate(filter, newestFirst)
result := make([]Item, 0)
@@ -450,7 +464,8 @@ func (s *Storage) DeleteOldItems() {
}
for feedId, limit := range feedLimits {
result, err := s.db.Exec(`
result, err := s.db.Exec(
`
delete from items
where id in (
select i.id
@@ -463,7 +478,10 @@ func (s *Storage) DeleteOldItems() {
sql.Named("feed_id", feedId),
sql.Named("starred_status", STARRED),
sql.Named("limit", limit),
sql.Named("date_limit", time.Now().UTC().Add(-time.Hour*time.Duration(24*itemsKeepDays))),
sql.Named(
"date_limit",
time.Now().UTC().Add(-time.Hour*time.Duration(24*itemsKeepDays)),
),
)
if err != nil {
log.Print(err)

View File

@@ -47,21 +47,62 @@ func testItemsSetup(db *Storage) testItemScope {
db.CreateItems([]Item{
// feed11
{GUID: "item111", FeedId: feed11.Id, Title: "title111", Date: now.Add(time.Hour * 24 * 1)},
{GUID: "item112", FeedId: feed11.Id, Title: "title112", Date: now.Add(time.Hour * 24 * 2)}, // read
{GUID: "item113", FeedId: feed11.Id, Title: "title113", Date: now.Add(time.Hour * 24 * 3)}, // starred
{
GUID: "item112",
FeedId: feed11.Id,
Title: "title112",
Date: now.Add(time.Hour * 24 * 2),
}, // read
{
GUID: "item113",
FeedId: feed11.Id,
Title: "title113",
Date: now.Add(time.Hour * 24 * 3),
}, // starred
// feed12
{GUID: "item121", FeedId: feed12.Id, Title: "title121", Date: now.Add(time.Hour * 24 * 4)},
{GUID: "item122", FeedId: feed12.Id, Title: "title122", Date: now.Add(time.Hour * 24 * 5)}, // read
{
GUID: "item122",
FeedId: feed12.Id,
Title: "title122",
Date: now.Add(time.Hour * 24 * 5),
}, // read
// feed21
{GUID: "item211", FeedId: feed21.Id, Title: "title211", Date: now.Add(time.Hour * 24 * 6)}, // read
{GUID: "item212", FeedId: feed21.Id, Title: "title212", Date: now.Add(time.Hour * 24 * 7)}, // starred
{
GUID: "item211",
FeedId: feed21.Id,
Title: "title211",
Date: now.Add(time.Hour * 24 * 6),
}, // read
{
GUID: "item212",
FeedId: feed21.Id,
Title: "title212",
Date: now.Add(time.Hour * 24 * 7),
}, // starred
// feed01
{GUID: "item011", FeedId: feed01.Id, Title: "title011", Date: now.Add(time.Hour * 24 * 8)},
{GUID: "item012", FeedId: feed01.Id, Title: "title012", Date: now.Add(time.Hour * 24 * 9)}, // read
{GUID: "item013", FeedId: feed01.Id, Title: "title013", Date: now.Add(time.Hour * 24 * 10)}, // starred
{
GUID: "item012",
FeedId: feed01.Id,
Title: "title012",
Date: now.Add(time.Hour * 24 * 9),
}, // read
{
GUID: "item013",
FeedId: feed01.Id,
Title: "title013",
Date: now.Add(time.Hour * 24 * 10),
}, // starred
})
db.db.Exec(`update items set status = :status where guid in ("item112", "item122", "item211", "item012")`, sql.Named("status", READ))
db.db.Exec(`update items set status = :status where guid in ("item113", "item212", "item013")`, sql.Named("status", STARRED))
db.db.Exec(
`update items set status = :status where guid in ("item112", "item122", "item211", "item012")`,
sql.Named("status", READ),
)
db.db.Exec(
`update items set status = :status where guid in ("item113", "item212", "item013")`,
sql.Named("status", STARRED),
)
return testItemScope{
feed11: feed11,
@@ -208,7 +249,9 @@ func TestListItemsPaginated(t *testing.T) {
// unread, newest first
unread := UNREAD
have = getItemGuids(db.ListItems(ItemFilter{After: &item012.Id, Status: &unread}, 3, true, false))
have = getItemGuids(
db.ListItems(ItemFilter{After: &item012.Id, Status: &unread}, 3, true, false),
)
want = []string{"item011", "item121", "item111"}
if !reflect.DeepEqual(have, want) {
t.Logf("want: %#v", want)
@@ -218,7 +261,9 @@ func TestListItemsPaginated(t *testing.T) {
// starred, oldest first
starred := STARRED
have = getItemGuids(db.ListItems(ItemFilter{After: &item121.Id, Status: &starred}, 3, false, false))
have = getItemGuids(
db.ListItems(ItemFilter{After: &item121.Id, Status: &starred}, 3, false, false),
)
want = []string{"item212", "item013"}
if !reflect.DeepEqual(have, want) {
t.Logf("want: %#v", want)