15
15
NSString *const EDQueueJobDidFail = @" EDQueueJobDidFail" ;
16
16
NSString *const EDQueueDidDrain = @" EDQueueDidDrain" ;
17
17
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" ;
27
20
28
21
29
22
NS_ASSUME_NONNULL_BEGIN
30
23
31
24
@interface EDQueue ()
32
- {
33
- BOOL _isRunning;
34
- BOOL _isActive;
35
- NSUInteger _retryLimit;
36
- }
37
25
38
- @property (nonatomic ) EDQueueStorageEngine *engine;
39
26
@property (nonatomic , readwrite , nullable ) NSString *activeTask;
40
27
41
28
@end
42
29
43
- //
44
30
45
31
@implementation EDQueue
46
32
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
66
34
{
67
35
self = [super init ];
68
36
if (self) {
69
- _engine = [[EDQueueStorageEngine alloc ] init ];
70
37
_retryLimit = 4 ;
38
+ _storage = persistentStore;
71
39
}
72
40
return self;
73
41
}
74
42
75
- - (void )dealloc
76
- {
77
- self.delegate = nil ;
78
- _engine = nil ;
79
- }
80
43
81
44
#pragma mark - Public methods
82
45
@@ -90,7 +53,7 @@ - (void)dealloc
90
53
*/
91
54
- (void )enqueueJob : (EDQueueJob *)job
92
55
{
93
- [self .engine createJob: job];
56
+ [self .storage createJob: job];
94
57
[self tick ];
95
58
}
96
59
@@ -103,7 +66,7 @@ - (void)enqueueJob:(EDQueueJob *)job
103
66
*/
104
67
- (BOOL )jobExistsForTask : (NSString *)task
105
68
{
106
- BOOL jobExists = [self .engine jobExistsForTask: task];
69
+ BOOL jobExists = [self .storage jobExistsForTask: task];
107
70
return jobExists;
108
71
}
109
72
@@ -129,7 +92,7 @@ - (BOOL)jobIsActiveForTask:(NSString *)task
129
92
*/
130
93
- (nullable EDQueueJob *)nextJobForTask : (NSString *)task
131
94
{
132
- EDQueueJob *nextJobForTask = [self .engine fetchJobForTask : task];
95
+ EDQueueJob *nextJobForTask = [self .storage fetchNextJobForTask : task];
133
96
return nextJobForTask;
134
97
}
135
98
@@ -146,7 +109,6 @@ - (void)start
146
109
147
110
NSDictionary *object = @{ EDQueueNameKey : EDQueueDidStart };
148
111
149
- // [self performSelectorOnMainThread:@selector(postNotificationOnMainThread:) withObject:object waitUntilDone:NO];
150
112
[self postNotificationOnMainThread: object];
151
113
}
152
114
}
@@ -163,8 +125,6 @@ - (void)stop
163
125
_isRunning = NO ;
164
126
165
127
NSDictionary *object = @{ EDQueueNameKey : EDQueueDidStop };
166
-
167
- // [self performSelectorOnMainThread:@selector(postNotification:) withObject:object waitUntilDone:NO];
168
128
[self postNotificationOnMainThread: object];
169
129
}
170
130
}
@@ -179,7 +139,7 @@ - (void)stop
179
139
*/
180
140
- (void )empty
181
141
{
182
- [self .engine removeAllJobs ];
142
+ [self .storage removeAllJobs ];
183
143
}
184
144
185
145
@@ -194,10 +154,10 @@ - (void)tick
194
154
{
195
155
dispatch_queue_t gcd = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 );
196
156
dispatch_async (gcd, ^{
197
- if (self.isRunning && !self.isActive && [self .engine fetchJobCount ] > 0 ) {
157
+ if (self.isRunning && !self.isActive && [self .storage jobCount ] > 0 ) {
198
158
// Start job
199
159
_isActive = YES ;
200
- EDQueueJob *job = [self .engine fetchJob ];
160
+ EDQueueJob *job = [self .storage fetchNextJob ];
201
161
self.activeTask = job.task ;
202
162
203
163
// Pass job to delegate
@@ -220,7 +180,7 @@ - (void)processJob:(EDQueueJob*)job withResult:(EDQueueResult)result
220
180
EDQueueDataKey : job
221
181
}];
222
182
223
- [self .engine removeJob: job];
183
+ [self .storage removeJob: job];
224
184
break ;
225
185
226
186
case EDQueueResultFail:
@@ -233,9 +193,9 @@ - (void)processJob:(EDQueueJob*)job withResult:(EDQueueResult)result
233
193
NSUInteger currentAttempt = job.attempts .integerValue + 1 ;
234
194
235
195
if (currentAttempt < self.retryLimit ) {
236
- [self .engine incrementAttemptForJob: job];
196
+ [self .storage incrementAttemptForJob: job];
237
197
} else {
238
- [self .engine removeJob: job];
198
+ [self .storage removeJob: job];
239
199
}
240
200
break ;
241
201
case EDQueueResultCritical:
@@ -246,15 +206,15 @@ - (void)processJob:(EDQueueJob*)job withResult:(EDQueueResult)result
246
206
}];
247
207
248
208
[self errorWithMessage: @" Critical error. Job canceled." ];
249
- [self .engine removeJob: job];
209
+ [self .storage removeJob: job];
250
210
break ;
251
211
}
252
212
253
213
// Clean-up
254
214
_isActive = NO ;
255
215
256
216
// Drain
257
- if ([self .engine fetchJobCount ] == 0 ) {
217
+ if ([self .storage jobCount ] == 0 ) {
258
218
259
219
[self postNotificationOnMainThread: @{
260
220
EDQueueNameKey : EDQueueDidDrain,
0 commit comments