Skip to content

Commit

Permalink
FEAT: Show tool temperature in printer overview
Browse files Browse the repository at this point in the history
  • Loading branch information
josefdolezal committed May 9, 2017
1 parent 97ec18d commit a2dc868
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 3 deletions.
12 changes: 12 additions & 0 deletions OctoPhone/Generated/Localizable.Generated.swift
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,12 @@ enum L10n {
case targetTemperature
/// Terminal
case terminal
/// Tool temperature
case toolTemperature
/// Tool temperature offset
case toolTemperatureOffset
/// Tool temperature target
case toolTemperatureTarget
/// Unknown
case unknown
/// Uknown file
Expand Down Expand Up @@ -641,6 +647,12 @@ extension L10n: CustomStringConvertible {
return L10n.tr(key: "Target temperature")
case .terminal:
return L10n.tr(key: "Terminal")
case .toolTemperature:
return L10n.tr(key: "Tool temperature")
case .toolTemperatureOffset:
return L10n.tr(key: "Tool temperature offset")
case .toolTemperatureTarget:
return L10n.tr(key: "Tool temperature target")
case .unknown:
return L10n.tr(key: "Unknown")
case .unknownFile:
Expand Down
5 changes: 5 additions & 0 deletions OctoPhone/Networking/OctoPrintAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ typealias OctoPrintProvider = DynamicProvider<OctoPrintAPI>
/// - jogPrintHead - Jogs print head in given direction on given axis
/// - homePrintHead - Moves print head to home position on given axes
/// - extrudeFilamen - Extrudes fixed amount of filament
/// - currentToolState - Read current state of all printer tools
/// - currentBedState - Reads current bed state
/// - setBedTemperature - Sets given amount to given temperature type
/// - currentJob - Reads info about current job
Expand Down Expand Up @@ -77,6 +78,7 @@ enum OctoPrintAPI {
case homePrintHead(Set<JogAxis>)
// Print tool controls
case extrudeFilament
case currentToolState
// Bed
case currentBedState
case setBedTemperature(amout: Double, BedTemperatureType)
Expand Down Expand Up @@ -200,6 +202,9 @@ extension OctoPrintAPI: TargetPart {
case .extrudeFilament:
return ("api/printer/tool", .post, .request, ["command": "extrude", "amount": 5])

case .currentToolState:
return ("api/printer/tool", .get, .request, nil)

// Bed
case .currentBedState:
return ("api/printer/bed", .get, .request, nil)
Expand Down
15 changes: 14 additions & 1 deletion OctoPhone/View Related/Detail/DetailViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ class DetailViewController: BaseCollectionViewController {
// MARK: - UICollectionViewDataSource
extension DetailViewController {
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return viewModel.outputs.contentIsAvailable.value ? 3 : 0
return viewModel.outputs.contentIsAvailable.value ? 4 : 0
}

override func collectionView(_ collectionView: UICollectionView,
Expand All @@ -164,6 +164,7 @@ extension DetailViewController {
return section == 0 ? 2 : 3
}

// swiftlint:disable cyclomatic_complexity
override func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

Expand Down Expand Up @@ -209,6 +210,18 @@ extension DetailViewController {
case (2, 2):
return dequeueInfoCell(for: indexPath, collectionView: collectionView,
title: tr(.bedTemperatureOffset), detail: outputs.bedTemperatureOffset.value)
// Actual bed temperature
case (3, 0):
return dequeueInfoCell(for: indexPath, collectionView: collectionView,
title: tr(.toolTemperature), detail: outputs.toolTemperature.value)
// Target bed temperature
case (3, 1):
return dequeueInfoCell(for: indexPath, collectionView: collectionView,
title: tr(.toolTemperatureTarget), detail: outputs.toolTemperaturTarget.value)
// Offset bed temperature
case (3, 2):
return dequeueInfoCell(for: indexPath, collectionView: collectionView,
title: tr(.toolTemperatureOffset), detail: outputs.toolTemperatureOffset.value)
default:
fatalError("Unexpected IndexPath requested.")
}
Expand Down
33 changes: 31 additions & 2 deletions OctoPhone/View Related/Detail/DetailViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,15 @@ protocol DetailViewModelOutputs {
/// Printer bed offset temperature
var bedTemperatureOffset: Property<String> { get }

/// Current temperature of printer tool
var toolTemperature: Property<String> { get }

/// Target temperature of printer tool
var toolTemperaturTarget: Property<String> { get }

/// Printer tool offset temperature
var toolTemperatureOffset: Property<String> { get }

/// Indicates whether the current job is cancellable
var jobCancellable: Property<Bool> { get }

Expand Down Expand Up @@ -124,6 +133,12 @@ final class DetailViewModel: DetailViewModelType, DetailViewModelInputs, DetailV

let bedTemperatureOffset: Property<String>

let toolTemperature: Property<String>

let toolTemperaturTarget: Property<String>

let toolTemperatureOffset: Property<String>

let jobCancellable: Property<Bool>

let dataChanged: SignalProducer<(), NoError>
Expand All @@ -147,6 +162,8 @@ final class DetailViewModel: DetailViewModelType, DetailViewModelInputs, DetailV
/// Current state value
private let stateProperty = MutableProperty<PrinterState?>(nil)

private let toolProperty = MutableProperty<Tool?>(nil)

/// Last error occured
private let displayErrorProperty = MutableProperty<DisplayableError?>(nil)

Expand Down Expand Up @@ -183,6 +200,7 @@ final class DetailViewModel: DetailViewModelType, DetailViewModelInputs, DetailV
let jobProducer = jobProperty.producer.skipNil()
let bedProducer = bedProperty.producer.skipNil()
let printerProducer = printerProperty.producer.skipNil()
let toolProducer = toolProperty.producer.skipNil()
let imageProducer = imageProperty.producer.skipNil()

self.displayError = displayErrorProperty.producer.skipNil()
Expand All @@ -202,6 +220,12 @@ final class DetailViewModel: DetailViewModelType, DetailViewModelInputs, DetailV
then: bedProducer.map({ $0.targetTemperature }).formatTemperature())
self.bedTemperatureOffset = Property(initial: tr(.unknown),
then: bedProducer.map({ $0.offsetTemperature }).formatTemperature())
self.toolTemperature = Property(initial: tr(.unknown),
then: toolProducer.map({ $0.actualTemperature }).formatTemperature())
self.toolTemperaturTarget = Property(initial: tr(.unknown),
then: toolProducer.map({ $0.targetTemperature }).formatTemperature())
self.toolTemperatureOffset = Property(initial: tr(.unknown),
then: toolProducer.map({ $0.offsetTemperature }).formatTemperature())
self.jobPreview = Property(initial: FontAwesomeIcon.lightBulbIcon.image(ofSize: CGSize(width: 60, height: 60),
color: Colors.Pallete.greyHue3),
then: imageProducer)
Expand Down Expand Up @@ -284,13 +308,18 @@ final class DetailViewModel: DetailViewModelType, DetailViewModelInputs, DetailV
.filterSuccessfulStatusCodes()
.mapJSON()
.mapTo(object: PrinterState.self)
.flatMap(FlattenStrategy.latest) { state -> SignalProducer<Any, MoyaError> in
.flatMap(.latest) { state -> SignalProducer<Any, MoyaError> in
self.stateProperty.value = state
return self.provider.request(.currentJob).filterSuccessfulStatusCodes().mapJSON()
}
.mapTo(object: Job.self)
.flatMap(FlattenStrategy.latest) { job -> SignalProducer<Any, MoyaError> in
.flatMap(.latest) { job -> SignalProducer<Any, MoyaError> in
self.jobProperty.value = job
return self.provider.request(.currentToolState).filterSuccessfulStatusCodes().mapJSON()
}
.mapDictionary(collectionOf: Tool.self)
.flatMap(.latest) { tools -> SignalProducer<Any, MoyaError> in
self.toolProperty.value = tools.first
return self.provider.request(.currentBedState).filterSuccessfulStatusCodes().mapJSON()
}
.mapTo(object: Bed.self, forKeyPath: "bed")
Expand Down
3 changes: 3 additions & 0 deletions en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@
"Bed temperature" = "Bed temperature";
"Bed temperature target" = "Bed temperature target";
"Bed temperature offset" = "Bed temperature offset";
"Tool temperature" = "Tool temperature";
"Tool temperature offset" = "Tool temperature offset";
"Tool temperature target" = "Tool temperature target";
"Printer is currently not in operational state" = "Printer is currently not in operational state. If you want to connect printer, click the button below.";
"Connect printer" = "Connect.";
"Could not load printer stream" = "Could not load printer stream.";
Expand Down

0 comments on commit a2dc868

Please sign in to comment.