packages feed

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