1515NSString *const EDQueueJobDidFail = @" EDQueueJobDidFail" ;
1616NSString *const EDQueueDidDrain = @" EDQueueDidDrain" ;
1717
18- NSString *const EDQueueNameKey = @" name" ;
19- NSString *const EDQueueDataKey = @" data" ;
20-
21-
22- NSString *const EDQueueStorageJobIdKey = @" id" ;
23- NSString *const EDQueueStorageJobTaskKey = @" task" ;
24- NSString *const EDQueueStorageJobDataKey = @" data" ;
25- NSString *const EDQueueStorageJobAttemptsKey = @" atempts" ;
26- NSString *const EDQueueStorageJobStampKey = @" stamp" ;
18+ static NSString *const EDQueueNameKey = @" name" ;
19+ static NSString *const EDQueueDataKey = @" data" ;
2720
2821
2922NS_ASSUME_NONNULL_BEGIN
3023
3124@interface EDQueue ()
32- {
33- BOOL _isRunning;
34- BOOL _isActive;
35- NSUInteger _retryLimit;
36- }
3725
38- @property (nonatomic ) EDQueueStorageEngine *engine;
3926@property (nonatomic , readwrite , nullable ) NSString *activeTask;
4027
4128@end
4229
43- //
4430
4531@implementation EDQueue
4632
47- @synthesize isRunning = _isRunning;
48- @synthesize isActive = _isActive;
49- @synthesize retryLimit = _retryLimit;
50-
51- #pragma mark - Singleton
52-
53- + (EDQueue *)sharedInstance
54- {
55- static EDQueue *singleton = nil ;
56- static dispatch_once_t once = 0 ;
57- dispatch_once (&once, ^{
58- singleton = [[self alloc ] init ];
59- });
60- return singleton;
61- }
62-
63- #pragma mark - Init
64-
65- - (id )init
33+ - (instancetype )initWithPersistentStore : (id <EDQueuePersistentStorage>)persistentStore
6634{
6735 self = [super init ];
6836 if (self) {
69- _engine = [[EDQueueStorageEngine alloc ] init ];
7037 _retryLimit = 4 ;
38+ _storage = persistentStore;
7139 }
7240 return self;
7341}
7442
75- - (void )dealloc
76- {
77- self.delegate = nil ;
78- _engine = nil ;
79- }
8043
8144#pragma mark - Public methods
8245
@@ -90,7 +53,7 @@ - (void)dealloc
9053 */
9154- (void )enqueueJob : (EDQueueJob *)job
9255{
93- [self .engine createJob: job];
56+ [self .storage createJob: job];
9457 [self tick ];
9558}
9659
@@ -103,7 +66,7 @@ - (void)enqueueJob:(EDQueueJob *)job
10366 */
10467- (BOOL )jobExistsForTask : (NSString *)task
10568{
106- BOOL jobExists = [self .engine jobExistsForTask: task];
69+ BOOL jobExists = [self .storage jobExistsForTask: task];
10770 return jobExists;
10871}
10972
@@ -129,7 +92,7 @@ - (BOOL)jobIsActiveForTask:(NSString *)task
12992 */
13093- (nullable EDQueueJob *)nextJobForTask : (NSString *)task
13194{
132- EDQueueJob *nextJobForTask = [self .engine fetchJobForTask : task];
95+ EDQueueJob *nextJobForTask = [self .storage fetchNextJobForTask : task];
13396 return nextJobForTask;
13497}
13598
@@ -146,7 +109,6 @@ - (void)start
146109
147110 NSDictionary *object = @{ EDQueueNameKey : EDQueueDidStart };
148111
149- // [self performSelectorOnMainThread:@selector(postNotificationOnMainThread:) withObject:object waitUntilDone:NO];
150112 [self postNotificationOnMainThread: object];
151113 }
152114}
@@ -163,8 +125,6 @@ - (void)stop
163125 _isRunning = NO ;
164126
165127 NSDictionary *object = @{ EDQueueNameKey : EDQueueDidStop };
166-
167- // [self performSelectorOnMainThread:@selector(postNotification:) withObject:object waitUntilDone:NO];
168128 [self postNotificationOnMainThread: object];
169129 }
170130}
@@ -179,7 +139,7 @@ - (void)stop
179139 */
180140- (void )empty
181141{
182- [self .engine removeAllJobs ];
142+ [self .storage removeAllJobs ];
183143}
184144
185145
@@ -194,10 +154,10 @@ - (void)tick
194154{
195155 dispatch_queue_t gcd = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 );
196156 dispatch_async (gcd, ^{
197- if (self.isRunning && !self.isActive && [self .engine fetchJobCount ] > 0 ) {
157+ if (self.isRunning && !self.isActive && [self .storage jobCount ] > 0 ) {
198158 // Start job
199159 _isActive = YES ;
200- EDQueueJob *job = [self .engine fetchJob ];
160+ EDQueueJob *job = [self .storage fetchNextJob ];
201161 self.activeTask = job.task ;
202162
203163 // Pass job to delegate
@@ -220,7 +180,7 @@ - (void)processJob:(EDQueueJob*)job withResult:(EDQueueResult)result
220180 EDQueueDataKey : job
221181 }];
222182
223- [self .engine removeJob: job];
183+ [self .storage removeJob: job];
224184 break ;
225185
226186 case EDQueueResultFail:
@@ -233,9 +193,9 @@ - (void)processJob:(EDQueueJob*)job withResult:(EDQueueResult)result
233193 NSUInteger currentAttempt = job.attempts .integerValue + 1 ;
234194
235195 if (currentAttempt < self.retryLimit ) {
236- [self .engine incrementAttemptForJob: job];
196+ [self .storage incrementAttemptForJob: job];
237197 } else {
238- [self .engine removeJob: job];
198+ [self .storage removeJob: job];
239199 }
240200 break ;
241201 case EDQueueResultCritical:
@@ -246,15 +206,15 @@ - (void)processJob:(EDQueueJob*)job withResult:(EDQueueResult)result
246206 }];
247207
248208 [self errorWithMessage: @" Critical error. Job canceled." ];
249- [self .engine removeJob: job];
209+ [self .storage removeJob: job];
250210 break ;
251211 }
252212
253213 // Clean-up
254214 _isActive = NO ;
255215
256216 // Drain
257- if ([self .engine fetchJobCount ] == 0 ) {
217+ if ([self .storage jobCount ] == 0 ) {
258218
259219 [self postNotificationOnMainThread: @{
260220 EDQueueNameKey : EDQueueDidDrain,
0 commit comments