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)))