packages feed

pgdl-6.8: src/Log.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE LambdaCase #-}

module Log where

import Video

import Control.Applicative 
import Control.Monad
import Data.Binary
import Data.Either
import System.Directory
import System.FilePath

import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.ByteString.Lazy as B

instance Binary T.Text where
    put = put . T.encodeUtf8
    get = T.decodeUtf8 <$> get

instance Binary Video where
    put vid = put $ vidName vid
    get = get >>=  (\name ->
        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
    doesFileExist absdir >>= \case
        True -> do
            dat <- B.readFile (hdir </> logname)
            let res = decodeOrFail dat
            case res of
                Right (_, _, vs) -> return vs
                _                -> return dlnVid
        False -> return dlnVid
    where dlnVid = [Video { vidName = "Downloading..."
                          , vidLink = ""
                          , vidDate = ""
                          , vidSize = ""
                          }
                   ]