packages feed

hid-examples-0.3: du/FileCount.hs

{-# LANGUAGE RecordWildCards #-}

module FileCount (fileCount) where

import Control.Monad.RWS
import System.FilePath
import System.Directory
import System.PosixCompat.Files

import TraverseDir
import App

fileCount :: MyApp Int ()
fileCount = do
    AppState {..} <- get
    fs <- liftIO $ getFileStatus curPath
    when (isDirectory fs) $ do
      AppConfig {..} <- ask
      when (curDepth <= maxDepth) $ traverseDirectoryWith fileCount
      files <- liftIO $ listDirectory curPath
      tell [(curPath, length $ filterFiles ext files)]
  where
    filterFiles Nothing = id
    filterFiles (Just ext) = filter (ext `isExtensionOf`)