module Imm.Util where

-- {{{ Imports
import Imm.Types

import Codec.Binary.UTF8.String

import Data.Maybe
import Data.Time
import Data.Time.RFC2822
import Data.Time.RFC3339

--import Network.URI

import System.Directory
import System.Environment.XDG.BaseDir
-- }}}

resolve :: (RefDirs -> a) -> IO a
resolve f = do
    homeDir   <- getHomeDirectory
    tmpDir    <- getTemporaryDirectory
    configDir <- getUserConfigDir "hbro"
    dataDir   <- getUserDataDir   "hbro"
    
    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