GBA002/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.m
Riley Testut 6cca0f244f Replaces frameworks with static libraries
As of iOS 13.3.1, apps installed with free developer accounts that contain embedded frameworks fail to launch. To work around this, we now link all dependencies via Cocoapods as static libraries.
2020-02-03 19:28:23 -08:00

180 lines
5.1 KiB
Objective-C

/* Copyright (c) 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#if !__has_feature(objc_arc)
#error "This file needs to be compiled with ARC enabled."
#endif
#import "GTLRBatchQuery.h"
#import "GTLRService.h"
#if DEBUG
static void DebugAssertValidBatchQueryItem(GTLRQuery *query) {
GTLR_DEBUG_ASSERT([query isKindOfClass:[GTLRQuery class]],
@"unexpected query class: %@", [query class]);
GTLR_DEBUG_ASSERT(query.uploadParameters == nil,
@"batch may not contain upload: %@", query);
GTLR_DEBUG_ASSERT(!query.hasExecutionParameters,
@"queries added to a batch may not contain executionParameters: %@", query);
GTLR_DEBUG_ASSERT(!query.queryInvalid,
@"batch may not contain query already executed: %@", query);
}
#else
static void DebugAssertValidBatchQueryItem(GTLRQuery *query) { }
#endif
@implementation GTLRBatchQuery {
NSMutableArray<GTLRQuery *> *_queries;
NSMutableDictionary *_requestIDMap;
GTLRServiceExecutionParameters *_executionParameters;
}
@synthesize shouldSkipAuthorization = _shouldSkipAuthorization,
additionalHTTPHeaders = _additionalHTTPHeaders,
additionalURLQueryParameters = _additionalURLQueryParameters,
boundary = _boundary,
loggingName = _loggingName;
+ (instancetype)batchQuery {
GTLRBatchQuery *obj = [[self alloc] init];
return obj;
}
+ (instancetype)batchQueryWithQueries:(NSArray<GTLRQuery *> *)queries {
GTLRBatchQuery *obj = [self batchQuery];
obj.queries = queries;
#if DEBUG
for (GTLRQuery *query in queries) {
DebugAssertValidBatchQueryItem(query);
}
#endif
return obj;
}
- (id)copyWithZone:(NSZone *)zone {
// Deep copy the list of queries
GTLRBatchQuery *newBatch = [[[self class] allocWithZone:zone] init];
if (_queries) {
newBatch.queries = [[NSArray alloc] initWithArray:_queries
copyItems:YES];
}
// Using the executionParameters ivar avoids creating the object.
newBatch.executionParameters = _executionParameters;
// Copied in the same order as synthesized above.
newBatch.shouldSkipAuthorization = _shouldSkipAuthorization;
newBatch.additionalHTTPHeaders = _additionalHTTPHeaders;
newBatch.additionalURLQueryParameters = _additionalURLQueryParameters;
newBatch.boundary = _boundary;
newBatch.loggingName = _loggingName;
// No need to copy _requestIDMap as it's created on demand.
return newBatch;
}
- (NSString *)description {
NSArray *queries = self.queries;
NSArray *loggingNames = [queries valueForKey:@"loggingName"];
NSMutableSet *dedupedNames = [NSMutableSet setWithArray:loggingNames]; // de-dupe
[dedupedNames removeObject:[NSNull null]]; // In case any didn't have a loggingName.
NSString *namesStr = [[dedupedNames allObjects] componentsJoinedByString:@","];
return [NSString stringWithFormat:@"%@ %p (queries:%lu - %@)",
[self class], self, (unsigned long)queries.count, namesStr];
}
#pragma mark -
- (BOOL)isBatchQuery {
return YES;
}
- (GTLRUploadParameters *)uploadParameters {
// File upload is not supported for batches
return nil;
}
- (void)invalidateQuery {
NSArray *queries = self.queries;
[queries makeObjectsPerformSelector:@selector(invalidateQuery)];
_executionParameters = nil;
}
- (GTLRQuery *)queryForRequestID:(NSString *)requestID {
GTLRQuery *result = [_requestIDMap objectForKey:requestID];
if (result) return result;
// We've not before tried to look up a query, or the map is stale
_requestIDMap = [[NSMutableDictionary alloc] init];
for (GTLRQuery *query in _queries) {
[_requestIDMap setObject:query forKey:query.requestID];
}
result = [_requestIDMap objectForKey:requestID];
return result;
}
#pragma mark -
- (void)setQueries:(NSArray<GTLRQuery *> *)array {
#if DEBUG
for (GTLRQuery *query in array) {
DebugAssertValidBatchQueryItem(query);
}
#endif
_queries = [array mutableCopy];
}
- (NSArray<GTLRQuery *> *)queries {
return _queries;
}
- (void)addQuery:(GTLRQuery *)query {
DebugAssertValidBatchQueryItem(query);
if (_queries == nil) {
_queries = [[NSMutableArray alloc] init];
}
[_queries addObject:query];
}
- (GTLRServiceExecutionParameters *)executionParameters {
@synchronized(self) {
if (!_executionParameters) {
_executionParameters = [[GTLRServiceExecutionParameters alloc] init];
}
}
return _executionParameters;
}
- (void)setExecutionParameters:(GTLRServiceExecutionParameters *)executionParameters {
@synchronized(self) {
_executionParameters = executionParameters;
}
}
- (BOOL)hasExecutionParameters {
return _executionParameters.hasParameters;
}
@end