module Imm.Maildir where
import Imm.Mail
import Imm.Types
import Imm.Util
import Control.Error
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.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]