module Gamgine.System where
import System.Environment (getProgName, getEnv)
import System.Directory (createDirectoryIfMissing, getAppUserDataDirectory, getDirectoryContents)
import Data.List (takeWhile)
import Data.Time.Clock (getCurrentTime, utctDay)
import Data.Time.Calendar (toGregorian)
import Control.Exception (try)
import Control.Monad (filterM)
normalizedProgName :: IO (String)
normalizedProgName = do
pn <- getProgName
return $ takeWhile (/= '.') pn
getCurrentDate :: IO (Integer,Int,Int)
getCurrentDate = getCurrentTime >>= return . toGregorian . utctDay
getEnvOrDefault :: String -> String -> IO String
getEnvOrDefault envVar defaultValue = do
result <- try $ getEnv envVar
case result of
Right value -> return value
Left (_ :: IOError) -> return defaultValue
appDirectory = normalizedProgName >>= \pn -> getAppUserDataDirectory pn
getAndCreateAppDir :: IO (FilePath)
getAndCreateAppDir = do
dir <- appDirectory
createDirectoryIfMissing True dir
return dir
getDirContents :: FilePath -> IO [FilePath]
getDirContents dir = do
entries <- getDirectoryContents dir
filterM notDots entries
where
notDots entry = return . not $ "." == entry || ".." == entry