webyesod: drop --host, add --base-url option for base url and tcp port independence
This commit is contained in:
parent
18bf123eae
commit
3865759bbd
@ -31,35 +31,35 @@ import Paths_hledger (getDataFileName)
|
||||
|
||||
defhost = "localhost"
|
||||
defport = 5000
|
||||
defbaseurl = printf "http://%s:%d" defhost defport :: String
|
||||
browserstartdelay = 100000 -- microseconds
|
||||
hledgerurl = "http://hledger.org"
|
||||
manualurl = hledgerurl++"/MANUAL.html"
|
||||
|
||||
web :: [Opt] -> [String] -> Journal -> IO ()
|
||||
web opts args j = do
|
||||
let host = fromMaybe defhost $ hostFromOpts opts
|
||||
let baseurl = fromMaybe defbaseurl $ baseUrlFromOpts opts
|
||||
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
|
||||
unless (Debug `elem` opts) $ forkIO (browser baseurl) >> return ()
|
||||
server baseurl port opts args j
|
||||
|
||||
browser :: String -> IO ()
|
||||
browser url = do
|
||||
browser baseurl = do
|
||||
putStrLn "starting web browser"
|
||||
threadDelay browserstartdelay
|
||||
openBrowserOn url
|
||||
openBrowserOn baseurl
|
||||
return ()
|
||||
|
||||
server :: String -> Int -> [Opt] -> [String] -> Journal -> IO ()
|
||||
server url port opts args j = do
|
||||
printf "starting web server at %s\n" url
|
||||
server baseurl port opts args j = do
|
||||
printf "starting web server on port %d with base url %s\n" port baseurl
|
||||
fp <- getDataFileName "web"
|
||||
let app = HledgerWebApp{
|
||||
appOpts=opts
|
||||
,appArgs=args
|
||||
,appJournal=j
|
||||
,appWebdir=fp
|
||||
,appRoot=url
|
||||
,appRoot=baseurl
|
||||
}
|
||||
withStore "hledger" $ do
|
||||
putValue "hledger" "journal" j
|
||||
|
||||
@ -82,8 +82,8 @@ options = [
|
||||
,Option "Q" ["quarterly"] (NoArg QuarterlyOpt) "register report: show quarterly summary"
|
||||
,Option "Y" ["yearly"] (NoArg YearlyOpt) "register report: show yearly summary"
|
||||
#ifdef WEB
|
||||
,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"
|
||||
,Option "" ["base-url"] (ReqArg BaseUrl "URL") "web: use this base url (default http://localhost:PORT)"
|
||||
,Option "" ["port"] (ReqArg Port "N") "web: serve on tcp port N (default 5000)"
|
||||
#endif
|
||||
,Option "h" ["help"] (NoArg Help) "show this help"
|
||||
,Option "V" ["version"] (NoArg Version) "show version information"
|
||||
@ -120,7 +120,7 @@ data Opt =
|
||||
QuarterlyOpt |
|
||||
YearlyOpt |
|
||||
#ifdef WEB
|
||||
Host {value::String} |
|
||||
BaseUrl {value::String} |
|
||||
Port {value::String} |
|
||||
#endif
|
||||
Help |
|
||||
@ -225,9 +225,9 @@ displayExprFromOpts opts = listtomaybe $ optValuesForConstructor Display opts
|
||||
listtomaybe vs = Just $ last vs
|
||||
|
||||
#ifdef WEB
|
||||
-- | Get the value of the (last) host option, if any.
|
||||
hostFromOpts :: [Opt] -> Maybe String
|
||||
hostFromOpts opts = listtomaybe $ optValuesForConstructor Host opts
|
||||
-- | Get the value of the (last) baseurl option, if any.
|
||||
baseUrlFromOpts :: [Opt] -> Maybe String
|
||||
baseUrlFromOpts opts = listtomaybe $ optValuesForConstructor BaseUrl opts
|
||||
where
|
||||
listtomaybe [] = Nothing
|
||||
listtomaybe vs = Just $ last vs
|
||||
|
||||
Loading…
Reference in New Issue
Block a user