75 lines
2.7 KiB
Haskell
75 lines
2.7 KiB
Haskell
{-# LANGUAGE CPP #-}
|
|
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE FlexibleContexts #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE RankNTypes #-}
|
|
{-# OPTIONS_GHC -Wno-unused-record-wildcards #-}
|
|
{-# OPTIONS_GHC -Wno-unused-matches #-}
|
|
{-# LANGUAGE FlexibleInstances #-}
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
|
|
|
{-
|
|
This module contains the entrypoint for the brick application and nothing else.
|
|
|
|
-}
|
|
|
|
module GHCup.BrickMain where
|
|
|
|
import GHCup.Types
|
|
( Settings(noColor),
|
|
AppState(ghcupInfo, settings, keyBindings, loggerConfig), KeyBindings (..) )
|
|
import GHCup.Prelude.Logger ( logError )
|
|
import qualified GHCup.Brick.Actions as Actions
|
|
import qualified GHCup.Brick.Common as Common
|
|
import qualified GHCup.Brick.App as BrickApp
|
|
import qualified GHCup.Brick.Attributes as Attributes
|
|
import qualified GHCup.Brick.BrickState as AppState
|
|
import qualified GHCup.Brick.Widgets.Menus.Context as ContextMenu
|
|
import qualified GHCup.Brick.Widgets.SectionList as Navigation
|
|
import qualified GHCup.Brick.Widgets.Menus.AdvanceInstall as AdvanceInstall
|
|
import qualified Brick
|
|
|
|
import Control.Monad.Reader ( ReaderT(runReaderT) )
|
|
import Data.Functor ( ($>) )
|
|
import Data.IORef (writeIORef)
|
|
import Prelude hiding ( appendFile )
|
|
import System.Exit ( ExitCode(ExitFailure), exitWith )
|
|
|
|
import qualified Data.Text as T
|
|
|
|
|
|
|
|
brickMain :: AppState
|
|
-> IO ()
|
|
brickMain s = do
|
|
writeIORef Actions.settings' s
|
|
|
|
eAppData <- Actions.getAppData (Just $ ghcupInfo s)
|
|
case eAppData of
|
|
Right ad -> do
|
|
let initial_list = Actions.constructList ad Common.defaultAppSettings Nothing
|
|
current_element = Navigation.sectionListSelectedElement initial_list
|
|
exit_key = bQuit . keyBindings $ s
|
|
case current_element of
|
|
Nothing -> do
|
|
flip runReaderT s $ logError "Error building app state: empty ResultList"
|
|
exitWith $ ExitFailure 2
|
|
Just (_, e) ->
|
|
let initapp =
|
|
BrickApp.app
|
|
(Attributes.defaultAttributes $ noColor $ settings s)
|
|
(Attributes.dimAttributes $ noColor $ settings s)
|
|
initstate =
|
|
AppState.BrickState ad
|
|
Common.defaultAppSettings
|
|
initial_list
|
|
(ContextMenu.create e exit_key)
|
|
(AdvanceInstall.create (bQuit . keyBindings $ s ))
|
|
(keyBindings s)
|
|
Common.Navigation
|
|
in Brick.defaultMain initapp initstate
|
|
$> ()
|
|
Left e -> do
|
|
flip runReaderT s $ logError $ "Error building app state: " <> T.pack (show e)
|
|
exitWith $ ExitFailure 2
|