From d4998d22468da0167f2fedc4e01edc095f1618d9 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Fri, 13 Dec 2013 06:45:40 +0200 Subject: [PATCH] Temp file upload changes in wai-extra 2.0.1 #630 --- yesod-core/Yesod/Core/Handler.hs | 24 ++++++++++++++++-------- yesod-core/Yesod/Core/Types.hs | 4 ++++ yesod-core/yesod-core.cabal | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/yesod-core/Yesod/Core/Handler.hs b/yesod-core/Yesod/Core/Handler.hs index 7c24adc8..3581dbc8 100644 --- a/yesod-core/Yesod/Core/Handler.hs +++ b/yesod-core/Yesod/Core/Handler.hs @@ -152,7 +152,7 @@ import Control.Monad (liftM) import qualified Control.Monad.Trans.Writer as Writer import Control.Monad.IO.Class (MonadIO, liftIO) -import Control.Monad.Trans.Resource (MonadResource, liftResourceT) +import Control.Monad.Trans.Resource (MonadResource, liftResourceT, InternalState) import qualified Network.HTTP.Types as H import qualified Network.Wai as W @@ -183,7 +183,7 @@ import Yesod.Core.Content (ToTypedContent (..), simpleConte import Yesod.Core.Internal.Util (formatRFC1123) import Text.Blaze.Html (preEscapedToMarkup, toHtml) -import Control.Monad.Trans.Resource (ResourceT, runResourceT, withInternalState) +import Control.Monad.Trans.Resource (ResourceT, runResourceT, withInternalState, getInternalState, liftResourceT) import Data.Dynamic (fromDynamic, toDyn) import qualified Data.IORef.Lifted as I import Data.Maybe (listToMaybe) @@ -233,7 +233,10 @@ runRequestBody = do Just rbc -> return rbc Nothing -> do rr <- waiRequest -#if MIN_VERSION_wai(2, 0, 0) +#if MIN_VERSION_wai_extra(2, 0, 1) + internalState <- liftResourceT getInternalState + rbc <- liftIO $ rbHelper upload rr internalState +#elif MIN_VERSION_wai(2, 0, 0) rbc <- liftIO $ rbHelper upload rr #else rbc <- liftResourceT $ rbHelper upload rr @@ -242,15 +245,20 @@ runRequestBody = do return rbc #if MIN_VERSION_wai(2, 0, 0) -rbHelper :: FileUpload -> W.Request -> IO RequestBodyContents +rbHelper :: FileUpload -> W.Request -> InternalState -> IO RequestBodyContents +rbHelper upload req internalState = #else rbHelper :: FileUpload -> W.Request -> ResourceT IO RequestBodyContents +rbHelper upload req = #endif -rbHelper upload = case upload of - FileUploadMemory s -> rbHelper' s mkFileInfoLBS - FileUploadDisk s -> rbHelper' s mkFileInfoFile - FileUploadSource s -> rbHelper' s mkFileInfoSource + FileUploadMemory s -> rbHelper' s mkFileInfoLBS req +#if MIN_VERSION_wai_extra(2, 0, 1) + FileUploadDisk s -> rbHelper' (s internalState) mkFileInfoFile req +#else + FileUploadDisk s -> rbHelper' s mkFileInfoFile req +#endif + FileUploadSource s -> rbHelper' s mkFileInfoSource req rbHelper' :: NWP.BackEnd x -> (Text -> Text -> x -> FileInfo) diff --git a/yesod-core/Yesod/Core/Types.hs b/yesod-core/Yesod/Core/Types.hs index fa20c621..de09f78a 100644 --- a/yesod-core/Yesod/Core/Types.hs +++ b/yesod-core/Yesod/Core/Types.hs @@ -134,7 +134,11 @@ data FileInfo = FileInfo } data FileUpload = FileUploadMemory !(NWP.BackEnd L.ByteString) +#if MIN_VERSION_wai_extra(2, 0, 1) + | FileUploadDisk !(InternalState -> NWP.BackEnd FilePath) +#else | FileUploadDisk !(NWP.BackEnd FilePath) +#endif | FileUploadSource !(NWP.BackEnd (Source (ResourceT IO) ByteString)) -- | How to determine the root of the application for constructing URLs. diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index 98993d21..041f7d78 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -1,5 +1,5 @@ name: yesod-core -version: 1.2.6.1 +version: 1.2.6.2 license: MIT license-file: LICENSE author: Michael Snoyman