blob: 42566d7b85bf09f82ef0394d528f68f5fa9f69ea (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
{-# 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.")
|