diff options
author | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-05-01 14:29:30 +0200 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-05-01 14:29:30 +0200 |
commit | 253fef43021c14a7fd6f2ac3a377c34cd47cb8f6 (patch) | |
tree | b3bf3ae2bf623883f77a6044ee69a1820ddb07d6 | |
parent | 5d462ef47217c98b487bd6c1eaffb0630525ba92 (diff) | |
download | feed2imap-go-253fef43021c14a7fd6f2ac3a377c34cd47cb8f6.tar.gz feed2imap-go-253fef43021c14a7fd6f2ac3a377c34cd47cb8f6.tar.bz2 feed2imap-go-253fef43021c14a7fd6f2ac3a377c34cd47cb8f6.zip |
New options --build-cache and --dry-run
Closes #11
Diffstat (limited to '')
-rw-r--r-- | internal/feed/cache.go | 6 | ||||
-rw-r--r-- | internal/feed/state.go | 14 | ||||
-rw-r--r-- | main.go | 34 |
3 files changed, 38 insertions, 16 deletions
diff --git a/internal/feed/cache.go b/internal/feed/cache.go index df7559b..0b2f905 100644 --- a/internal/feed/cache.go +++ b/internal/feed/cache.go @@ -70,12 +70,16 @@ func storeCache(cache Cache, fileName string) error { return nil } +func newCache() (Cache, error) { + return cacheForVersion(currentVersion) +} + func loadCache(fileName string) (Cache, error) { f, err := os.Open(fileName) if err != nil { if errors.Is(err, os.ErrNotExist) { // no cache there yet -- make new - return cacheForVersion(currentVersion) + return newCache() } return nil, fmt.Errorf("opening cache at '%s': %w", fileName, err) } diff --git a/internal/feed/state.go b/internal/feed/state.go index 154fafd..a060a77 100644 --- a/internal/feed/state.go +++ b/internal/feed/state.go @@ -34,8 +34,18 @@ func (state *State) ForeachGo(goFunc func(*Feed)) { wg.Wait() } -func (state *State) LoadCache(fileName string) error { - cache, err := loadCache(fileName) +func (state *State) LoadCache(fileName string, forceNew bool) error { + var ( + cache Cache + err error + ) + + if forceNew { + cache, err = newCache() + } else { + cache, err = loadCache(fileName) + } + if err != nil { return err } @@ -16,15 +16,17 @@ var cfgFile = flag.String("f", "config.yml", "configuration file") var cacheFile = flag.String("c", "feed.cache", "cache file") var verbose = flag.Bool("v", false, "enable verbose output") var debug = flag.Bool("d", false, "enable debug output") +var dryRun = flag.Bool("dry-run", false, "do everything short of uploading and writing the cache") +var buildCache = flag.Bool("build-cache", false, "only (re)build the cache; useful after migration or when the cache is lost or corrupted") -func processFeed(feed *feed.Feed, cfg *config.Config, client *imap.Client) { +func processFeed(feed *feed.Feed, cfg *config.Config, client *imap.Client, dryRun bool) { mails, err := feed.ToMails(cfg) if err != nil { log.Errorf("Processing items of feed %s: %s", feed.Name, err) return } - if len(mails) == 0 { + if dryRun || len(mails) == 0 { feed.MarkSuccess() return } @@ -66,7 +68,7 @@ func run() error { state := feed.NewState(cfg) - err = state.LoadCache(*cacheFile) + err = state.LoadCache(*cacheFile, *buildCache) if err != nil { return err } @@ -89,19 +91,25 @@ func run() error { return fmt.Errorf("parsing 'target': %w", err) } - c, err := imap.Connect(imapUrl) - if err != nil { - return err - } + var c *imap.Client + if !*dryRun && !*buildCache { + if c, err = imap.Connect(imapUrl); err != nil { + return err + } - defer c.Disconnect() + defer c.Disconnect() + } - state.ForeachGo(func(f *feed.Feed) { - processFeed(f, cfg, c) - }) + if !*buildCache { + state.ForeachGo(func(f *feed.Feed) { + processFeed(f, cfg, c, *dryRun) + }) + } - if err = state.StoreCache(*cacheFile); err != nil { - return err + if !*dryRun { + if err = state.StoreCache(*cacheFile); err != nil { + return err + } } return nil |