packages feed

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 = ""
                          }
                   ]