Arguments are still accepted and ignored, since I can't see how to disallow them with cmdargs
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| {-|
 | |
| 
 | |
| -}
 | |
| 
 | |
| module Hledger.Web.Options
 | |
| where
 | |
| import Data.Maybe
 | |
| import System.Console.CmdArgs
 | |
| import System.Console.CmdArgs.Explicit
 | |
| 
 | |
| import Hledger.Cli hiding (progname,progversion)
 | |
| import qualified Hledger.Cli (progname)
 | |
| 
 | |
| import Hledger.Web.Settings
 | |
| 
 | |
| progname = Hledger.Cli.progname ++ "-web"
 | |
| progversion = progversionstr progname
 | |
| 
 | |
| defbaseurlexample = (reverse $ drop 4 $ reverse $ defbaseurl defport) ++ "PORT"
 | |
| 
 | |
| webflags = [
 | |
|   flagReq ["base-url"]  (\s opts -> Right $ setopt "base-url" s opts) "URL" ("set the base url (default: "++defbaseurlexample++")")
 | |
|  ,flagReq ["port"]  (\s opts -> Right $ setopt "port" s opts) "PORT" ("listen on this tcp port (default: "++show defport++")")
 | |
|  ]
 | |
|  
 | |
| webmode =  (mode "hledger-web" [("command","web")]
 | |
|             "start serving the hledger web interface"
 | |
|             mainargsflag []){
 | |
|               modeGroupFlags = Group {
 | |
|                                 groupUnnamed = webflags
 | |
|                                ,groupHidden = []
 | |
|                                ,groupNamed = [(generalflagstitle, generalflags1)]
 | |
|                                }
 | |
|              ,modeHelpSuffix=[
 | |
|                   -- "Reads your ~/.hledger.journal file, or another specified by $LEDGER_FILE or -f, and starts the full-window curses ui."
 | |
|                  ]
 | |
|            }
 | |
| 
 | |
| -- hledger-web options, used in hledger-web and above
 | |
| data WebOpts = WebOpts {
 | |
|      base_url_ :: String
 | |
|     ,port_     :: Int
 | |
|     ,cliopts_  :: CliOpts
 | |
|  } deriving (Show)
 | |
| 
 | |
| defwebopts = WebOpts
 | |
|     def
 | |
|     def
 | |
|     def
 | |
| 
 | |
| -- instance Default WebOpts where def = defwebopts
 | |
| 
 | |
| toWebOpts :: RawOpts -> IO WebOpts
 | |
| toWebOpts rawopts = do
 | |
|   cliopts <- toCliOpts rawopts
 | |
|   let p = fromMaybe defport $ maybeintopt "port" rawopts
 | |
|   return defwebopts {
 | |
|               port_ = p
 | |
|              ,base_url_ = maybe (defbaseurl p) stripTrailingSlash $ maybestringopt "base-url" rawopts
 | |
|              ,cliopts_   = cliopts
 | |
|              }
 | |
|   where
 | |
|     stripTrailingSlash = reverse . dropWhile (=='/') . reverse -- yesod don't like it
 | |
| 
 | |
| checkWebOpts :: WebOpts -> IO WebOpts
 | |
| checkWebOpts opts = do
 | |
|   checkCliOpts $ cliopts_ opts
 | |
|   return opts
 | |
| 
 | |
| getHledgerWebOpts :: IO WebOpts
 | |
| getHledgerWebOpts = processArgs webmode >>= return . decodeRawOpts >>= toWebOpts >>= checkWebOpts
 | |
| 
 |