diff options
author | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-04-19 01:12:25 +0200 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-04-19 01:12:25 +0200 |
commit | 8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e (patch) | |
tree | e5322144c7aa324a01440f38f38a3d0d8ed8315a /internal/parse | |
parent | 02c4c6e73cc97c7aefd70ebf7be9e7e6479b2f01 (diff) | |
download | feed2imap-go-8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e.tar.gz feed2imap-go-8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e.tar.bz2 feed2imap-go-8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e.zip |
Fetching and parsing the feeds
Diffstat (limited to 'internal/parse')
-rw-r--r-- | internal/parse/parse.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/internal/parse/parse.go b/internal/parse/parse.go new file mode 100644 index 0000000..a4112d9 --- /dev/null +++ b/internal/parse/parse.go @@ -0,0 +1,49 @@ +package parse + +import ( + ctxt "context" + "fmt" + "log" + "sync" + "time" + + "github.com/mmcdole/gofeed" + + "github.com/Necoro/feed2imap-go/internal/config" + "github.com/Necoro/feed2imap-go/internal/util" +) + +func context() (ctxt.Context, ctxt.CancelFunc) { + return ctxt.WithTimeout(ctxt.Background(), 60*time.Second) +} + +func parseFeed(feed *config.Feed) error { + ctx, cancel := context() + defer cancel() + fp := gofeed.NewParser() + if _, err := fp.ParseURLWithContext(feed.Url, ctx); err != nil { + return fmt.Errorf("while fetching %s from %s: %w", feed.Name, feed.Url, err) + } + + return nil +} + +func handleFeed(feed *config.Feed, wg *sync.WaitGroup) { + defer wg.Done() + log.Printf("Fetching %s from %s", feed.Name, feed.Url) + + if err := parseFeed(feed); err != nil { + util.Error(err) + } +} + +func Parse(feeds config.Feeds) { + var wg sync.WaitGroup + wg.Add(len(feeds)) + + for _, feed := range feeds { + go handleFeed(feed, &wg) + } + + wg.Wait() +} |