Skip to content

Commit f7d9cc1

Browse files
committed
chore(Storage): Simplify list implementation
1 parent 6a156da commit f7d9cc1

File tree

10 files changed

+693
-386
lines changed

10 files changed

+693
-386
lines changed

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/AWSS3StoragePlugin+AsyncClientBehavior.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,15 @@ extension AWSS3StoragePlugin {
122122
options: StorageListRequest.Options? = nil
123123
) async throws -> StorageListResult {
124124
let options = options ?? StorageListRequest.Options()
125-
let request = StorageListRequest(options: options)
126-
let operation = AWSS3StorageListOperation(request,
127-
storageConfiguration: storageConfiguration,
128-
storageService: storageService,
129-
authService: authService)
130-
let taskAdapter = AmplifyOperationTaskAdapter(operation: operation)
131-
queue.addOperation(operation)
132-
133-
return try await taskAdapter.value
125+
let prefixResolver = storageConfiguration.prefixResolver ?? StorageAccessLevelAwarePrefixResolver(authService: authService)
126+
let prefix = try await prefixResolver.resolvePrefix(for: options.accessLevel, targetIdentityId: options.targetIdentityId)
127+
let result = try await storageService.list(prefix: prefix, options: options)
128+
129+
let channel = HubChannel(from: categoryType)
130+
let payload = HubPayload(eventName: HubPayload.EventName.Storage.list, context: options, data: result)
131+
Amplify.Hub.dispatch(to: channel, payload: payload)
132+
133+
return result
134134
}
135135

136136
public func handleBackgroundEvents(identifier: String) async -> Bool {

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Operation/AWSS3StorageListOperation.swift

Lines changed: 0 additions & 98 deletions
This file was deleted.

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+ListBehavior.swift

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,45 @@
77

88
import Foundation
99
import Amplify
10+
import AWSS3
11+
import ClientRuntime
12+
import AWSClientRuntime
1013

1114
extension AWSS3StorageService {
1215

1316
func list(prefix: String,
14-
path: String?,
15-
onEvent: @escaping StorageServiceListEventHandler) {
16-
let request = AWSS3ListObjectsV2Request(bucket: bucket, prefix: prefix, path: path)
17-
awsS3.listObjectsV2(request) { result in
18-
switch result {
19-
case .success(let list):
20-
onEvent(.completed(list))
21-
case .failure(let error):
22-
onEvent(.failed(error))
17+
options: StorageListRequest.Options) async throws -> StorageListResult {
18+
if let error = StorageRequestUtils.validateTargetIdentityId(options.targetIdentityId,
19+
accessLevel: options.accessLevel) {
20+
throw error
21+
}
22+
if let error = StorageRequestUtils.validatePath(options.path) {
23+
throw error
24+
}
25+
26+
let finalPrefix: String
27+
if let path = options.path {
28+
finalPrefix = prefix + path
29+
} else {
30+
finalPrefix = prefix
31+
}
32+
let input = ListObjectsV2Input(bucket: bucket,
33+
continuationToken: nil,
34+
delimiter: nil,
35+
maxKeys: 1_000,
36+
prefix: finalPrefix,
37+
startAfter: nil)
38+
do {
39+
let response = try await client.listObjectsV2(input: input)
40+
let contents: S3BucketContents = response.contents ?? []
41+
let items = try contents.map {
42+
try StorageListResult.Item(s3Object: $0, prefix: prefix)
2343
}
44+
return StorageListResult(items: items)
45+
} catch let error as SdkError<ListObjectsV2OutputError> {
46+
throw error.storageError
47+
} catch {
48+
throw StorageError(error: error)
2449
}
2550
}
2651

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import AWSS3
1111
import Amplify
1212
import AWSPluginsCore
1313

14+
/// - Tag: AWSS3StorageService
1415
class AWSS3StorageService: AWSS3StorageServiceBehaviour, StorageServiceProxy {
1516

1617
// resettable values
@@ -21,8 +22,13 @@ class AWSS3StorageService: AWSS3StorageServiceBehaviour, StorageServiceProxy {
2122
var region: String!
2223
var bucket: String!
2324

25+
/// - Tag: AWSS3StorageService.s3Client
26+
@available(*, deprecated, renamed: "client")
2427
var s3Client: S3Client!
2528

29+
/// - Tag: AWSS3StorageService.client
30+
var client: S3ClientProtocol
31+
2632
let storageConfiguration: StorageConfiguration
2733
let sessionConfiguration: URLSessionConfiguration
2834
var delegateQueue: OperationQueue?
@@ -106,6 +112,7 @@ class AWSS3StorageService: AWSS3StorageServiceBehaviour, StorageServiceProxy {
106112

107113
self.logger = logger
108114
self.s3Client = s3Client
115+
self.client = s3Client
109116
self.preSignedURLBuilder = preSignedURLBuilder
110117
self.awsS3 = awsS3
111118
self.bucket = bucket

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageServiceBehaviour.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ protocol AWSS3StorageServiceBehaviour {
5959
onEvent: @escaping StorageServiceMultiPartUploadEventHandler)
6060

6161
func list(prefix: String,
62-
path: String?,
63-
onEvent: @escaping StorageServiceListEventHandler)
62+
options: StorageListRequest.Options) async throws -> StorageListResult
6463

6564
func delete(serviceKey: String,
6665
onEvent: @escaping StorageServiceDeleteEventHandler)

0 commit comments

Comments
 (0)