module Imm.Maildir where -- {{{ Imports import Imm.Mail() import Imm.Types import Imm.Util import Data.Time.Clock.POSIX import Network.BSD import System.Console.CmdArgs import System.Directory import System.FilePath import System.IO.Error import System.Random -- }}} init :: PortableFilePath -> IO Bool init directory = do dir <- resolve directory root <- try $ createDirectoryIfMissing True dir cur <- try . createDirectoryIfMissing True . (dir ) $ "cur" new <- try . createDirectoryIfMissing True . (dir ) $ "new" tmp <- try . createDirectoryIfMissing True . (dir ) $ "tmp" case (root, cur, new, tmp) of (Right _, Right _, Right _, Right _) -> do whenLoud . putStrLn . ("Maildir correctly created at: " ++) $ dir return True _ -> do whenNormal . putStrLn . ("Unable to initialize maildir at: " ++) $ dir return False add :: PortableFilePath -> Mail -> IO () add directory mail = do dir <- resolve directory fileName <- getUniqueName writeFile (dir "new" fileName) (show mail) getUniqueName :: IO String getUniqueName = do time <- getPOSIXTime >>= (return . show) hostname <- getHostName rand <- (getStdRandom $ randomR (1,100000) :: IO Int) >>= (return . show) return $ time ++ "." ++ rand ++ "." ++ hostname