diff --git a/src/Handler/Submission.hs b/src/Handler/Submission.hs index 8d0e842a1..570442a75 100644 --- a/src/Handler/Submission.hs +++ b/src/Handler/Submission.hs @@ -76,19 +76,18 @@ getSubmissionDownloadArchiveR path = do cIDKey <- getsYesod appCryptoIDKey submissionID <- Base32.decrypt cIDKey cID cUUID <- UUID.encrypt cIDKey submissionID - runDB $ do - rating <- getRating submissionID + respondSourceDB "application/zip" $ do + rating <- lift $ getRating submissionID case rating of - Nothing -> notFound + Nothing -> lift notFound Just rating' -> do - sqlBackend <- ask let fileEntitySource = E.selectSource . E.from $ \(sf `E.InnerJoin` f) -> E.distinctOnOrderBy [E.asc $ f E.^. FileTitle] $ do E.on (f E.^. FileId E.==. sf E.^. SubmissionFileFileId) return f - fileEntitySource' :: Source (ResourceT IO) File - fileEntitySource' = runReaderC sqlBackend fileEntitySource =$= Conduit.map entityVal >> maybe (return ()) yield (ratingFile cID rating') + fileEntitySource' :: Source (YesodDB UniWorX) File + fileEntitySource' = fileEntitySource =$= Conduit.map entityVal >> maybe (return ()) yield (ratingFile cID rating') info = ZipInfo { zipComment = Text.encodeUtf8 . tshow $ ciphertext (cUUID :: CryptoUUIDSubmission) } - return . TypedContent "application/zip" . toContent $ fileEntitySource' =$= produceZip info + fileEntitySource' =$= produceZip info =$= Conduit.map toFlushBuilder getSubmissionR, postSubmissionR :: CryptoUUIDSubmission -> Handler Html getSubmissionR = postSubmissionR