module Main where
import Control.Concurrent
import Control.Exception
import Control.Lens
import Control.Monad
import Data.Default.Class
import Graphics.Vty
import Client.EventLoop
import Client.Configuration
import Client.CommandArguments
import Client.State
withVty :: (Vty -> IO a) -> IO a
withVty = bracket (mkVty def) shutdown
main :: IO ()
main =
do args <- getCommandArguments
cfg <- loadConfiguration (view cmdArgConfigFile args)
withVty $ \vty ->
runInUnboundThread $
do st <- initialClientState cfg vty
st' <- addInitialNetworks (view cmdArgInitialNetworks args) st
eventLoop st'
addInitialNetworks :: [NetworkName] -> ClientState -> IO ClientState
addInitialNetworks networks st =
case networks of
[] -> return st
network:_ ->
do st' <- foldM (flip addConnection) st networks
return (set clientFocus (NetworkFocus network) st')