Implement getFileInfo to retrieve meta data
getFileInfo returns a record containing meta data about the given file, such as permissions, last modification time and time. We'll use this action to fill a neat status bar.
This commit is contained in:
parent
1de42395d4
commit
2ecde4fea5
3 changed files with 56 additions and 2 deletions
45
src/HCat/FileInfo.hs
Normal file
45
src/HCat/FileInfo.hs
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{-# LANGUAGE RecordWildCards #-}
|
||||
|
||||
-- | FileInfo defines a data type that captures important information about a
|
||||
-- file such as timestamps and permissions.
|
||||
module HCat.FileInfo (FileInfo, getFileInfo) where
|
||||
|
||||
import Data.Text (Text)
|
||||
import Data.Text qualified as T
|
||||
|
||||
import Data.Time.Clock (UTCTime)
|
||||
|
||||
import System.Directory (getFileSize, getModificationTime, getPermissions)
|
||||
import System.Directory qualified as Directory
|
||||
|
||||
data FileInfo = FileInfo
|
||||
{ filePath :: Text
|
||||
, fileSize :: Integer
|
||||
, fileMTime :: UTCTime
|
||||
, fileReadable :: Bool
|
||||
, fileWritable :: Bool
|
||||
, fileExecutable :: Bool
|
||||
}
|
||||
deriving (Show)
|
||||
|
||||
-- | @getFileInfo@ retrieves several meta data about the given file.
|
||||
--
|
||||
-- >>> info <- getFileInfo "src/HCat/FileInfo.hs"
|
||||
-- >>> filePath info
|
||||
-- "src/HCat/FileInfo.hs"
|
||||
-- >>> fileSize info > 0
|
||||
-- True
|
||||
-- >>> fileReadable info
|
||||
-- True
|
||||
-- >>> fileExecutable info
|
||||
-- False
|
||||
getFileInfo :: FilePath -> IO FileInfo
|
||||
getFileInfo path = do
|
||||
perms <- getPermissions path
|
||||
fileSize <- getFileSize path
|
||||
fileMTime <- getModificationTime path
|
||||
let fileReadable = Directory.readable perms
|
||||
fileWritable = Directory.writable perms
|
||||
fileExecutable = Directory.executable perms
|
||||
filePath = T.pack path
|
||||
return FileInfo{..}
|
||||
Loading…
Add table
Add a link
Reference in a new issue