AutorÃa | Ultima modificación | Ver Log |
/** Copyright 2020 Google LLC** 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.*/#import "GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage+Promises.h"#if __has_include(<FBLPromises/FBLPromises.h>)#import <FBLPromises/FBLPromises.h>#else#import "FBLPromises.h"#endif#import "GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadBatch.h"@implementation GDTCORFlatFileStorage (Promises)- (FBLPromise<NSSet<NSNumber *> *> *)batchIDsForTarget:(GDTCORTarget)target {return [FBLPromise onQueue:self.storageQueuewrapObjectCompletion:^(FBLPromiseObjectCompletion _Nonnull handler) {[self batchIDsForTarget:target onComplete:handler];}];}- (FBLPromise<NSNull *> *)removeBatchWithID:(NSNumber *)batchID deleteEvents:(BOOL)deleteEvents {return [FBLPromise onQueue:self.storageQueuewrapCompletion:^(FBLPromiseCompletion _Nonnull handler) {[self removeBatchWithID:batchID deleteEvents:deleteEvents onComplete:handler];}];}- (FBLPromise<NSNull *> *)removeBatchesWithIDs:(NSSet<NSNumber *> *)batchIDsdeleteEvents:(BOOL)deleteEvents {NSMutableArray<FBLPromise *> *removeBatchPromises =[NSMutableArray arrayWithCapacity:batchIDs.count];for (NSNumber *batchID in batchIDs) {[removeBatchPromises addObject:[self removeBatchWithID:batchID deleteEvents:deleteEvents]];}return [FBLPromise onQueue:self.storageQueue all:[removeBatchPromises copy]].thenOn(self.storageQueue, ^id(id result) {return [FBLPromise resolvedWith:[NSNull null]];});}- (FBLPromise<NSNull *> *)removeAllBatchesForTarget:(GDTCORTarget)targetdeleteEvents:(BOOL)deleteEvents {return[self batchIDsForTarget:target].thenOn(self.storageQueue, ^id(NSSet<NSNumber *> *batchIDs) {if (batchIDs.count == 0) {return [FBLPromise resolvedWith:[NSNull null]];} else {return [self removeBatchesWithIDs:batchIDs deleteEvents:NO];}});}- (FBLPromise<NSNumber *> *)hasEventsForTarget:(GDTCORTarget)target {return [FBLPromise onQueue:self.storageQueuewrapBoolCompletion:^(FBLPromiseBoolCompletion _Nonnull handler) {[self hasEventsForTarget:target onComplete:handler];}];}- (FBLPromise<GDTCORUploadBatch *> *)batchWithEventSelector:(GDTCORStorageEventSelector *)eventSelectorbatchExpiration:(NSDate *)expiration {return [FBLPromiseonQueue:self.storageQueueasync:^(FBLPromiseFulfillBlock _Nonnull fulfill, FBLPromiseRejectBlock _Nonnull reject) {[self batchWithEventSelector:eventSelectorbatchExpiration:expirationonComplete:^(NSNumber *_Nullable newBatchID,NSSet<GDTCOREvent *> *_Nullable batchEvents) {if (newBatchID == nil || batchEvents == nil) {reject([self genericRejectedPromiseErrorWithReason:@"There are no events for the selector."]);} else {fulfill([[GDTCORUploadBatch alloc] initWithBatchID:newBatchIDevents:batchEvents]);}}];}];}// TODO: Move to a separate class/extension when needed in more places.- (NSError *)genericRejectedPromiseErrorWithReason:(NSString *)reason {return [NSError errorWithDomain:@"GDTCORFlatFileStorage"code:-1userInfo:@{NSLocalizedFailureReasonErrorKey : reason}];}@end