web: exit if an instance is already running (#226)
Also - pause for 0.1s before opening the browser, to ensure the app is ready - don't open a browser if the app fails to start - terminate the server thread more carefully on exit, may resolve some lingering background thread issues eg on windows
This commit is contained in:
parent
e2126fe480
commit
df1040014e
@ -16,8 +16,8 @@ import Yesod.Default.Config --(fromArgs)
|
|||||||
import Settings -- (parseExtra)
|
import Settings -- (parseExtra)
|
||||||
import Application (makeApplication)
|
import Application (makeApplication)
|
||||||
import Data.String
|
import Data.String
|
||||||
import Network.Wai.Handler.Warp (runSettings, defaultSettings, setPort)
|
import Network.Wai.Handler.Warp (runSettings, defaultSettings, setHost, setPort)
|
||||||
import Network.Wai.Handler.Launch (runUrlPort)
|
import Network.Wai.Handler.Launch (runHostPortUrl)
|
||||||
--
|
--
|
||||||
#if !MIN_VERSION_base(4,8,0)
|
#if !MIN_VERSION_base(4,8,0)
|
||||||
import Control.Applicative ((<$>))
|
import Control.Applicative ((<$>))
|
||||||
@ -70,23 +70,30 @@ web :: WebOpts -> Journal -> IO ()
|
|||||||
web opts j = do
|
web opts j = do
|
||||||
d <- getCurrentDay
|
d <- getCurrentDay
|
||||||
let j' = filterJournalTransactions (queryFromOpts d $ reportopts_ $ cliopts_ opts) j
|
let j' = filterJournalTransactions (queryFromOpts d $ reportopts_ $ cliopts_ opts) j
|
||||||
|
h = "127.0.0.1"
|
||||||
p = port_ opts
|
p = port_ opts
|
||||||
u = base_url_ opts
|
u = base_url_ opts
|
||||||
staticRoot = pack <$> file_url_ opts
|
staticRoot = pack <$> file_url_ opts
|
||||||
_ <- printf "Starting web app on port %d with base url %s\n" p u
|
appconfig = AppConfig{appEnv = Development
|
||||||
app <- makeApplication opts j' AppConfig{appEnv = Development
|
,appHost = fromString h
|
||||||
,appPort = p
|
,appPort = p
|
||||||
,appRoot = pack u
|
,appRoot = pack u
|
||||||
,appHost = fromString "*4"
|
|
||||||
,appExtra = Extra "" Nothing staticRoot
|
,appExtra = Extra "" Nothing staticRoot
|
||||||
}
|
}
|
||||||
|
app <- makeApplication opts j' appconfig
|
||||||
|
_ <- printf "Starting web app on host %s port %d with base url %s\n" h p u
|
||||||
if server_ opts
|
if server_ opts
|
||||||
then do
|
then do
|
||||||
putStrLn "Press ctrl-c to quit"
|
putStrLn "Press ctrl-c to quit"
|
||||||
hFlush stdout
|
hFlush stdout
|
||||||
Network.Wai.Handler.Warp.runSettings (setPort p defaultSettings) app
|
let warpsettings =
|
||||||
|
setHost (fromString h) $
|
||||||
|
setPort p $
|
||||||
|
defaultSettings
|
||||||
|
Network.Wai.Handler.Warp.runSettings warpsettings app
|
||||||
else do
|
else do
|
||||||
putStrLn "Starting web browser if possible"
|
putStrLn "Starting web browser..."
|
||||||
putStrLn "Web app will auto-exit after a few minutes with no browsers (or press ctrl-c)"
|
putStrLn "Web app will auto-exit after a few minutes with no browsers (or press ctrl-c)"
|
||||||
hFlush stdout
|
hFlush stdout
|
||||||
Network.Wai.Handler.Launch.runUrlPort p "" app
|
Network.Wai.Handler.Launch.runHostPortUrl h p "" app
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,11 @@ packages:
|
|||||||
- hledger-ui
|
- hledger-ui
|
||||||
- hledger-web
|
- hledger-web
|
||||||
- hledger-api
|
- hledger-api
|
||||||
|
- location:
|
||||||
|
git: https://github.com/simonmichael/wai
|
||||||
|
commit: 96847d4cfc5894823f591746cac32416f941ed90
|
||||||
|
subdirs:
|
||||||
|
- wai-handler-launch
|
||||||
|
|
||||||
extra-deps:
|
extra-deps:
|
||||||
- file-embed-0.0.10
|
- file-embed-0.0.10
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user