Skip to content

Commit 2e15d3c

Browse files
committed
Minor refactor for launchTask
1 parent a46edcf commit 2e15d3c

File tree

1 file changed

+23
-34
lines changed

1 file changed

+23
-34
lines changed

ReactiveTask/Task.swift

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -439,49 +439,38 @@ public func launchTask(task: Task, standardInput: SignalProducer<NSData, NoError
439439
}
440440

441441
return SignalProducer { observer, disposable in
442-
let stdoutAggregated = MutableProperty<Aggregation?>(nil)
443-
let stderrAggregated = MutableProperty<Aggregation?>(nil)
444-
445-
stdoutProducer.startWithSignal { signal, signalDisposable in
446-
disposable += signalDisposable
442+
func startAggregating(producer: SignalProducer<NSData, TaskError>) -> AnyProperty<Aggregation?> {
443+
let aggregated = MutableProperty<Aggregation?>(nil)
444+
445+
producer.startWithSignal { signal, signalDisposable in
446+
disposable += signalDisposable
447+
448+
let aggregate = NSMutableData()
449+
signal.observe(Observer(next: { data in
450+
observer.sendNext(.StandardOutput(data))
451+
aggregate.appendData(data)
452+
}, failed: { error in
453+
observer.sendFailed(error)
454+
aggregated.value = .Failed(error)
455+
}, completed: {
456+
aggregated.value = .Value(aggregate)
457+
}, interrupted: {
458+
aggregated.value = .Interrupted
459+
}))
460+
}
447461

448-
let aggregate = NSMutableData()
449-
signal.observe(Observer(next: { data in
450-
observer.sendNext(.StandardOutput(data))
451-
aggregate.appendData(data)
452-
}, failed: { error in
453-
observer.sendFailed(error)
454-
stdoutAggregated.value = .Failed(error)
455-
}, completed: {
456-
stdoutAggregated.value = .Value(aggregate)
457-
}, interrupted: {
458-
stdoutAggregated.value = .Interrupted
459-
}))
462+
return AnyProperty(aggregated)
460463
}
461464

462-
stderrProducer.startWithSignal { signal, signalDisposable in
463-
disposable += signalDisposable
464-
465-
let aggregate = NSMutableData()
466-
signal.observe(Observer(next: { data in
467-
observer.sendNext(.StandardError(data))
468-
aggregate.appendData(data)
469-
}, failed: { error in
470-
observer.sendFailed(error)
471-
stderrAggregated.value = .Failed(error)
472-
}, completed: {
473-
stderrAggregated.value = .Value(aggregate)
474-
}, interrupted: {
475-
stderrAggregated.value = .Interrupted
476-
}))
477-
}
465+
let stdoutAggregated = startAggregating(stdoutProducer)
466+
let stderrAggregated = startAggregating(stderrProducer)
478467

479468
rawTask.standardOutput = stdoutPipe.writeHandle
480469
rawTask.standardError = stderrPipe.writeHandle
481470

482471
dispatch_group_enter(group)
483472
rawTask.terminationHandler = { nstask in
484-
func getProducer(property: MutableProperty<Aggregation?>) -> SignalProducer<NSData, TaskError> {
473+
func getProducer(property: AnyProperty<Aggregation?>) -> SignalProducer<NSData, TaskError> {
485474
return property.producer
486475
.ignoreNil()
487476
.promoteErrors(TaskError.self)

0 commit comments

Comments
 (0)