pgdl-6.3: src/Log.hs
{-# LANGUAGE OverloadedStrings #-}
module Log where
import Video
import Data.Binary
import System.Directory
import System.FilePath
import Control.Applicative ((<$>))
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import Data.Binary
import qualified Data.ByteString.Lazy as B
import Control.Monad
import Data.Either
instance Binary T.Text where
put = put . T.encodeUtf8
get = T.decodeUtf8 <$> get
instance Binary Video where
put vid = do
put $ vidName vid
get = do
name <- get
return Video { vidName = name
, vidLink = ""
, vidDate = ""
, vidSize = ""
}
logname = ".pgdl.cache"
writeVid :: [Video] -> IO ()
writeVid vs = do
hdir <- getHomeDirectory
B.writeFile (hdir </> logname) $ encode vs
readVid :: IO [Video]
readVid = do
hdir <- getHomeDirectory
let absdir = hdir </> logname
fex <- doesFileExist absdir
case fex of
True -> do
dat <- B.readFile (hdir </> logname)
let res = decodeOrFail dat
case res of
Right (_, _, vs) -> return vs
_ -> return dlnVid
False -> do
return dlnVid
where dlnVid = [Video { vidName = "Downloading..."
, vidLink = ""
, vidDate = ""
, vidSize = ""
}
]