{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE LambdaCase #-}
module Main where
import Common
import Data.Bool (bool)
import System.Environment (getArgs)
import Data.Text (pack)
import Turtle
main :: IO ()
main = do
args <- getArgs
let (onClickHandler, icon) = (getOnClickHandler args, getIcon args)
sh $ do
processIsRunning "openvpn" >>= bool (printCommand icon "x") (printCommand icon "✓")
maybe (return ExitSuccess) (handleButton onClickHandler) =<< currentButton
getIcon :: [String] -> String
getIcon = \case
_ : icon : _ -> icon
_ -> ""
getOnClickHandler :: [String] -> Maybe OnClickHandlerPath
getOnClickHandler = \case
clickHandler : _ -> Just $ pack clickHandler
_ -> Nothing
printCommand :: String -> String -> Shell ()
printCommand icon out = liftIO . putStrLn $ icon <> out
handleButton :: MonadIO io => Maybe OnClickHandlerPath -> Button -> io ExitCode
handleButton handler LeftClick = maybe (pure ExitSuccess) (`shell` empty) handler
handleButton _ _ = pure ExitSuccess
type OnClickHandlerPath = Text