module Clckwrks.Media.Page.GetMedium where
import Control.Applicative ((<$>))
import Control.Monad.Reader (ask)
import Clckwrks (query)
import Clckwrks.Media.Acid (GetMediumById(..))
import Clckwrks.Media.Types (MediumId(..), Medium(..), mediumContentType)
import Clckwrks.Media.Monad (MediaM, MediaConfig(..))
import Happstack.Server (Response, asContentType, notFound, serveFile, toResponse)
import System.FilePath ((</>))
getMedium :: MediumId -> MediaM Response
getMedium mid =
do mMedium <- query (GetMediumById mid)
case mMedium of
Nothing -> do notFound $ toResponse $ "Invalid medium id " ++ show (unMediumId mid)
(Just medium) ->
do md <- mediaDirectory <$> ask
serveFile (asContentType (mediumContentType $ mediumKind medium)) (md </> (mediumPath medium))