aboutsummaryrefslogtreecommitdiff
path: root/internal/parse/parse.go
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.eu>2020-04-19 01:12:25 +0200
committerRené 'Necoro' Neumann <necoro@necoro.eu>2020-04-19 01:12:25 +0200
commit8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e (patch)
treee5322144c7aa324a01440f38f38a3d0d8ed8315a /internal/parse/parse.go
parent02c4c6e73cc97c7aefd70ebf7be9e7e6479b2f01 (diff)
downloadfeed2imap-go-8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e.tar.gz
feed2imap-go-8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e.tar.bz2
feed2imap-go-8984dc3ca7dc72a1cf563ccc6fc85fbeb231117e.zip
Fetching and parsing the feeds
Diffstat (limited to 'internal/parse/parse.go')
-rw-r--r--internal/parse/parse.go49
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()
+}
n class='deletions'>-3/+1 2021-02-16Prepare v0.6.0v0.6.0René 'Necoro' Neumann3-3/+8 2021-02-16Fix CRLF endingRené 'Necoro' Neumann1-57/+57 2021-02-16Increment go-version to 1.16René 'Necoro' Neumann3-5/+5 2021-02-16Use go-embed for templates instead of inline strings.René 'Necoro' Neumann6-74/+79 2021-02-16Issue #46: Fix semantics of `n` resultRené 'Necoro' Neumann2-9/+15 2021-02-16Issue #46: Move and rename writer; add commentsRené 'Necoro' Neumann3-12/+21 2021-02-15Issue #46: Improvements; add testsRené 'Necoro' Neumann2-1/+48 2021-02-15Bump github.com/google/uuid from 1.1.4 to 1.2.0dependabot[bot]2-3/+3 2021-02-15Issue #46: Make the resulting email body not to include single \r or \n. This...René 'Necoro' Neumann2-2/+66 2021-01-20Bump github.com/PuerkitoBio/goquery from 1.6.0 to 1.6.1dependabot[bot]2-3/+3 2021-01-09Bump github.com/google/uuid from 1.1.2 to 1.1.4dependabot[bot]2-3/+3 2021-01-09Bump github.com/emersion/go-message from 0.14.0 to 0.14.1 (#42)dependabot[bot]2-3/+3 2020-11-28Bump github.com/emersion/go-message from 0.13.0 to 0.14.0 (#38)dependabot[bot]2-3/+9 2020-11-28Bump github.com/google/go-cmp from 0.5.2 to 0.5.4 (#37)dependabot[bot]2-3/+3 2020-11-23Fix release.ymlv0.5.2René 'Necoro' Neumann1-3/+10 2020-11-23Prepare v0.5.2René 'Necoro' Neumann3-3/+8 2020-11-20Bump github.com/gabriel-vasile/mimetype from 1.1.1 to 1.1.2dependabot[bot]2-3/+3 2020-11-04Clean dependabot.ymlRené 'Necoro' Neumann1-4/+0