aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--internal/feed/cache/cache_v1.go46
1 files changed, 38 insertions, 8 deletions
diff --git a/internal/feed/cache/cache_v1.go b/internal/feed/cache/cache_v1.go
index f7392e5..cef26f6 100644
--- a/internal/feed/cache/cache_v1.go
+++ b/internal/feed/cache/cache_v1.go
@@ -18,8 +18,9 @@ import (
)
const (
- v1Version Version = 1
- startFeedId uint64 = 1
+ v1Version Version = 1
+ startFeedId uint64 = 1
+ maxCacheSize = 1000
)
type feedId uint64
@@ -63,6 +64,7 @@ type cachedItem struct {
UpdatedCache time.Time
Hash itemHash
ID uuid.UUID
+ deleted bool
}
func (item cachedItem) String() string {
@@ -246,10 +248,8 @@ func (item *cachedItem) similarTo(other *cachedItem, ignoreHash bool) bool {
(ignoreHash || other.Hash == item.Hash)
}
-func (cf *cachedFeed) deleteItem(index int) {
- copy(cf.Items[index:], cf.Items[index+1:])
- cf.Items[len(cf.Items)-1] = cachedItem{}
- cf.Items = cf.Items[:len(cf.Items)-1]
+func (cf *cachedFeed) markItemDeleted(index int) {
+ cf.Items[index].deleted = true
}
func (cf *cachedFeed) Filter(items []feed.Item, ignoreHash, alwaysNew bool) []feed.Item {
@@ -276,12 +276,18 @@ func (cf *cachedFeed) Filter(items []feed.Item, ignoreHash, alwaysNew bool) []fe
ci.ID = prevId
item.ID = prevId
log.Debugf("oldIdx: %d, prevId: %s, item.id: %s", *oldIdx, prevId, item.Id())
- cf.deleteItem(*oldIdx)
+ cf.markItemDeleted(*oldIdx)
}
filtered = append(filtered, *item)
cacheadd = append(cacheadd, ci)
}
+ seen := func(oldIdx int) {
+ ci := cf.Items[oldIdx]
+ cf.markItemDeleted(oldIdx)
+ cacheadd = append(cacheadd, ci)
+ }
+
CACHE_ITEMS:
for ci, item := range cacheItems {
log.Debugf("Now checking %s", ci)
@@ -295,6 +301,7 @@ CACHE_ITEMS:
app(item, ci, &idx)
} else {
log.Debugf("Similar, ignoring item %s", base64.RawURLEncoding.EncodeToString(oldItem.ID[:]))
+ seen(idx)
}
continue CACHE_ITEMS
@@ -310,6 +317,7 @@ CACHE_ITEMS:
for idx, oldItem := range cf.Items {
if oldItem.similarTo(&ci, ignoreHash) {
log.Debugf("Similarity matches, ignoring: %s", oldItem)
+ seen(idx)
continue CACHE_ITEMS
}
@@ -334,7 +342,29 @@ CACHE_ITEMS:
log.Debugf("%d items after filtering", len(filtered))
- cf.newItems = append(cacheadd, cf.Items...)
+ cf.newItems = append(cacheadd, filterItems(cf.Items)...)
return filtered
}
+
+func filterItems(items []cachedItem) []cachedItem {
+ var n int
+
+ if len(items) < maxCacheSize {
+ n = len(items)
+ } else {
+ n = maxCacheSize
+ }
+
+ copiedItems := make([]cachedItem, 0, n)
+ for _, item := range items {
+ if !item.deleted {
+ copiedItems = append(copiedItems, item)
+ if len(copiedItems) >= n {
+ break
+ }
+ }
+ }
+
+ return copiedItems
+}
-21Update README.mdRené 'Necoro' Neumann1-0/+2 2020-04-21Improved HTML creationRené 'Necoro' Neumann4-3/+22 2020-04-21Upload mails to imapRené 'Necoro' Neumann3-35/+80 2020-04-21Move HTML template to stringRené 'Necoro' Neumann3-12/+13 2020-04-21HTML Template part of the mailRené 'Necoro' Neumann7-18/+199 2020-04-20Fixes and validationRené 'Necoro' Neumann6-28/+25 2020-04-20Fix vettingRené 'Necoro' Neumann1-1/+1 2020-04-20Started with mail creationRené 'Necoro' Neumann4-3/+126 2020-04-20FeeditemsRené 'Necoro' Neumann2-2/+14 2020-04-20GlobalOptionsRené 'Necoro' Neumann3-25/+79 2020-04-19RestructureRené 'Necoro' Neumann6-152/+177 2020-04-19Rename package 'parse' to 'feed'René 'Necoro' Neumann2-3/+3 2020-04-19SELECT is not necessary for most operations -- skip itRené 'Necoro' Neumann2-12/+1 2020-04-19Store path as array -- the delimiter is not always '.'René 'Necoro' Neumann3-36/+44 2020-04-19Split client part to client.goRené 'Necoro' Neumann2-125/+137 2020-04-19IMAP: Create foldersRené 'Necoro' Neumann1-4/+38 2020-04-19Improved IMAPRené 'Necoro' Neumann1-3/+88 2020-04-19Started IMAP connectionRené 'Necoro' Neumann4-0/+152 2020-04-19Use our own logger for debug for convenience sakeRené 'Necoro' Neumann1-2/+3 2020-04-19Fix debug logging m(René 'Necoro' Neumann1-2/+2 2020-04-19Rename util.go to log.go. Add verbose modeRené 'Necoro' Neumann4-24/+54 2020-04-19Clean go.modRené 'Necoro' Neumann2-3/+0 2020-04-19Do not print the parsedCfg anymoreRené 'Necoro' Neumann1-1/+1 2020-04-19Increase go-version to 1.14René 'Necoro' Neumann1-2/+2 2020-04-19CI: go vetRené 'Necoro' Neumann1-0/+3 2020-04-19Fetching and parsing the feedsRené 'Necoro' Neumann5-4/+113 2020-04-19Ignore all config*.ymlRené 'Necoro' Neumann1-1/+1