neuron-1.0.0.0: src/app/Neuron/CLI/Open.hs
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RecordWildCards #-}
module Neuron.CLI.Open
( openLocallyGeneratedFile,
)
where
import Data.Some
import qualified Data.Text as T
import Development.Shake (Action, doesFileExist)
import Neuron.CLI.Types (OpenCommand (..))
import Neuron.Web.Generate.Route ()
import Relude
import Rib.Route (routeUrlRel)
import Rib.Shake (ribOutputDir)
import System.FilePath
import System.Info (os)
import System.Posix.Process
openLocallyGeneratedFile :: OpenCommand -> Action ()
openLocallyGeneratedFile OpenCommand {..} = do
let relHtmlPath = T.unpack $ routeUrlRel `foldSome` route
opener = if os == "darwin" then "open" else "xdg-open"
htmlPath <- fmap (</> relHtmlPath) ribOutputDir
doesFileExist htmlPath >>= \case
False -> do
fail "No generated HTML found. Try runing `neuron rib` first."
True -> do
liftIO $ executeFile opener True [htmlPath] Nothing