change item cleanup logic

This commit is contained in:
Nazar Kanaev 2020-08-11 10:55:42 +01:00
parent f1810827bc
commit 8ec1370845
2 changed files with 47 additions and 14 deletions

View File

@ -70,18 +70,24 @@ func (s *Storage) CreateItems(items []Item) bool {
s.log.Print(err) s.log.Print(err)
return false return false
} }
now := time.Now()
for _, item := range items { for _, item := range items {
_, err = tx.Exec(` _, err = tx.Exec(`
insert into items ( insert into items (
guid, feed_id, title, link, description, guid, feed_id, title, link, description,
content, author, date, date_updated, status, image content, author,
date, date_updated, date_arrived,
status, image
) )
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
on conflict (guid) do update set date_updated=?`, on conflict (guid) do update set
date_updated = ?, date_arrived = ?`,
item.GUID, item.FeedId, html.UnescapeString(item.Title), item.Link, item.Description, item.GUID, item.FeedId, html.UnescapeString(item.Title), item.Link, item.Description,
item.Content, item.Author, item.Date, item.DateUpdated, UNREAD, item.Image, item.Content, item.Author,
item.Date, item.DateUpdated, now,
UNREAD, item.Image,
// upsert values // upsert values
item.DateUpdated, item.DateUpdated, now,
) )
if err != nil { if err != nil {
s.log.Print(err) s.log.Print(err)
@ -316,19 +322,45 @@ func (s *Storage) SyncSearch() {
} }
func (s *Storage) DeleteOldItems() { func (s *Storage) DeleteOldItems() {
result, err := s.db.Exec( rows, err := s.db.Query(fmt.Sprintf(`
`delete from items where status = ? and date < ?`, select feed_id, count(*) as num_items
READ, time.Now().Add(-time.Hour*24*90) /* 90 days */) from items
where status != %d
group by feed_id
having num_items > 50
`, STARRED))
if err != nil { if err != nil {
s.log.Print(err) s.log.Print(err)
return return
} }
num, err := result.RowsAffected()
if err != nil { feedIds := make([]int64, 0)
s.log.Print(err) for rows.Next() {
return var id int64
rows.Scan(&id, nil)
feedIds = append(feedIds, id)
} }
if num > 0 { s.log.Print(feedIds)
s.log.Printf("Deleted %d old items\n", num)
for _, feedId := range feedIds {
result, err := s.db.Exec(`
delete from items where feed_id = ? and status != ? and date_arrived < ?`,
feedId,
STARRED,
time.Now().Add(-time.Hour*24*90), // 90 days
)
if err != nil {
s.log.Print(err)
return
}
num, err := result.RowsAffected()
if err != nil {
s.log.Print(err)
return
}
if num > 0 {
s.log.Printf("Deleted %d old items (%d)", num, feedId)
}
} }
} }

View File

@ -40,6 +40,7 @@ create table if not exists items (
author text, author text,
date datetime, date datetime,
date_updated datetime, date_updated datetime,
date_arrived datetime,
status integer, status integer,
image text, image text,
search_rowid integer search_rowid integer