Skip to content

Commit e547d26

Browse files
authored
Make JobConstraint public (#335)
1 parent e244dc7 commit e547d26

File tree

6 files changed

+53
-48
lines changed

6 files changed

+53
-48
lines changed

Sources/SwiftQueue/Constraint+Deadline.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ internal final class DeadlineConstraint: JobConstraint, CodableConstraint {
3939
}
4040

4141
func willSchedule(queue: SqOperationQueue, operation: SqOperation) throws {
42-
try check(operation: operation)
42+
try check()
4343
}
4444

4545
func willRun(operation: SqOperation) throws {
46-
try check(operation: operation)
46+
try check()
4747
}
4848

4949
func run(operation: SqOperation) -> Bool {
@@ -55,7 +55,7 @@ internal final class DeadlineConstraint: JobConstraint, CodableConstraint {
5555
return true
5656
}
5757

58-
private func check(operation: SqOperation) throws {
58+
private func check() throws {
5959
if deadline < Date() {
6060
throw SwiftQueueError.deadline
6161
}

Sources/SwiftQueue/Constraint.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import Foundation
2424

25-
internal protocol JobConstraint {
25+
public protocol JobConstraint {
2626

2727
/**
2828
- Operation will be added to the queue
@@ -54,12 +54,12 @@ protocol CodableConstraint: Encodable {
5454

5555
}
5656

57-
internal class SimpleConstraint: JobConstraint {
57+
public class SimpleConstraint: JobConstraint {
5858

59-
func willSchedule(queue: SqOperationQueue, operation: SqOperation) throws {}
59+
public func willSchedule(queue: SqOperationQueue, operation: SqOperation) throws {}
6060

61-
func willRun(operation: SqOperation) throws {}
61+
public func willRun(operation: SqOperation) throws {}
6262

63-
func run(operation: SqOperation) -> Bool { true }
63+
public func run(operation: SqOperation) -> Bool { true }
6464

6565
}

Sources/SwiftQueue/SqOperation.swift

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,32 @@
2222

2323
import Foundation
2424

25-
internal final class SqOperation: Operation {
25+
public final class SqOperation: Operation {
2626

27-
let handler: Job
27+
public let info: JobInfo
28+
public let logger: SwiftQueueLogger
29+
public let dispatchQueue: DispatchQueue
2830

29-
var info: JobInfo
31+
public var nextRunSchedule: Date? = nil
3032

31-
let constraints: [JobConstraint]
33+
internal let handler: Job
34+
internal var lastError: Error?
3235

33-
var lastError: Error?
34-
35-
let logger: SwiftQueueLogger
36-
37-
let listener: JobListener?
38-
39-
let dispatchQueue: DispatchQueue
40-
41-
var nextRunSchedule: Date?
36+
private let constraints: [JobConstraint]
37+
private let listener: JobListener?
4238

4339
/// Current number of repetition. Transient value
4440
internal var currentRepetition: Int = 0
4541

46-
override var name: String? { get { return info.uuid } set { } }
47-
override var queuePriority: QueuePriority { get { return info.priority } set { } }
48-
override var qualityOfService: QualityOfService { get { return info.qualityOfService } set { } }
42+
public override var name: String? { get { info.uuid } set { } }
43+
public override var queuePriority: QueuePriority { get { info.priority } set { } }
44+
45+
@available(iOS 8.0, macCatalyst 13.0, *)
46+
public override var qualityOfService: QualityOfService { get { info.qualityOfService } set { } }
4947

5048
private var jobIsExecuting: Bool = false
51-
override var isExecuting: Bool {
52-
get { return jobIsExecuting }
49+
public override var isExecuting: Bool {
50+
get { jobIsExecuting }
5351
set {
5452
willChangeValue(forKey: "isExecuting")
5553
jobIsExecuting = newValue
@@ -58,34 +56,40 @@ internal final class SqOperation: Operation {
5856
}
5957

6058
private var jobIsFinished: Bool = false
61-
override var isFinished: Bool {
62-
get { return jobIsFinished }
59+
public override var isFinished: Bool {
60+
get { jobIsFinished }
6361
set {
6462
willChangeValue(forKey: "isFinished")
6563
jobIsFinished = newValue
6664
didChangeValue(forKey: "isFinished")
6765
}
6866
}
6967

70-
internal init(job: Job, info: JobInfo, logger: SwiftQueueLogger, listener: JobListener?, dispatchQueue: DispatchQueue) {
68+
internal init(_ job: Job,
69+
_ info: JobInfo,
70+
_ logger: SwiftQueueLogger,
71+
_ listener: JobListener?,
72+
_ dispatchQueue: DispatchQueue,
73+
_ constraints: [JobConstraint]
74+
) {
7175
self.handler = job
7276
self.info = info
7377
self.logger = logger
7478
self.listener = listener
7579
self.dispatchQueue = dispatchQueue
76-
self.constraints = self.info.buildConstraints()
80+
self.constraints = constraints
7781

7882
super.init()
7983
}
8084

81-
override func start() {
85+
public override func start() {
8286
super.start()
8387
logger.log(.verbose, jobId: name, message: "Job has been started by the system")
8488
isExecuting = true
8589
run()
8690
}
8791

88-
override func cancel() {
92+
public override func cancel() {
8993
self.cancel(with: SwiftQueueError.canceled)
9094
}
9195

@@ -112,7 +116,7 @@ internal final class SqOperation: Operation {
112116
listener?.onTerminated(job: info, result: .fail(error))
113117
}
114118

115-
internal func run() {
119+
public func run() {
116120
if isCancelled && !isFinished {
117121
isFinished = true
118122
}
@@ -152,7 +156,7 @@ internal final class SqOperation: Operation {
152156

153157
extension SqOperation: JobResult {
154158

155-
func done(_ result: JobCompletion) {
159+
public func done(_ result: JobCompletion) {
156160
guard !isFinished else { return }
157161

158162
listener?.onAfterRun(job: info, result: result)

Sources/SwiftQueue/SqOperationQueue.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@
2222

2323
import Foundation
2424

25-
internal final class SqOperationQueue: OperationQueue {
26-
27-
private let params: SqManagerParams
25+
public final class SqOperationQueue: OperationQueue {
2826

2927
private let creator: JobCreator
3028
private let queue: Queue
3129

30+
private let dispatchQueue: DispatchQueue
3231
private let persister: JobPersister
3332
private let serializer: JobInfoSerializer
3433
private let logger: SwiftQueueLogger
@@ -37,9 +36,9 @@ internal final class SqOperationQueue: OperationQueue {
3736
private let trigger: Operation = TriggerOperation()
3837

3938
init(_ params: SqManagerParams, _ queue: Queue, _ isSuspended: Bool) {
40-
self.params = params
4139
self.queue = queue
4240
self.creator = params.jobCreator
41+
self.dispatchQueue = params.dispatchQueue
4342

4443
self.persister = params.persister
4544
self.serializer = params.serializer
@@ -65,10 +64,11 @@ internal final class SqOperationQueue: OperationQueue {
6564
private func loadSerializedTasks(name: String) {
6665
persister.restore(queueName: name).compactMap { string -> SqOperation? in
6766
do {
68-
let info = try serializer.deserialize(json: string)
67+
var info = try serializer.deserialize(json: string)
6968
let job = creator.create(type: info.type, params: info.params)
69+
let constraints = info.buildConstraints()
7070

71-
return SqOperation(job: job, info: info, logger: logger, listener: listener, dispatchQueue: params.dispatchQueue)
71+
return SqOperation(job, info, logger, listener, dispatchQueue, constraints)
7272
} catch let error {
7373
logger.log(.error, jobId: "UNKNOWN", message: "Unable to deserialize job error=\(error.localizedDescription)")
7474
return nil
@@ -81,7 +81,7 @@ internal final class SqOperationQueue: OperationQueue {
8181
super.addOperation(trigger)
8282
}
8383

84-
override func addOperation(_ ope: Operation) {
84+
public override func addOperation(_ ope: Operation) {
8585
self.addOperationInternal(ope, wait: true)
8686
}
8787

Sources/SwiftQueue/SwiftQueueManager.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,14 @@ public final class SwiftQueueManager {
6161
}
6262

6363
/// Schedule a job to the queue
64+
/// TODO Need to remove this method
6465
public func enqueue(info: JobInfo) {
6566
let queue = getQueue(queueName: info.queueName)
6667
let job = queue.createHandler(type: info.type, params: info.params)
68+
var info = info
69+
let constraints = info.buildConstraints()
6770

68-
let operation = SqOperation(job: job,
69-
info: info,
70-
logger: params.logger,
71-
listener: params.listener,
72-
dispatchQueue: params.dispatchQueue
73-
)
71+
let operation = SqOperation(job, info, params.logger, params.listener, params.dispatchQueue, constraints)
7472

7573
queue.addOperation(operation)
7674
}
@@ -115,6 +113,7 @@ public extension SwiftQueueManager {
115113
}
116114

117115
/// number of jobs for all queues
116+
/// TODO remove this method
118117
func jobCount() -> Int {
119118
var count = 0
120119
for element in manage.values {

Tests/SwiftQueueTests/TestUtils.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,9 @@ class MemorySerializer: JobInfoSerializer {
266266
extension JobBuilder {
267267

268268
internal func build(job: Job, logger: SwiftQueueLogger = NoLogger.shared, listener: JobListener? = nil) -> SqOperation {
269-
return SqOperation(job: job, info: build(), logger: logger, listener: listener, dispatchQueue: DispatchQueue.global(qos: DispatchQoS.QoSClass.utility))
269+
var info = build()
270+
let constraints = info.buildConstraints()
271+
return SqOperation(job, info, logger, listener, DispatchQueue.global(qos: DispatchQoS.QoSClass.utility), constraints)
270272
}
271273

272274
}

0 commit comments

Comments
 (0)