{- Copyright (C) 2022 Yuchen Pei. This file is part of f2md. f2md is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. f2md is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with f2md. If not, see . -} {-# LANGUAGE OverloadedStrings #-} import qualified Data.Text as T import Options.Applicative import Control.Monad.IO.Class import Control.Monad.Logger import System.Directory import Control.Monad.Extra import F2Md.Types import F2Md.Import import F2Md.Export import F2Md.Config import System.FilePath main :: IO () main = do options <- execParser $ opts (feeds, maildir, dbPath) <- getUserdata $ configPath options whenJust maildir $ \root -> do mapM_ (createDirectoryIfMissing True) [root "new", root "cur", root "tmp"] mapM_ (runStdoutLoggingT . processFeed root dbPath) feeds where opts = info (progParser <**> helper) (fullDesc <> progDesc "f2md feeds to maildir" <> header "f2md - a utility to pull new items \ \from feeds and write them to maildir") -- TODO: update db on interruption with the latest date processFeed :: FilePath -> Maybe FilePath -> FeedUserdata -> LoggingT IO () processFeed root dbPath feed = do logInfoN $ "Fetching " <> (fuUrl feed) <> "..." msgs <- liftIO $ toMessagesFromUrl (fuUrl feed) (fuLastUpdated feed) logInfoN $ "Writing " <> (T.pack $ show $ length msgs) <> " messages..." liftIO $ mapM_ (writeMessage root) msgs whenJust dbPath $ \dbPath' -> liftIO $ updateLastUpdated' dbPath' feed msgs data Options = Options { configPath :: FilePath } progParser :: Parser Options progParser = Options <$> strOption (long "config" <> short 'c' <> metavar "CONFIG" <> value "~/.f2md.json" <> showDefault <> help "Config file storing feeds, maildir \ \location and timestamp file location.")