diff --git a/src/Handler/Submission.hs b/src/Handler/Submission.hs index b88f26828..ca86ac978 100644 --- a/src/Handler/Submission.hs +++ b/src/Handler/Submission.hs @@ -18,6 +18,8 @@ import Handler.Utils import Network.Mime +import Control.Monad.Trans.Maybe + import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import qualified Data.CaseInsensitive as CI @@ -52,7 +54,7 @@ getSubmissionDownloadSingleR cID path = do isRating <- maybe False (== submissionID) <$> isRatingFile path case isRating of True -> do - file <- (ratingFile cID' =<<) <$> getRating submissionID + file <- runMaybeT $ lift . ratingFile cID' =<< MaybeT (getRating submissionID) maybe notFound (return . toTypedContent . Text.decodeUtf8) $ fileContent =<< file False -> do results <- E.select . E.from $ \(sf `E.InnerJoin` f) -> E.distinctOnOrderBy [E.asc $ f E.^. FileTitle] $ do @@ -89,7 +91,7 @@ getSubmissionDownloadArchiveR path = do E.orderBy [E.desc $ sf E.^. SubmissionFileIsUpdate] return f fileEntitySource' :: Source (YesodDB UniWorX) File - fileEntitySource' = fileEntitySource =$= Conduit.map entityVal >> maybe (return ()) yield (ratingFile cID rating') + fileEntitySource' = fileEntitySource =$= Conduit.map entityVal >> yieldM (ratingFile cID rating') info = ZipInfo { zipComment = Text.encodeUtf8 . tshow $ ciphertext (cUUID :: CryptoUUIDSubmission) } fileEntitySource' =$= produceZip info =$= Conduit.map toFlushBuilder diff --git a/src/Handler/Utils/Zip/Rating.hs b/src/Handler/Utils/Zip/Rating.hs index 0924755e7..cd6260db6 100644 --- a/src/Handler/Utils/Zip/Rating.hs +++ b/src/Handler/Utils/Zip/Rating.hs @@ -142,9 +142,9 @@ formatRating cID Rating{ ratingValues = Rating'{..}, ..} = let ] in Lazy.Text.encodeUtf8 . (<> "\n") $ displayT doc -ratingFile :: CryptoFileNameSubmission -> Rating -> Maybe File +ratingFile :: MonadIO m => CryptoFileNameSubmission -> Rating -> m File ratingFile cID rating@(Rating{ ratingValues = Rating'{..}, .. }) = do - fileModified <- ratingTime + fileModified <- maybe (liftIO getCurrentTime) return ratingTime let fileTitle = "bewertung_" <> (Text.unpack . CI.foldedCase $ ciphertext (cID :: CryptoFileNameSubmission)) <.> "txt" fileContent = Just . Lazy.ByteString.toStrict $ formatRating cID rating