data Args =
- Args { output :: FilePath,
+ Args { full_stories :: Bool,
+ output :: FilePath,
article :: String }
deriving (Show, Data, Typeable)
output_help :: String
output_help = "Output file, defaults to stdout"
+full_stories_help :: String
+full_stories_help = "Replace \"Full Story\" links with their content"
+
arg_spec :: Mode (CmdArgs Args)
arg_spec = cmdArgsMode $
Args {
- output = def &= typFile &= help output_help,
- article = def &= argPos 0 &= typ "ARTICLE"
+ full_stories = def &= help full_stories_help,
+ output = def &= typFile &= help output_help,
+ article = def &= argPos 0 &= typ "ARTICLE"
}
&= program program_name
&= summary lwn_epub_summary
-- | Contains all of our configurable options.
data Cfg = Cfg {
- article :: String,
- cookie_jar :: Maybe FilePath,
- output :: FilePath,
- password :: Maybe String,
- username :: Maybe String }
+ article :: String,
+ cookie_jar :: Maybe FilePath,
+ full_stories :: Bool,
+ output :: FilePath,
+ password :: Maybe String,
+ username :: Maybe String }
instance Monoid Cfg where
- mempty = Cfg { article = "",
- cookie_jar = Nothing,
- output = "",
- password = Nothing,
- username = Nothing }
+ mempty = Cfg { article = "",
+ cookie_jar = Nothing,
+ full_stories = False,
+ output = "",
+ password = Nothing,
+ username = Nothing }
mappend c1 c2 =
- let article' = (if null article1 then article2 else article1)
- cookie_jar' = cookie_jar1 `mplus` cookie_jar2
- output' = (if null output1 then output2 else output1)
- password' = password1 `mplus` password2
- username' = username1 `mplus` username2
+ let article' = (if null article1 then article2 else article1)
+ cookie_jar' = cookie_jar1 `mplus` cookie_jar2
+ full_stories' = full_stories1 || full_stories2
+ output' = (if null output1 then output2 else output1)
+ password' = password1 `mplus` password2
+ username' = username1 `mplus` username2
in
- Cfg { article = article',
- cookie_jar = cookie_jar',
- output = output',
- password = password',
- username = username' }
+ Cfg { article = article',
+ cookie_jar = cookie_jar',
+ full_stories = full_stories',
+ output = output',
+ password = password',
+ username = username' }
where
- article1 = article c1
- article2 = article c2
- cookie_jar1 = cookie_jar c1
- cookie_jar2 = cookie_jar c2
- output1 = output c1
- output2 = output c2
- password1 = password c1
- password2 = password c2
- username1 = username c1
- username2 = username c2
+ article1 = article c1
+ article2 = article c2
+ cookie_jar1 = cookie_jar c1
+ cookie_jar2 = cookie_jar c2
+ full_stories1 = full_stories c1
+ full_stories2 = full_stories c2
+ output1 = output c1
+ output2 = output c2
+ password1 = password c1
+ password2 = password c2
+ username1 = username c1
+ username2 = username c2
use_account :: Cfg -> Bool
case parse_result of
Left err -> Left (format_cpe err)
Right cp ->
- let cp_username = get cp "DEFAULT" "username"
+ let cp_full_stories = get cp "DEFAULT" "full_stories"
cp_password = get cp "DEFAULT" "password"
+ cp_username = get cp "DEFAULT" "username"
- cfg_username = either_to_maybe cp_username
cfg_password = either_to_maybe cp_password
+ cfg_full_stories = case cp_full_stories of
+ Left _ -> False -- default
+ Right f -> f
+ cfg_username = either_to_maybe cp_username
in
- Right $ mempty { username = cfg_username,
- password = cfg_password }
+ Right $ mempty { full_stories = cfg_full_stories,
+ password = cfg_password,
+ username = cfg_username }