Attach interval to feed for saving/loading

master
Bel LaPointe 2018-10-09 09:24:10 -06:00
parent e4785e6a05
commit 13e747d846
3 changed files with 30 additions and 7 deletions

27
main.go
View File

@ -14,7 +14,6 @@ const nsForFeeds = "FEEDS"
func main() { func main() {
config := config.New() config := config.New()
logger.Log("Starting with", config)
var sclient store.Client var sclient store.Client
var err error var err error
@ -27,7 +26,7 @@ func main() {
mon, err := monitor.New(func(url string) { mon, err := monitor.New(func(url string) {
feed, ok := allFeeds[url] feed, ok := allFeeds[url]
if !ok { if !ok {
f, err := rss.New(url, "", "") f, err := rss.New(url, "", "", time.Minute)
if err != nil { if err != nil {
logger.Log("cannot identify unknown feed triggered in monitor: %q: %v", url, err) logger.Log("cannot identify unknown feed triggered in monitor: %q: %v", url, err)
return return
@ -80,13 +79,13 @@ func main() {
defer mon.Stop() defer mon.Stop()
server, err := server.New(config.Port, func(url string, itemFilter, contentFilter string, interval time.Duration) { server, err := server.New(config.Port, func(url string, itemFilter, contentFilter string, interval time.Duration) {
feed, err := rss.New(url, itemFilter, contentFilter) feed, err := rss.New(url, itemFilter, contentFilter, interval)
if err != nil { if err != nil {
logger.Log("can't create new RSS %q: %v", url, err) logger.Log("can't create new RSS %q: %v", url, err)
return return
} }
allFeeds[url] = feed allFeeds[url] = feed
if err := mon.Submit(url, interval); err != nil { if err := mon.Submit(url, feed.Interval); err != nil {
logger.Log("Cannot accept new feed %q: %v", url, err) logger.Log("Cannot accept new feed %q: %v", url, err)
} }
}) })
@ -94,6 +93,26 @@ func main() {
panic(err) panic(err)
} }
oldFeeds, err := sclient.List(nsForFeeds, "")
if err != nil {
panic(err)
}
for _, feedID := range oldFeeds {
b, err := sclient.Get(nsForFeeds, feedID)
if err != nil {
panic(err)
}
feed, err := rss.Deserialize(b)
if err != nil {
panic(err)
}
allFeeds[feed.Link] = feed
if err := mon.Submit(feed.Link, feed.Interval); err != nil {
panic(err)
}
}
logger.Log("Starting with", config)
if err := server.Serve(); err != nil { if err := server.Serve(); err != nil {
panic(err) panic(err)
} }

View File

@ -19,15 +19,17 @@ type Feed struct {
ItemFilter string ItemFilter string
ContentFilter string ContentFilter string
Link string Link string
Interval time.Duration
} }
func (feed *Feed) String() string { func (feed *Feed) String() string {
return fmt.Sprintf("Updated: %v, Items: %v, ItemFilter: %q, ContentFilter: %q, Link; %v", return fmt.Sprintf("Updated: %v, Items: %v, ItemFilter: %q, ContentFilter: %q, Link: %v, Interval: %s",
feed.Updated.Local(), feed.Updated.Local(),
feed.Items, feed.Items,
feed.ItemFilter, feed.ItemFilter,
feed.ContentFilter, feed.ContentFilter,
feed.Link, feed.Link,
feed.Interval,
) )
} }
@ -35,7 +37,7 @@ func (feed *Feed) ID() string {
return strings.Join(regexp.MustCompile("[a-zA-Z0-9]*").FindAllString(feed.Link, -1), "_") return strings.Join(regexp.MustCompile("[a-zA-Z0-9]*").FindAllString(feed.Link, -1), "_")
} }
func New(source, itemFilter, contentFilter string) (*Feed, error) { func New(source, itemFilter, contentFilter string, interval time.Duration) (*Feed, error) {
if _, err := regexp.Compile(itemFilter); err != nil { if _, err := regexp.Compile(itemFilter); err != nil {
return nil, err return nil, err
} }
@ -47,6 +49,7 @@ func New(source, itemFilter, contentFilter string) (*Feed, error) {
ItemFilter: itemFilter, ItemFilter: itemFilter,
ContentFilter: contentFilter, ContentFilter: contentFilter,
Link: source, Link: source,
Interval: interval,
} }
return f, nil return f, nil
} }

View File

@ -7,6 +7,7 @@ import (
"os" "os"
"path" "path"
"testing" "testing"
"time"
) )
func Test_RSSFeed(t *testing.T) { func Test_RSSFeed(t *testing.T) {
@ -31,7 +32,7 @@ func Test_RSSFeed(t *testing.T) {
}, },
} }
for _, c := range cases { for _, c := range cases {
feed, err := New(s.URL, c.itemFilter, c.contentFilter) feed, err := New(s.URL, c.itemFilter, c.contentFilter, time.Minute)
if err != nil { if err != nil {
t.Errorf("couldn't create new feed %v: %v", feed, err) t.Errorf("couldn't create new feed %v: %v", feed, err)
} }