webyesod: --host and --port options set the webserver's base url and tcp port
This commit is contained in:
		
							parent
							
								
									505833020f
								
							
						
					
					
						commit
						365035a3bd
					
				@ -36,45 +36,47 @@ import Paths_hledger (getDataFileName)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hostname = "localhost"
 | 
					defhost = "localhost"
 | 
				
			||||||
tcpport  = 5000
 | 
					defport = 5000
 | 
				
			||||||
 | 
					 | 
				
			||||||
browserstartdelay = 100000 -- microseconds
 | 
					browserstartdelay = 100000 -- microseconds
 | 
				
			||||||
 | 
					 | 
				
			||||||
homeurl = printf "http://%s:%d" hostname tcpport
 | 
					 | 
				
			||||||
hledgerurl = "http://hledger.org"
 | 
					hledgerurl = "http://hledger.org"
 | 
				
			||||||
manualurl = hledgerurl++"/MANUAL.html"
 | 
					manualurl = hledgerurl++"/MANUAL.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
web :: [Opt] -> [String] -> Journal -> IO ()
 | 
					web :: [Opt] -> [String] -> Journal -> IO ()
 | 
				
			||||||
web opts args j = do
 | 
					web opts args j = do
 | 
				
			||||||
  unless (Debug `elem` opts) $ forkIO browser >> return ()
 | 
					  let host = fromMaybe defhost $ hostFromOpts opts
 | 
				
			||||||
  server opts args j
 | 
					      port = fromMaybe defport $ portFromOpts opts
 | 
				
			||||||
 | 
					      url = printf "http://%s:%d" host port :: String
 | 
				
			||||||
 | 
					  unless (Debug `elem` opts) $ forkIO (browser url) >> return ()
 | 
				
			||||||
 | 
					  server url port opts args j
 | 
				
			||||||
 | 
					
 | 
				
			||||||
browser :: IO ()
 | 
					browser :: String -> IO ()
 | 
				
			||||||
browser = putStrLn "starting web browser" >> threadDelay browserstartdelay >> openBrowserOn homeurl >> return ()
 | 
					browser url = putStrLn "starting web browser" >> threadDelay browserstartdelay >> openBrowserOn url >> return ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
server :: [Opt] -> [String] -> Journal -> IO ()
 | 
					server :: String -> Int -> [Opt] -> [String] -> Journal -> IO ()
 | 
				
			||||||
server opts args j = do
 | 
					server url port opts args j = do
 | 
				
			||||||
    printf "starting web server on port %d\n" tcpport
 | 
					    printf "starting web server at %s\n" url
 | 
				
			||||||
    fp <- getDataFileName "web"
 | 
					    fp <- getDataFileName "web"
 | 
				
			||||||
    let app = HledgerWebApp{
 | 
					    let app = HledgerWebApp{
 | 
				
			||||||
               appOpts=opts
 | 
					               appOpts=opts
 | 
				
			||||||
              ,appArgs=args
 | 
					              ,appArgs=args
 | 
				
			||||||
              ,appJournal=j
 | 
					              ,appJournal=j
 | 
				
			||||||
              ,appWebdir=fp
 | 
					              ,appWebdir=fp
 | 
				
			||||||
 | 
					              ,appRoot=url
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
    withStore "hledger" $ do -- IO ()
 | 
					    withStore "hledger" $ do -- IO ()
 | 
				
			||||||
     putValue "hledger" "journal" j
 | 
					     putValue "hledger" "journal" j
 | 
				
			||||||
     toWaiApp app >>= basicHandler tcpport
 | 
					     toWaiApp app >>= basicHandler port
 | 
				
			||||||
 | 
					
 | 
				
			||||||
data HledgerWebApp = HledgerWebApp {
 | 
					data HledgerWebApp = HledgerWebApp {
 | 
				
			||||||
      appOpts::[Opt]
 | 
					      appOpts::[Opt]
 | 
				
			||||||
     ,appArgs::[String]
 | 
					     ,appArgs::[String]
 | 
				
			||||||
     ,appJournal::Journal
 | 
					     ,appJournal::Journal
 | 
				
			||||||
     ,appWebdir::FilePath
 | 
					     ,appWebdir::FilePath
 | 
				
			||||||
 | 
					     ,appRoot::String
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
instance Yesod HledgerWebApp where approot _ = homeurl
 | 
					instance Yesod HledgerWebApp where approot = appRoot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mkYesod "HledgerWebApp" [$parseRoutes|
 | 
					mkYesod "HledgerWebApp" [$parseRoutes|
 | 
				
			||||||
/             IndexPage        GET
 | 
					/             IndexPage        GET
 | 
				
			||||||
 | 
				
			|||||||
@ -81,6 +81,10 @@ options = [
 | 
				
			|||||||
 ,Option "M" ["monthly"]      (NoArg  MonthlyOpt)    "register report: show monthly summary"
 | 
					 ,Option "M" ["monthly"]      (NoArg  MonthlyOpt)    "register report: show monthly summary"
 | 
				
			||||||
 ,Option "Q" ["quarterly"]    (NoArg  QuarterlyOpt)  "register report: show quarterly summary"
 | 
					 ,Option "Q" ["quarterly"]    (NoArg  QuarterlyOpt)  "register report: show quarterly summary"
 | 
				
			||||||
 ,Option "Y" ["yearly"]       (NoArg  YearlyOpt)     "register report: show yearly summary"
 | 
					 ,Option "Y" ["yearly"]       (NoArg  YearlyOpt)     "register report: show yearly summary"
 | 
				
			||||||
 | 
					#if defined(WEB) || defined(WEBYESOD)
 | 
				
			||||||
 | 
					 ,Option ""  ["host"] (ReqArg Host "HOST")           "web: use hostname HOST rather than localhost"
 | 
				
			||||||
 | 
					 ,Option ""  ["port"] (ReqArg Port "N")              "web: use tcp port N rather than 5000"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 ,Option "h"  ["help"] (NoArg  Help)                  "show this help"
 | 
					 ,Option "h"  ["help"] (NoArg  Help)                  "show this help"
 | 
				
			||||||
 ,Option "V" ["version"]      (NoArg  Version)       "show version information"
 | 
					 ,Option "V" ["version"]      (NoArg  Version)       "show version information"
 | 
				
			||||||
 ,Option "v" ["verbose"]      (NoArg  Verbose)       "show verbose test output"
 | 
					 ,Option "v" ["verbose"]      (NoArg  Verbose)       "show verbose test output"
 | 
				
			||||||
@ -115,6 +119,10 @@ data Opt =
 | 
				
			|||||||
    MonthlyOpt |
 | 
					    MonthlyOpt |
 | 
				
			||||||
    QuarterlyOpt |
 | 
					    QuarterlyOpt |
 | 
				
			||||||
    YearlyOpt |
 | 
					    YearlyOpt |
 | 
				
			||||||
 | 
					#if defined(WEB) || defined(WEBYESOD)
 | 
				
			||||||
 | 
					    Host    {value::String} |
 | 
				
			||||||
 | 
					    Port    {value::String} |
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    Help |
 | 
					    Help |
 | 
				
			||||||
    Verbose |
 | 
					    Verbose |
 | 
				
			||||||
    Version
 | 
					    Version
 | 
				
			||||||
@ -216,6 +224,23 @@ displayExprFromOpts opts = listtomaybe $ optValuesForConstructor Display opts
 | 
				
			|||||||
      listtomaybe [] = Nothing
 | 
					      listtomaybe [] = Nothing
 | 
				
			||||||
      listtomaybe vs = Just $ last vs
 | 
					      listtomaybe vs = Just $ last vs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(WEB) || defined(WEBYESOD)
 | 
				
			||||||
 | 
					-- | Get the value of the (last) host option, if any.
 | 
				
			||||||
 | 
					hostFromOpts :: [Opt] -> Maybe String
 | 
				
			||||||
 | 
					hostFromOpts opts = listtomaybe $ optValuesForConstructor Host opts
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					      listtomaybe [] = Nothing
 | 
				
			||||||
 | 
					      listtomaybe vs = Just $ last vs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- | Get the value of the (last) port option, if any.
 | 
				
			||||||
 | 
					portFromOpts :: [Opt] -> Maybe Int
 | 
				
			||||||
 | 
					portFromOpts opts = listtomaybeint $ optValuesForConstructor Port opts
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					      listtomaybeint [] = Nothing
 | 
				
			||||||
 | 
					      listtomaybeint vs = Just $ read $ last vs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- | Get a maybe boolean representing the last cleared/uncleared option if any.
 | 
					-- | Get a maybe boolean representing the last cleared/uncleared option if any.
 | 
				
			||||||
clearedValueFromOpts opts | null os = Nothing
 | 
					clearedValueFromOpts opts | null os = Nothing
 | 
				
			||||||
                          | last os == Cleared = Just True
 | 
					                          | last os == Cleared = Just True
 | 
				
			||||||
 | 
				
			|||||||
@ -273,6 +273,8 @@ Here is the command-line help:
 | 
				
			|||||||
     -M       --monthly            register report: show monthly summary
 | 
					     -M       --monthly            register report: show monthly summary
 | 
				
			||||||
     -Q       --quarterly          register report: show quarterly summary
 | 
					     -Q       --quarterly          register report: show quarterly summary
 | 
				
			||||||
     -Y       --yearly             register report: show yearly summary
 | 
					     -Y       --yearly             register report: show yearly summary
 | 
				
			||||||
 | 
					              --host               web: use hostname HOST rather than localhost
 | 
				
			||||||
 | 
					              --port               web: use tcp port N rather than 5000
 | 
				
			||||||
     -h       --help               show this help
 | 
					     -h       --help               show this help
 | 
				
			||||||
     -V       --version            show version information
 | 
					     -V       --version            show version information
 | 
				
			||||||
     -v       --verbose            show verbose test output
 | 
					     -v       --verbose            show verbose test output
 | 
				
			||||||
@ -405,7 +407,7 @@ balance and add commands.
 | 
				
			|||||||
Examples:
 | 
					Examples:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $ hledger web
 | 
					    $ hledger web
 | 
				
			||||||
    $ hledger web --debug -f demo.ledger -p thisyear
 | 
					    $ hledger web --host this.host.com --port 5010 --debug -f demo.ledger -p thisyear
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Other commands
 | 
					#### Other commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user