rss and rss item and encode

Former-commit-id: 333b5635cc0eb22964403cc78f660e02a830f077
This commit is contained in:
bel
2019-06-22 10:07:52 -06:00
parent be065c5dcb
commit fc94f94bd2
10 changed files with 353 additions and 52 deletions

View File

@@ -13,24 +13,30 @@ import (
const NSFeeds = "NSFeeds"
type feed struct {
type Feed struct {
Key string
URL string
Updated time.Time
TitleFilter string
ContentFilter string
Tags []string
*config.Encodable
}
func newFeed(key string) *feed {
return &feed{
Key: key,
Encodable: &config.Encodable{},
func newFeed(key string) *Feed {
return &Feed{
Key: key,
}
}
func (f *feed) load() error {
func (f *Feed) Encode() ([]byte, error) {
return config.Encode(f)
}
func (f *Feed) Decode(b []byte) error {
return config.Decode(b, f)
}
func (f *Feed) load() error {
if f.Key == "" {
return errors.New("cannot load nil feed")
}
@@ -42,7 +48,7 @@ func (f *feed) load() error {
return f.Decode(b)
}
func (f *feed) pull() error {
func (f *Feed) pull() error {
if f.URL == "" {
if err := f.load(); err != nil {
return err
@@ -61,21 +67,20 @@ func (f *feed) pull() error {
itemTSs := []*time.Time{}
for _, i := range gofeed.Items {
ts := latestTSPtr(i.UpdatedParsed, i.PublishedParsed)
itemTSs = append(itemTSs, &ts)
if ts.Before(f.Updated) {
item, err := newItem(i, f.ContentFilter, f.Key)
if err != nil {
log.Println(err)
continue
}
itemTSs = append(itemTSs, &item.TS)
if item.TS.Before(f.Updated) {
log.Println("Skipping old item")
continue
}
if ok := regexp.MustCompile(f.TitleFilter).MatchString(i.Title); !ok {
if ok := regexp.MustCompile(f.TitleFilter).MatchString(item.Title); !ok {
log.Println("Skipping bad titled item")
continue
}
item, err := newItem(i, f.ContentFilter)
if err != nil {
log.Println(err)
continue
}
if err := item.save(); err != nil {
log.Println(err)
continue
@@ -87,7 +92,7 @@ func (f *feed) pull() error {
return nil
}
func (f *feed) save() error {
func (f *Feed) save() error {
b, err := f.Encode()
if err != nil {
return err