module Imm.Maildir where -- {{{ Imports import Imm.Mail import Imm.Types import Imm.Util import Control.Error --import Control.Exception import Data.Functor import qualified Data.Text.Lazy.IO as T import Data.Time.Clock.POSIX import Network.BSD import System.Directory import System.FilePath --import System.IO.Error (ioeGetErrorString) import System.Random -- }}} init :: PortableFilePath -> EitherT String IO () init directory = do dir <- io $ resolve directory tryIO $ createDirectoryIfMissing True dir tryIO $ createDirectoryIfMissing True (dir "cur") tryIO $ createDirectoryIfMissing True (dir "new") tryIO $ createDirectoryIfMissing True (dir "tmp") io . logVerbose $ "Maildir correctly created at: " ++ dir add :: PortableFilePath -> Mail -> Script () add directory mail = do dir <- io $ resolve directory fileName <- io getUniqueName tryIO $ T.writeFile (dir "new" fileName) (toText mail) getUniqueName :: IO String getUniqueName = do time <- show <$> getPOSIXTime hostname <- getHostName rand <- show <$> (getStdRandom $ randomR (1,100000) :: IO Int) return . concat $ [time, ".", rand, ".", hostname]