From a3d5295ee745ab851c28d0a53147cbad65a7805f Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Fri, 3 Oct 2025 15:48:49 +0530 Subject: Refactor event module with actions --- lib/Daffm/Action/Core.hs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lib/Daffm/Action/Core.hs (limited to 'lib/Daffm/Action/Core.hs') diff --git a/lib/Daffm/Action/Core.hs b/lib/Daffm/Action/Core.hs new file mode 100644 index 0000000..48792c4 --- /dev/null +++ b/lib/Daffm/Action/Core.hs @@ -0,0 +1,45 @@ +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} + +{-# HLINT ignore "Use for_" #-} +module Daffm.Action.Core where + +import Brick (suspendAndResume') +import qualified Brick.Widgets.List as L +import Control.Monad.State (MonadIO (liftIO), MonadState, get, gets, put) +import Daffm.State (loadDirInAppState) +import Daffm.Types (AppEvent, AppState (..), FileInfo (..), FileType (..)) +import Data.Vector ((!?)) +import System.FilePath (takeDirectory) +import System.Process (callProcess) + +modifyM :: (MonadState s m) => (s -> m s) -> m () +modifyM f = get >>= f >>= put + +reloadDir :: AppEvent () +reloadDir = do + AppState {stateCwd, stateParentDir} <- get + modifyM (liftIO . loadDirInAppState stateCwd stateParentDir) + +goBackToParentDir :: AppEvent () +goBackToParentDir = do + dir <- gets stateParentDir + modifyM (liftIO . loadDirInAppState dir (takeDirectory dir)) + +openSelectedFile :: AppEvent () +openSelectedFile = do + appState <- get + let indexM = L.listSelected $ stateFiles appState + let files = L.listElements $ stateFiles appState + case indexM >>= (files !?) of + Just file -> openFile appState file + Nothing -> pure () + pure () + +openFile :: AppState -> FileInfo -> AppEvent () +openFile appState (FileInfo {filePath, fileType = Directory}) = do + modifyM (liftIO . loadDirInAppState filePath (stateCwd appState)) +openFile _appState (FileInfo {filePath, fileType}) = do + suspendAndResume' $ do + putStrLn $ "Opening " <> show fileType <> ": " <> filePath + callProcess "nvim" [filePath] + pure () -- cgit v1.3.1