module Clckwrks.Media.Page.Preview where
import Control.Monad.Reader
import Control.Monad.Trans
import Clckwrks
import Clckwrks.IOThread
import Clckwrks.Media.Acid
import Clckwrks.Media.Monad
import Clckwrks.Media.Types
import Happstack.Server
previewMedium :: MediumId -> MediaM Response
previewMedium mid =
do size <- lookSize <|> pure Tall
mFp <- previewMediumFilePath mid size
case mFp of
Nothing -> notFound $ toResponse $ "Invalid MediumId " ++ show (unMediumId mid)
(Just fp) -> serveFile (guessContentTypeM mimeTypes) fp
lookSize :: MediaM PreviewSize
lookSize =
do txt <- look "size"
case txt of
"tall" -> return Tall
"grande" -> return Grande
"venti" -> return Venti
_ -> mzero
previewMediumFilePath :: MediumId -> PreviewSize -> MediaM (Maybe FilePath)
previewMediumFilePath mediumId size =
do filterChan <- mediaIOThread <$> ask
res <- query (GetMediumById mediumId)
case res of
Nothing -> return Nothing
(Just medium) -> Just <$> (liftIO (ioRequest filterChan (medium, size)))