module Main
where
+import Control.Concurrent.ParallelIO (stopGlobalPool)
+import System.Directory (doesFileExist)
import System.IO (
Handle,
IOMode (WriteMode),
+ hPutStrLn,
openBinaryFile,
- stdout)
+ stderr,
+ stdout
+ )
import CommandLine (show_help)
import Configuration (Cfg(..), get_cfg)
+import LWN.Article (real_article_path)
+import LWN.HTTP (get_login_cookie)
import LWN.Page (epublish, page_from_url)
openBinaryFile path WriteMode
+argument_is_file :: Cfg -> IO Bool
+argument_is_file cfg = do
+ path <- real_article_path (article cfg)
+ doesFileExist path
+
main :: IO ()
main = do
- cfg <- get_cfg
+ cfg' <- get_cfg
+ aif <- argument_is_file cfg'
+ cfg <- case aif of
+ False -> get_login_cookie cfg'
+ True -> return cfg'
+
page <- page_from_url cfg (article cfg)
case page of
Just p -> do
output_handle <- get_output_handle (output cfg)
epublish p output_handle
Nothing -> do
+ hPutStrLn stderr "ERROR: could not parse an LWN page from the given URL."
_ <- show_help
return ()
+
+ -- Necessary, for some reason.
+ stopGlobalPool