restart UI
Browser behavior is not ideal; a new tab is opened on restart. Browsers won't let me redirect to a file:// so I cannot use the old tab.
This commit is contained in:
parent
e09b7198d4
commit
bad9b6761d
9 changed files with 56 additions and 34 deletions
|
@ -29,8 +29,8 @@ import Assistant.WebApp.Control
|
|||
import Assistant.WebApp.OtherRepos
|
||||
import Assistant.Types.ThreadedMonad
|
||||
import Utility.WebApp
|
||||
import Utility.FileMode
|
||||
import Utility.TempFile
|
||||
import Utility.FileMode
|
||||
import Git
|
||||
|
||||
import Yesod
|
||||
|
@ -84,36 +84,10 @@ webAppThread assistantdata urlrenderer noannex postfirstrun onstartup = thread $
|
|||
=<< runThreadState (threadState assistantdata) (fromRepo repoPath))
|
||||
go port webapp htmlshim urlfile = do
|
||||
let url = myUrl webapp port
|
||||
maybe noop (`writeFile` url) urlfile
|
||||
writeHtmlShim url htmlshim
|
||||
maybe noop (`writeFileProtected` url) urlfile
|
||||
writeHtmlShim "Starting webapp..." url htmlshim
|
||||
maybe noop (\a -> a url htmlshim) onstartup
|
||||
|
||||
{- Creates a html shim file that's used to redirect into the webapp,
|
||||
- to avoid exposing the secretToken when launching the web browser. -}
|
||||
writeHtmlShim :: String -> FilePath -> IO ()
|
||||
writeHtmlShim url file = viaTmp go file $ genHtmlShim url
|
||||
where
|
||||
go tmpfile content = do
|
||||
h <- openFile tmpfile WriteMode
|
||||
modifyFileMode tmpfile $ removeModes [groupReadMode, otherReadMode]
|
||||
hPutStr h content
|
||||
hClose h
|
||||
|
||||
{- TODO: generate this static file using Yesod. -}
|
||||
genHtmlShim :: String -> String
|
||||
genHtmlShim url = unlines
|
||||
[ "<html>"
|
||||
, "<head>"
|
||||
, "<title>Starting webapp...</title>"
|
||||
, "<meta http-equiv=\"refresh\" content=\"0; URL="++url++"\">"
|
||||
, "<body>"
|
||||
, "<p>"
|
||||
, "<a href=\"" ++ url ++ "\">Starting webapp...</a>"
|
||||
, "</p>"
|
||||
, "</body>"
|
||||
, "</html>"
|
||||
]
|
||||
|
||||
myUrl :: WebApp -> PortNumber -> Url
|
||||
myUrl webapp port = unpack $ yesodRender webapp urlbase HomeR []
|
||||
where
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
module Assistant.WebApp.Control where
|
||||
|
||||
import Assistant.WebApp.Common
|
||||
import Locations.UserConfig
|
||||
|
||||
import Control.Concurrent
|
||||
import System.Posix (getProcessID, signalProcess, sigTERM)
|
||||
|
@ -26,3 +27,16 @@ getShutdownConfirmedR = page "Shutdown" Nothing $ do
|
|||
threadDelay 2000000
|
||||
signalProcess sigTERM =<< getProcessID
|
||||
$(widgetFile "control/shutdownconfirmed")
|
||||
|
||||
{- Quite a hack, and doesn't redirect the browser window. -}
|
||||
getRestartR :: Handler RepHtml
|
||||
getRestartR = page "Restarting" Nothing $ do
|
||||
void $ liftIO $ forkIO $ do
|
||||
threadDelay 2000000
|
||||
program <- readProgramFile
|
||||
unlessM (boolSystem "sh" [Param "-c", Param $ restartcommand program]) $
|
||||
error "restart failed"
|
||||
$(widgetFile "control/restarting")
|
||||
where
|
||||
restartcommand program = program ++ " assistant --stop; " ++
|
||||
program ++ " webapp"
|
||||
|
|
|
@ -125,9 +125,7 @@ openFileBrowser = do
|
|||
boolSystem cmd [Param path]
|
||||
return True
|
||||
, do
|
||||
clearUltDest
|
||||
setUltDest $ "file://" ++ path
|
||||
void $ redirectUltDest HomeR
|
||||
void $ redirect $ "file://" ++ path
|
||||
return False
|
||||
)
|
||||
where
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
/shutdown ShutdownR GET
|
||||
/shutdown/confirm ShutdownConfirmedR GET
|
||||
/restart RestartR GET
|
||||
|
||||
/config ConfigurationR GET
|
||||
/config/repository RepositoriesR GET
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue