Skip to content

Commit cbcf7c2

Browse files
authored
Merge pull request #1721 from morganchen12/assign
Fix assign default on fetcherCompletion
2 parents 9fc8659 + 76a37bc commit cbcf7c2

File tree

8 files changed

+144
-133
lines changed

8 files changed

+144
-133
lines changed

Example/Storage/Tests/Unit/FIRStoragePathTests.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,10 @@ - (void)testchildToRoot {
109109

110110
- (void)testChildByAppendingNilToRoot {
111111
FIRStoragePath *path = [[FIRStoragePath alloc] initWithBucket:@"bucket" object:nil];
112+
#pragma clang diagnostic push
113+
#pragma clang diagnostic ignored "-Wnonnull"
112114
FIRStoragePath *childPath = [path child:nil];
115+
#pragma clang diagnostic pop
113116
XCTAssertEqualObjects([childPath stringValue], @"gs://bucket/");
114117
}
115118

Firebase/Storage/FIRStorageDeleteTask.m

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,21 @@ - (void)enqueue {
5151

5252
fetcher.comment = @"DeleteTask";
5353

54-
#pragma clang diagnostic push
55-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
54+
__weak FIRStorageDeleteTask *weakSelf = self;
5655
_fetcherCompletion = ^(NSData *_Nullable data, NSError *_Nullable error) {
57-
if (!self.error) {
58-
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
59-
}
60-
if (callback) {
61-
callback(self.error);
56+
__strong FIRStorageDeleteTask *strongSelf = weakSelf;
57+
if (strongSelf) {
58+
if (!strongSelf.error) {
59+
strongSelf.error =
60+
[FIRStorageErrors errorWithServerError:error reference:strongSelf.reference];
61+
}
62+
if (callback) {
63+
callback(strongSelf.error);
64+
}
65+
strongSelf->_fetcherCompletion = nil;
6266
}
63-
self->_fetcherCompletion = nil;
6467
};
65-
#pragma clang diangostic pop
6668

67-
__weak FIRStorageDeleteTask *weakSelf = self;
6869
[fetcher beginFetchWithCompletionHandler:^(NSData *_Nullable data, NSError *_Nullable error) {
6970
weakSelf.fetcherCompletion(data, error);
7071
}];

Firebase/Storage/FIRStorageDownloadTask.m

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -104,41 +104,45 @@ - (void)enqueueWithData:(nullable NSData *)resumeData {
104104

105105
_fetcher = fetcher;
106106

107-
#pragma clang diagnostic push
108-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
109107
_fetcherCompletion = ^(NSData *data, NSError *error) {
110-
// Fire last progress updates
111-
[self fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:self.snapshot];
112-
113-
// Handle potential issues with download
114-
if (error) {
115-
self.state = FIRStorageTaskStateFailed;
116-
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
117-
[self fireHandlersForStatus:FIRStorageTaskStatusFailure snapshot:self.snapshot];
118-
[self removeAllObservers];
119-
self->_fetcherCompletion = nil;
120-
return;
108+
__strong FIRStorageDownloadTask *strongSelf = weakSelf;
109+
if (strongSelf) {
110+
[strongSelf onFetchCompletionWithData:data error:error];
121111
}
122-
123-
// Download completed successfully, fire completion callbacks
124-
self.state = FIRStorageTaskStateSuccess;
125-
126-
if (data) {
127-
self->_downloadData = data;
128-
}
129-
130-
[self fireHandlersForStatus:FIRStorageTaskStatusSuccess snapshot:self.snapshot];
131-
[self removeAllObservers];
132-
self->_fetcherCompletion = nil;
133112
};
134-
#pragma clang diagnostic pop
135113

136114
self.state = FIRStorageTaskStateRunning;
137115
[self.fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
138116
weakSelf.fetcherCompletion(data, error);
139117
}];
140118
}
141119

120+
- (void)onFetchCompletionWithData:(NSData *)data error:(NSError *)error {
121+
// Fire last progress updates
122+
[self fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:self.snapshot];
123+
124+
// Handle potential issues with download
125+
if (error) {
126+
self.state = FIRStorageTaskStateFailed;
127+
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
128+
[self fireHandlersForStatus:FIRStorageTaskStatusFailure snapshot:self.snapshot];
129+
[self removeAllObservers];
130+
self->_fetcherCompletion = nil;
131+
return;
132+
}
133+
134+
// Download completed successfully, fire completion callbacks
135+
self.state = FIRStorageTaskStateSuccess;
136+
137+
if (data) {
138+
self->_downloadData = data;
139+
}
140+
141+
[self fireHandlersForStatus:FIRStorageTaskStatusSuccess snapshot:self.snapshot];
142+
[self removeAllObservers];
143+
self->_fetcherCompletion = nil;
144+
}
145+
142146
#pragma mark - Download Management
143147

144148
- (void)cancel {

Firebase/Storage/FIRStorageGetDownloadURLTask.m

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -78,37 +78,38 @@ - (void)enqueue {
7878
_fetcher = fetcher;
7979
fetcher.comment = @"GetDownloadURLTask";
8080

81-
#pragma clang diagnostic push
82-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
81+
__weak FIRStorageGetDownloadURLTask *weakSelf = self;
8382
_fetcherCompletion = ^(NSData *data, NSError *error) {
84-
NSURL *downloadURL;
85-
if (error) {
86-
if (!self.error) {
87-
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
88-
}
89-
} else {
90-
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
91-
if (responseDictionary != nil) {
92-
downloadURL =
93-
[FIRStorageGetDownloadURLTask downloadURLFromMetadataDictionary:responseDictionary];
94-
if (!downloadURL) {
95-
self.error =
96-
[FIRStorageErrors errorWithCustomMessage:@"Failed to retrieve a download URL."];
83+
__strong FIRStorageGetDownloadURLTask *strongSelf = weakSelf;
84+
if (strongSelf) {
85+
NSURL *downloadURL;
86+
if (error) {
87+
if (!strongSelf.error) {
88+
strongSelf.error =
89+
[FIRStorageErrors errorWithServerError:error reference:strongSelf.reference];
9790
}
9891
} else {
99-
self.error = [FIRStorageErrors errorWithInvalidRequest:data];
92+
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
93+
if (responseDictionary != nil) {
94+
downloadURL =
95+
[FIRStorageGetDownloadURLTask downloadURLFromMetadataDictionary:responseDictionary];
96+
if (!downloadURL) {
97+
strongSelf.error =
98+
[FIRStorageErrors errorWithCustomMessage:@"Failed to retrieve a download URL."];
99+
}
100+
} else {
101+
strongSelf.error = [FIRStorageErrors errorWithInvalidRequest:data];
102+
}
100103
}
101-
}
102104

103-
if (callback) {
104-
callback(downloadURL, self.error);
105-
}
105+
if (callback) {
106+
callback(downloadURL, strongSelf.error);
107+
}
106108

107-
self->_fetcherCompletion = nil;
109+
strongSelf->_fetcherCompletion = nil;
110+
}
108111
};
109-
#pragma clang diagnostic pop
110112

111-
__weak FIRStorageGetDownloadURLTask *weakSelf = self;
112113
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
113114
weakSelf.fetcherCompletion(data, error);
114115
}];

Firebase/Storage/FIRStorageGetMetadataTask.m

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,32 +55,33 @@ - (void)enqueue {
5555
_fetcher = fetcher;
5656
fetcher.comment = @"GetMetadataTask";
5757

58-
#pragma clang diagnostic push
59-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
58+
__weak FIRStorageGetMetadataTask *weakSelf = self;
6059
_fetcherCompletion = ^(NSData *data, NSError *error) {
61-
FIRStorageMetadata *metadata;
62-
if (error) {
63-
if (!self.error) {
64-
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
65-
}
66-
} else {
67-
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
68-
if (responseDictionary != nil) {
69-
metadata = [[FIRStorageMetadata alloc] initWithDictionary:responseDictionary];
70-
[metadata setType:FIRStorageMetadataTypeFile];
60+
__strong FIRStorageGetMetadataTask *strongSelf = weakSelf;
61+
if (strongSelf) {
62+
FIRStorageMetadata *metadata = nil;
63+
if (error) {
64+
if (!strongSelf.error) {
65+
strongSelf.error =
66+
[FIRStorageErrors errorWithServerError:error reference:strongSelf.reference];
67+
}
7168
} else {
72-
self.error = [FIRStorageErrors errorWithInvalidRequest:data];
69+
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
70+
if (responseDictionary != nil) {
71+
metadata = [[FIRStorageMetadata alloc] initWithDictionary:responseDictionary];
72+
[metadata setType:FIRStorageMetadataTypeFile];
73+
} else {
74+
strongSelf.error = [FIRStorageErrors errorWithInvalidRequest:data];
75+
}
7376
}
74-
}
7577

76-
if (callback) {
77-
callback(metadata, self.error);
78+
if (callback) {
79+
callback(metadata, strongSelf.error);
80+
}
81+
strongSelf->_fetcherCompletion = nil;
7882
}
79-
self->_fetcherCompletion = nil;
8083
};
81-
#pragma clang diagnostic pop
8284

83-
__weak FIRStorageGetMetadataTask *weakSelf = self;
8485
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
8586
weakSelf.fetcherCompletion(data, error);
8687
}];

Firebase/Storage/FIRStorageUpdateMetadataTask.m

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -61,34 +61,35 @@ - (void)enqueue {
6161
GTMSessionFetcher *fetcher = [self.fetcherService fetcherWithRequest:request];
6262
_fetcher = fetcher;
6363

64-
#pragma clang diagnostic push
65-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
64+
__weak FIRStorageUpdateMetadataTask *weakSelf = self;
6665
_fetcherCompletion = ^(NSData *data, NSError *error) {
67-
FIRStorageMetadata *metadata;
68-
if (error) {
69-
if (!self.error) {
70-
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
71-
}
72-
} else {
73-
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
74-
if (responseDictionary) {
75-
metadata = [[FIRStorageMetadata alloc] initWithDictionary:responseDictionary];
76-
[metadata setType:FIRStorageMetadataTypeFile];
66+
__strong FIRStorageUpdateMetadataTask *strongSelf = weakSelf;
67+
if (strongSelf) {
68+
FIRStorageMetadata *metadata;
69+
if (error) {
70+
if (!strongSelf.error) {
71+
strongSelf.error =
72+
[FIRStorageErrors errorWithServerError:error reference:strongSelf.reference];
73+
}
7774
} else {
78-
self.error = [FIRStorageErrors errorWithInvalidRequest:data];
75+
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
76+
if (responseDictionary) {
77+
metadata = [[FIRStorageMetadata alloc] initWithDictionary:responseDictionary];
78+
[metadata setType:FIRStorageMetadataTypeFile];
79+
} else {
80+
strongSelf.error = [FIRStorageErrors errorWithInvalidRequest:data];
81+
}
7982
}
80-
}
8183

82-
if (callback) {
83-
callback(metadata, self.error);
84+
if (callback) {
85+
callback(metadata, strongSelf.error);
86+
}
87+
strongSelf->_fetcherCompletion = nil;
8488
}
85-
self->_fetcherCompletion = nil;
8689
};
87-
#pragma clang diagnostic pop
8890

8991
fetcher.comment = @"UpdateMetadataTask";
9092

91-
__weak FIRStorageUpdateMetadataTask *weakSelf = self;
9293
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
9394
weakSelf.fetcherCompletion(data, error);
9495
}];

Firebase/Storage/FIRStorageUploadTask.m

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -127,46 +127,46 @@ - (void)enqueue {
127127
// Process fetches
128128
self.state = FIRStorageTaskStateRunning;
129129

130-
#pragma clang diagnostic push
131-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
132130
_fetcherCompletion = ^(NSData *_Nullable data, NSError *_Nullable error) {
133-
// Fire last progress updates
134-
[self fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:self.snapshot];
135-
136-
// Handle potential issues with upload
137-
if (error) {
138-
self.state = FIRStorageTaskStateFailed;
139-
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
140-
self.metadata = self->_uploadMetadata;
141-
[self fireHandlersForStatus:FIRStorageTaskStatusFailure snapshot:self.snapshot];
142-
[self removeAllObservers];
143-
self->_fetcherCompletion = nil;
144-
return;
131+
__strong FIRStorageUploadTask *strongSelf = weakSelf;
132+
if (strongSelf) {
133+
// Fire last progress updates
134+
[strongSelf fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:strongSelf.snapshot];
135+
136+
// Handle potential issues with upload
137+
if (error) {
138+
strongSelf.state = FIRStorageTaskStateFailed;
139+
strongSelf.error =
140+
[FIRStorageErrors errorWithServerError:error reference:strongSelf.reference];
141+
strongSelf.metadata = strongSelf->_uploadMetadata;
142+
[strongSelf fireHandlersForStatus:FIRStorageTaskStatusFailure snapshot:strongSelf.snapshot];
143+
[strongSelf removeAllObservers];
144+
strongSelf->_fetcherCompletion = nil;
145+
return;
146+
}
147+
148+
// Upload completed successfully, fire completion callbacks
149+
strongSelf.state = FIRStorageTaskStateSuccess;
150+
151+
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
152+
if (responseDictionary) {
153+
FIRStorageMetadata *metadata =
154+
[[FIRStorageMetadata alloc] initWithDictionary:responseDictionary];
155+
[metadata setType:FIRStorageMetadataTypeFile];
156+
strongSelf.metadata = metadata;
157+
} else {
158+
strongSelf.error = [FIRStorageErrors errorWithInvalidRequest:data];
159+
}
160+
161+
[strongSelf fireHandlersForStatus:FIRStorageTaskStatusSuccess snapshot:strongSelf.snapshot];
162+
[strongSelf removeAllObservers];
163+
strongSelf->_fetcherCompletion = nil;
145164
}
146-
147-
// Upload completed successfully, fire completion callbacks
148-
self.state = FIRStorageTaskStateSuccess;
149-
150-
NSDictionary *responseDictionary = [NSDictionary frs_dictionaryFromJSONData:data];
151-
if (responseDictionary) {
152-
FIRStorageMetadata *metadata =
153-
[[FIRStorageMetadata alloc] initWithDictionary:responseDictionary];
154-
[metadata setType:FIRStorageMetadataTypeFile];
155-
self.metadata = metadata;
156-
} else {
157-
self.error = [FIRStorageErrors errorWithInvalidRequest:data];
158-
}
159-
160-
[self fireHandlersForStatus:FIRStorageTaskStatusSuccess snapshot:self.snapshot];
161-
[self removeAllObservers];
162-
self->_fetcherCompletion = nil;
163165
};
164-
#pragma clang diagnostic pop
165166

166-
[_uploadFetcher
167-
beginFetchWithCompletionHandler:^(NSData *_Nullable data, NSError *_Nullable error) {
168-
weakSelf.fetcherCompletion(data, error);
169-
}];
167+
[_uploadFetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
168+
weakSelf.fetcherCompletion(data, error);
169+
}];
170170
}
171171

172172
#pragma mark - Upload Management

Firebase/Storage/Private/FIRStorageTask_Private.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ NS_ASSUME_NONNULL_BEGIN
6262

6363
@property(readonly, nonatomic) GTMSessionFetcherService *fetcherService;
6464

65-
@property(readonly) GTMSessionFetcherCompletionHandler fetcherCompletion;
65+
@property(readonly, copy) GTMSessionFetcherCompletionHandler fetcherCompletion;
6666

6767
/**
6868
* Creates a new FIRStorageTask initialized with a FIRStorageReference and GTMSessionFetcherService.

0 commit comments

Comments
 (0)