aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.eu>2020-04-22 23:40:53 +0200
committerRené 'Necoro' Neumann <necoro@necoro.eu>2020-04-22 23:40:53 +0200
commit9280ecb7e0b0039d6c1f4800373eb76452145078 (patch)
treee3dd11e9953f949709505731a16e8246afe536aa /main.go
parent15b6c155a8476cf86e8bd745e239e55e77317909 (diff)
downloadfeed2imap-go-9280ecb7e0b0039d6c1f4800373eb76452145078.tar.gz
feed2imap-go-9280ecb7e0b0039d6c1f4800373eb76452145078.tar.bz2
feed2imap-go-9280ecb7e0b0039d6c1f4800373eb76452145078.zip
Concurrent feed processing; central imap handler
Diffstat (limited to '')
-rw-r--r--main.go49
1 files changed, 31 insertions, 18 deletions
diff --git a/main.go b/main.go
index 8e4b64f..0fd5ba4 100644
--- a/main.go
+++ b/main.go
@@ -5,8 +5,9 @@ import (
"fmt"
"net/url"
"os"
- "time"
+ "sync"
+ "github.com/Necoro/feed2imap-go/internal/config"
"github.com/Necoro/feed2imap-go/internal/feed"
"github.com/Necoro/feed2imap-go/internal/imap"
"github.com/Necoro/feed2imap-go/internal/log"
@@ -16,6 +17,31 @@ import (
var cfgFile = flag.String("f", "config.yml", "configuration file")
var verbose = flag.Bool("v", false, "enable verbose output")
+func processFeed(feed *feed.Feed, cfg *config.Config, client *imap.Client, wg *sync.WaitGroup) {
+ defer wg.Done()
+
+ mails, err := feed.ToMails(cfg)
+ if err != nil {
+ log.Errorf("Processing items of feed %s: %s", feed.Name, err)
+ return
+ }
+
+ if len(mails) == 0 {
+ return
+ }
+
+ folder := client.NewFolder(feed.Target)
+ client.EnsureFolder(folder, func(err error) string {
+ return fmt.Sprintf("Creating folder of feed %s: %s", feed.Name, err)
+ })
+
+ client.PutMessages(folder, mails, func(err error) string {
+ return fmt.Sprintf("Uploading messages of feed %s: %s", feed.Name, err)
+ })
+
+ log.Printf("Uploaded %d messages to '%s' @ %s", len(mails), feed.Name, folder)
+}
+
func run() error {
flag.Parse()
log.SetDebug(*verbose)
@@ -46,25 +72,12 @@ func run() error {
defer c.Disconnect()
+ var wg sync.WaitGroup
+ wg.Add(len(feeds))
for _, f := range feeds {
- mails, err := f.ToMails(cfg)
- if err != nil {
- return err
- }
- if len(mails) == 0 {
- continue
- }
- folder := c.NewFolder(f.Target)
- if err = c.EnsureFolder(folder); err != nil {
- return err
- }
- for _, mail := range mails {
- if err = c.PutMessage(folder, mail, time.Now()); err != nil {
- return err
- } // TODO
- }
- log.Printf("Uploaded %d messages to '%s' @ %s", len(mails), f.Name, folder)
+ go processFeed(f, cfg, c, &wg)
}
+ wg.Wait()
return nil
}
>2020-04-20Started with mail creationRené 'Necoro' Neumann4-3/+126 2020-04-20FeeditemsRené 'Necoro' Neumann2-2/+14 2020-04-20GlobalOptionsRené 'Necoro' Neumann3-25/+79 2020-04-19RestructureRené 'Necoro' Neumann6-152/+177 2020-04-19Rename package 'parse' to 'feed'René 'Necoro' Neumann2-3/+3 2020-04-19SELECT is not necessary for most operations -- skip itRené 'Necoro' Neumann2-12/+1 2020-04-19Store path as array -- the delimiter is not always '.'René 'Necoro' Neumann3-36/+44 2020-04-19Split client part to client.goRené 'Necoro' Neumann2-125/+137 2020-04-19IMAP: Create foldersRené 'Necoro' Neumann1-4/+38 2020-04-19Improved IMAPRené 'Necoro' Neumann1-3/+88 2020-04-19Started IMAP connectionRené 'Necoro' Neumann4-0/+152 2020-04-19Use our own logger for debug for convenience sakeRené 'Necoro' Neumann1-2/+3 2020-04-19Fix debug logging m(René 'Necoro' Neumann1-2/+2 2020-04-19Rename util.go to log.go. Add verbose modeRené 'Necoro' Neumann4-24/+54 2020-04-19Clean go.modRené 'Necoro' Neumann2-3/+0 2020-04-19Do not print the parsedCfg anymoreRené 'Necoro' Neumann1-1/+1 2020-04-19Increase go-version to 1.14René 'Necoro' Neumann1-2/+2 2020-04-19CI: go vetRené 'Necoro' Neumann1-0/+3 2020-04-19Fetching and parsing the feedsRené 'Necoro' Neumann5-4/+113 2020-04-19Ignore all config*.ymlRené 'Necoro' Neumann1-1/+1