diff --git a/main.go b/main.go index 56aa55f..fd7896e 100644 --- a/main.go +++ b/main.go @@ -14,7 +14,6 @@ const nsForFeeds = "FEEDS" func main() { config := config.New() - logger.Log("Starting with", config) var sclient store.Client var err error @@ -27,7 +26,7 @@ func main() { mon, err := monitor.New(func(url string) { feed, ok := allFeeds[url] if !ok { - f, err := rss.New(url, "", "") + f, err := rss.New(url, "", "", time.Minute) if err != nil { logger.Log("cannot identify unknown feed triggered in monitor: %q: %v", url, err) return @@ -80,13 +79,13 @@ func main() { defer mon.Stop() 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 { logger.Log("can't create new RSS %q: %v", url, err) return } 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) } }) @@ -94,6 +93,26 @@ func main() { 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 { panic(err) } diff --git a/rss/feed.go b/rss/feed.go index 28d0f55..dbcfe31 100644 --- a/rss/feed.go +++ b/rss/feed.go @@ -19,15 +19,17 @@ type Feed struct { ItemFilter string ContentFilter string Link string + Interval time.Duration } 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.Items, feed.ItemFilter, feed.ContentFilter, 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), "_") } -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 { return nil, err } @@ -47,6 +49,7 @@ func New(source, itemFilter, contentFilter string) (*Feed, error) { ItemFilter: itemFilter, ContentFilter: contentFilter, Link: source, + Interval: interval, } return f, nil } diff --git a/rss/feed_test.go b/rss/feed_test.go index 566628f..5ba84d5 100644 --- a/rss/feed_test.go +++ b/rss/feed_test.go @@ -7,6 +7,7 @@ import ( "os" "path" "testing" + "time" ) func Test_RSSFeed(t *testing.T) { @@ -31,7 +32,7 @@ func Test_RSSFeed(t *testing.T) { }, } 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 { t.Errorf("couldn't create new feed %v: %v", feed, err) }