module URL.Request where
import Data.Map ( Map )
import Data.List ( delete )
import Foreign.C.Types ( CInt )
data UrlRequest = UrlRequest { url :: String
, file :: FilePath
, cachable :: Cachable
, priority :: Priority }
data Cachable = Cachable | Uncachable | MaxAge !CInt
deriving (Show, Eq)
data UrlState = UrlState { inProgress :: Map String ( FilePath
, [FilePath]
, Cachable )
, waitToStart :: Q String
, pipeLength :: Int
, randomJunk :: String }
data Q a = Q [a] [a]
readQ :: Q a -> Maybe (a, Q a)
readQ (Q (x:xs) ys) = Just (x, Q xs ys)
readQ (Q [] ys) = do x:xs <- Just $ reverse ys
Just (x, Q xs [])
insertQ :: a -> Q a -> Q a
insertQ y (Q xs ys) = Q xs (y:ys)
pushQ :: a -> Q a -> Q a
pushQ x (Q xs ys) = Q (x:xs) ys
deleteQ :: Eq a => a -> Q a -> Q a
deleteQ x (Q xs ys) = Q (delete x xs) (delete x ys)
elemQ :: Eq a => a -> Q a -> Bool
elemQ x (Q xs ys) = x `elem` xs || x `elem` ys
emptyQ :: Q a
emptyQ = Q [] []
nullQ :: Q a -> Bool
nullQ (Q [] []) = True
nullQ _ = False
data Priority = High | Low deriving Eq
data ConnectionError = CouldNotResolveHost |
CouldNotConnectToServer |
OperationTimeout
deriving (Eq, Read, Show)