module Imm.Util where
import Imm.Types
import Codec.Binary.UTF8.String
import Control.Monad.Error
import Data.Maybe
import Data.Time
import Data.Time.RFC2822
import Data.Time.RFC3339
import System.Console.CmdArgs
import System.Directory
import System.Environment.XDG.BaseDir
io :: MonadIO m => IO a -> m a
io = liftIO
logNormal, logVerbose :: String -> IO ()
logNormal = whenNormal . putStrLn
logVerbose = whenLoud . putStrLn
resolve :: (RefDirs -> a) -> IO a
resolve f = do
homeDir <- getHomeDirectory
tmpDir <- getTemporaryDirectory
configDir <- getUserConfigDir "imm"
dataDir <- getUserDataDir "imm"
return . f $ RefDirs homeDir tmpDir configDir dataDir
escapeFileName :: Char -> String
escapeFileName '/' = "|"
escapeFileName x = x:[]
parseDate :: String -> Maybe UTCTime
parseDate date = listToMaybe . map zonedTimeToUTC . catMaybes . map ((flip ($)) date) $ [readRFC2822, readRFC3339]
decodeIfNeeded :: String -> String
decodeIfNeeded text = case isUTF8Encoded text of
False -> text
_ -> decodeString text