Implement Insert{Feed,Page} on FullData for easy insertions

This commit is contained in:
nytpu
2021-03-18 10:33:26 -06:00
parent f3096c41a6
commit 0441fc9349
+27
View File
@@ -12,6 +12,7 @@ package core
import ( import (
"net/url" "net/url"
"reflect"
"sync" "sync"
"time" "time"
@@ -90,6 +91,32 @@ func GofeedConvert(f *gofeed.Feed, title string) (*Feed, error) {
return new, nil return new, nil
} }
// InsertFeed will insert or update a core.Feed in a core.FullData
func (d *FullData) InsertFeed(new *Feed, remote *url.URL) {
d.FeedsMu.Lock()
oldFeed, ok := d.Feeds[*remote]
if !ok || !reflect.DeepEqual(new, oldFeed) {
// Feeds are different, or there was never an old one
d.Feeds[*remote] = new
d.FeedsMu.Unlock()
} else {
d.FeedsMu.Unlock()
}
}
// InsertPage will insert or update a core.Page in a core.FullData
func (d *FullData) InsertPage(new *Page, remote *url.URL) {
d.PagesMu.Lock()
_, ok := d.Pages[*remote]
if !ok || d.Pages[*remote].Hash != new.Hash {
// pages are different, or there was never an old one
d.Pages[*remote] = new
d.PagesMu.Unlock()
} else {
d.PagesMu.Unlock()
}
}
// Implement sort.Interface for Feed // Implement sort.Interface for Feed
// Len returns the length of Items. // Len returns the length of Items.