57 lines
2.0 KiB
Haskell
57 lines
2.0 KiB
Haskell
module Network.Minio.ListOps where
|
|
|
|
import qualified Data.Conduit as C
|
|
import qualified Data.Conduit.List as CL
|
|
|
|
import Lib.Prelude
|
|
|
|
import Network.Minio.Data
|
|
import Network.Minio.S3API
|
|
|
|
-- | List objects in a bucket matching the given prefix. If recurse is
|
|
-- set to True objects matching prefix are recursively listed.
|
|
listObjects :: Bucket -> Maybe Text -> Bool -> C.Producer Minio ObjectInfo
|
|
listObjects bucket prefix recurse = loop Nothing
|
|
where
|
|
loop :: Maybe Text -> C.Producer Minio ObjectInfo
|
|
loop nextToken = do
|
|
let
|
|
delimiter = bool (Just "/") Nothing recurse
|
|
|
|
res <- lift $ listObjects' bucket prefix nextToken delimiter
|
|
CL.sourceList $ lorObjects res
|
|
when (lorHasMore res) $
|
|
loop (lorNextToken res)
|
|
|
|
-- | List incomplete uploads in a bucket matching the given prefix. If
|
|
-- recurse is set to True incomplete uploads for the given prefix are
|
|
-- recursively listed.
|
|
listIncompleteUploads :: Bucket -> Maybe Text -> Bool
|
|
-> C.Producer Minio UploadInfo
|
|
listIncompleteUploads bucket prefix recurse = loop Nothing Nothing
|
|
where
|
|
loop :: Maybe Text -> Maybe Text -> C.Producer Minio UploadInfo
|
|
loop nextKeyMarker nextUploadIdMarker = do
|
|
let
|
|
delimiter = bool (Just "/") Nothing recurse
|
|
|
|
res <- lift $ listIncompleteUploads' bucket prefix delimiter
|
|
nextKeyMarker nextUploadIdMarker
|
|
CL.sourceList $ lurUploads res
|
|
when (lurHasMore res) $
|
|
loop nextKeyMarker nextUploadIdMarker
|
|
|
|
-- | List object parts of an ongoing multipart upload for given
|
|
-- bucket, object and uploadId.
|
|
listIncompleteParts :: Bucket -> Object -> UploadId
|
|
-> C.Producer Minio ListPartInfo
|
|
listIncompleteParts bucket object uploadId = loop Nothing
|
|
where
|
|
loop :: Maybe Text -> C.Producer Minio ListPartInfo
|
|
loop nextPartMarker = do
|
|
res <- lift $ listIncompleteParts' bucket object uploadId Nothing
|
|
nextPartMarker
|
|
CL.sourceList $ lprParts res
|
|
when (lprHasMore res) $
|
|
loop (show <$> lprNextPart res)
|