Proyectos de Subversion Iphone Microlearning

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
/*
2
 * Copyright 2020 Google LLC
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
#import "GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage+Promises.h"
18
 
19
#if __has_include(<FBLPromises/FBLPromises.h>)
20
#import <FBLPromises/FBLPromises.h>
21
#else
22
#import "FBLPromises.h"
23
#endif
24
 
25
#import "GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadBatch.h"
26
 
27
@implementation GDTCORFlatFileStorage (Promises)
28
 
29
- (FBLPromise<NSSet<NSNumber *> *> *)batchIDsForTarget:(GDTCORTarget)target {
30
  return [FBLPromise onQueue:self.storageQueue
31
        wrapObjectCompletion:^(FBLPromiseObjectCompletion _Nonnull handler) {
32
          [self batchIDsForTarget:target onComplete:handler];
33
        }];
34
}
35
 
36
- (FBLPromise<NSNull *> *)removeBatchWithID:(NSNumber *)batchID deleteEvents:(BOOL)deleteEvents {
37
  return [FBLPromise onQueue:self.storageQueue
38
              wrapCompletion:^(FBLPromiseCompletion _Nonnull handler) {
39
                [self removeBatchWithID:batchID deleteEvents:deleteEvents onComplete:handler];
40
              }];
41
}
42
 
43
- (FBLPromise<NSNull *> *)removeBatchesWithIDs:(NSSet<NSNumber *> *)batchIDs
44
                                  deleteEvents:(BOOL)deleteEvents {
45
  NSMutableArray<FBLPromise *> *removeBatchPromises =
46
      [NSMutableArray arrayWithCapacity:batchIDs.count];
47
  for (NSNumber *batchID in batchIDs) {
48
    [removeBatchPromises addObject:[self removeBatchWithID:batchID deleteEvents:deleteEvents]];
49
  }
50
 
51
  return [FBLPromise onQueue:self.storageQueue all:[removeBatchPromises copy]].thenOn(
52
      self.storageQueue, ^id(id result) {
53
        return [FBLPromise resolvedWith:[NSNull null]];
54
      });
55
}
56
 
57
- (FBLPromise<NSNull *> *)removeAllBatchesForTarget:(GDTCORTarget)target
58
                                       deleteEvents:(BOOL)deleteEvents {
59
  return
60
      [self batchIDsForTarget:target].thenOn(self.storageQueue, ^id(NSSet<NSNumber *> *batchIDs) {
61
        if (batchIDs.count == 0) {
62
          return [FBLPromise resolvedWith:[NSNull null]];
63
        } else {
64
          return [self removeBatchesWithIDs:batchIDs deleteEvents:NO];
65
        }
66
      });
67
}
68
 
69
- (FBLPromise<NSNumber *> *)hasEventsForTarget:(GDTCORTarget)target {
70
  return [FBLPromise onQueue:self.storageQueue
71
          wrapBoolCompletion:^(FBLPromiseBoolCompletion _Nonnull handler) {
72
            [self hasEventsForTarget:target onComplete:handler];
73
          }];
74
}
75
 
76
- (FBLPromise<GDTCORUploadBatch *> *)batchWithEventSelector:
77
                                         (GDTCORStorageEventSelector *)eventSelector
78
                                            batchExpiration:(NSDate *)expiration {
79
  return [FBLPromise
80
      onQueue:self.storageQueue
81
        async:^(FBLPromiseFulfillBlock _Nonnull fulfill, FBLPromiseRejectBlock _Nonnull reject) {
82
          [self batchWithEventSelector:eventSelector
83
                       batchExpiration:expiration
84
                            onComplete:^(NSNumber *_Nullable newBatchID,
85
                                         NSSet<GDTCOREvent *> *_Nullable batchEvents) {
86
                              if (newBatchID == nil || batchEvents == nil) {
87
                                reject([self genericRejectedPromiseErrorWithReason:
88
                                                 @"There are no events for the selector."]);
89
                              } else {
90
                                fulfill([[GDTCORUploadBatch alloc] initWithBatchID:newBatchID
91
                                                                            events:batchEvents]);
92
                              }
93
                            }];
94
        }];
95
}
96
 
97
// TODO: Move to a separate class/extension when needed in more places.
98
- (NSError *)genericRejectedPromiseErrorWithReason:(NSString *)reason {
99
  return [NSError errorWithDomain:@"GDTCORFlatFileStorage"
100
                             code:-1
101
                         userInfo:@{NSLocalizedFailureReasonErrorKey : reason}];
102
}
103
 
104
@end