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"
|
defhost = "localhost"
|
||||||
defport = 5000
|
defport = 5000
|
||||||
|
defbaseurl = printf "http://%s:%d" defhost defport :: String
|
||||||
browserstartdelay = 100000 -- microseconds
|
browserstartdelay = 100000 -- microseconds
|
||||||
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
|
||||||
let host = fromMaybe defhost $ hostFromOpts opts
|
let baseurl = fromMaybe defbaseurl $ baseUrlFromOpts opts
|
||||||
port = fromMaybe defport $ portFromOpts opts
|
port = fromMaybe defport $ portFromOpts opts
|
||||||
url = printf "http://%s:%d" host port :: String
|
unless (Debug `elem` opts) $ forkIO (browser baseurl) >> return ()
|
||||||
unless (Debug `elem` opts) $ forkIO (browser url) >> return ()
|
server baseurl port opts args j
|
||||||
server url port opts args j
|
|
||||||
|
|
||||||
browser :: String -> IO ()
|
browser :: String -> IO ()
|
||||||
browser url = do
|
browser baseurl = do
|
||||||
putStrLn "starting web browser"
|
putStrLn "starting web browser"
|
||||||
threadDelay browserstartdelay
|
threadDelay browserstartdelay
|
||||||
openBrowserOn url
|
openBrowserOn baseurl
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
server :: String -> Int -> [Opt] -> [String] -> Journal -> IO ()
|
server :: String -> Int -> [Opt] -> [String] -> Journal -> IO ()
|
||||||
server url port opts args j = do
|
server baseurl port opts args j = do
|
||||||
printf "starting web server at %s\n" url
|
printf "starting web server on port %d with base url %s\n" port baseurl
|
||||||
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
|
,appRoot=baseurl
|
||||||
}
|
}
|
||||||
withStore "hledger" $ do
|
withStore "hledger" $ do
|
||||||
putValue "hledger" "journal" j
|
putValue "hledger" "journal" j
|
||||||
|
|||||||
@ -82,8 +82,8 @@ options = [
|
|||||||
,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"
|
||||||
#ifdef WEB
|
#ifdef WEB
|
||||||
,Option "" ["host"] (ReqArg Host "HOST") "web: use hostname HOST rather than localhost"
|
,Option "" ["base-url"] (ReqArg BaseUrl "URL") "web: use this base url (default http://localhost:PORT)"
|
||||||
,Option "" ["port"] (ReqArg Port "N") "web: use tcp port N rather than 5000"
|
,Option "" ["port"] (ReqArg Port "N") "web: serve on tcp port N (default 5000)"
|
||||||
#endif
|
#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"
|
||||||
@ -120,7 +120,7 @@ data Opt =
|
|||||||
QuarterlyOpt |
|
QuarterlyOpt |
|
||||||
YearlyOpt |
|
YearlyOpt |
|
||||||
#ifdef WEB
|
#ifdef WEB
|
||||||
Host {value::String} |
|
BaseUrl {value::String} |
|
||||||
Port {value::String} |
|
Port {value::String} |
|
||||||
#endif
|
#endif
|
||||||
Help |
|
Help |
|
||||||
@ -225,9 +225,9 @@ displayExprFromOpts opts = listtomaybe $ optValuesForConstructor Display opts
|
|||||||
listtomaybe vs = Just $ last vs
|
listtomaybe vs = Just $ last vs
|
||||||
|
|
||||||
#ifdef WEB
|
#ifdef WEB
|
||||||
-- | Get the value of the (last) host option, if any.
|
-- | Get the value of the (last) baseurl option, if any.
|
||||||
hostFromOpts :: [Opt] -> Maybe String
|
baseUrlFromOpts :: [Opt] -> Maybe String
|
||||||
hostFromOpts opts = listtomaybe $ optValuesForConstructor Host opts
|
baseUrlFromOpts opts = listtomaybe $ optValuesForConstructor BaseUrl opts
|
||||||
where
|
where
|
||||||
listtomaybe [] = Nothing
|
listtomaybe [] = Nothing
|
||||||
listtomaybe vs = Just $ last vs
|
listtomaybe vs = Just $ last vs
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user