From df1040014e9c8d9e78e61d5246876d29a07cf019 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Fri, 22 Apr 2016 11:21:33 -0700 Subject: [PATCH] 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 --- hledger-web/Hledger/Web/Main.hs | 43 +++++++++++++++++++-------------- stack.yaml | 5 ++++ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/hledger-web/Hledger/Web/Main.hs b/hledger-web/Hledger/Web/Main.hs index e44aa43ee..2521671cf 100644 --- a/hledger-web/Hledger/Web/Main.hs +++ b/hledger-web/Hledger/Web/Main.hs @@ -16,8 +16,8 @@ import Yesod.Default.Config --(fromArgs) import Settings -- (parseExtra) import Application (makeApplication) import Data.String -import Network.Wai.Handler.Warp (runSettings, defaultSettings, setPort) -import Network.Wai.Handler.Launch (runUrlPort) +import Network.Wai.Handler.Warp (runSettings, defaultSettings, setHost, setPort) +import Network.Wai.Handler.Launch (runHostPortUrl) -- #if !MIN_VERSION_base(4,8,0) import Control.Applicative ((<$>)) @@ -70,23 +70,30 @@ web :: WebOpts -> Journal -> IO () web opts j = do d <- getCurrentDay let j' = filterJournalTransactions (queryFromOpts d $ reportopts_ $ cliopts_ opts) j + h = "127.0.0.1" p = port_ opts u = base_url_ opts staticRoot = pack <$> file_url_ opts - _ <- printf "Starting web app on port %d with base url %s\n" p u - app <- makeApplication opts j' AppConfig{appEnv = Development - ,appPort = p - ,appRoot = pack u - ,appHost = fromString "*4" - ,appExtra = Extra "" Nothing staticRoot - } + appconfig = AppConfig{appEnv = Development + ,appHost = fromString h + ,appPort = p + ,appRoot = pack u + ,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 - then do - putStrLn "Press ctrl-c to quit" - hFlush stdout - Network.Wai.Handler.Warp.runSettings (setPort p defaultSettings) app - else do - putStrLn "Starting web browser if possible" - putStrLn "Web app will auto-exit after a few minutes with no browsers (or press ctrl-c)" - hFlush stdout - Network.Wai.Handler.Launch.runUrlPort p "" app + then do + putStrLn "Press ctrl-c to quit" + hFlush stdout + let warpsettings = + setHost (fromString h) $ + setPort p $ + defaultSettings + Network.Wai.Handler.Warp.runSettings warpsettings app + else do + putStrLn "Starting web browser..." + putStrLn "Web app will auto-exit after a few minutes with no browsers (or press ctrl-c)" + hFlush stdout + Network.Wai.Handler.Launch.runHostPortUrl h p "" app + diff --git a/stack.yaml b/stack.yaml index da6f162c0..ba84166a6 100644 --- a/stack.yaml +++ b/stack.yaml @@ -9,6 +9,11 @@ packages: - hledger-ui - hledger-web - hledger-api +- location: + git: https://github.com/simonmichael/wai + commit: 96847d4cfc5894823f591746cac32416f941ed90 + subdirs: + - wai-handler-launch extra-deps: - file-embed-0.0.10