module Wiki4e.Commands.Common ( Wiki4eConfig(..)
, wiki4e_initConfig
, readFileUTF8
, toLazy
, forceList )
where
import System.FilePath
import System.IO
import System.Directory
import qualified Data.ByteString.Lazy as STRL
import qualified Data.ByteString as STR
data Wiki4eConfig = Wiki4eConfig { w4confDirFetch :: FilePath,
w4confDirImg :: FilePath,
w4confDirSanitized :: FilePath }
getWiki4eDir :: IO FilePath
getWiki4eDir = getAppUserDataDirectory "wiki4e"
wiki4e_initConfig :: IO Wiki4eConfig
wiki4e_initConfig = do
tmpDir <- getWiki4eDir
let tmpDirFetch = tmpDir </> "wiki4e_fetch"
let tmpDirSanitize = tmpDir </> "wiki4e_sanitize"
let tmpDirImgs = tmpDir </> "wiki4e_images"
createDirectoryIfMissing True tmpDirFetch
createDirectoryIfMissing True tmpDirSanitize
createDirectoryIfMissing True tmpDirImgs
return (Wiki4eConfig tmpDirFetch tmpDirImgs tmpDirSanitize)
readFileUTF8 :: FilePath -> IO String
readFileUTF8 x = do
h <- openBinaryFile x ReadMode
hSetEncoding h utf8
c <- hGetContents h
forceList c `seq` hClose h
return c
toLazy :: STR.ByteString -> STRL.ByteString
toLazy xs = STRL.pack $ STR.unpack xs
forceList :: String -> String
forceList [] = []
forceList (x:xs) = forceList xs `seq` (x:xs)