TrioRemoteControl+TempTarget.swift 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import Foundation
  2. extension TrioRemoteControl {
  3. func handleTempTargetCommand(_ pushMessage: PushMessage) async {
  4. guard let targetValue = pushMessage.target,
  5. let durationValue = pushMessage.duration
  6. else {
  7. await logError("Command rejected: temp target data is incomplete or invalid.", pushMessage: pushMessage)
  8. return
  9. }
  10. let durationInMinutes = Int(durationValue)
  11. let pushMessageDate = Date(timeIntervalSince1970: pushMessage.timestamp)
  12. let tempTarget = TempTarget(
  13. name: TempTarget.custom,
  14. createdAt: pushMessageDate,
  15. targetTop: Decimal(targetValue),
  16. targetBottom: Decimal(targetValue),
  17. duration: Decimal(durationInMinutes),
  18. enteredBy: TempTarget.manual,
  19. reason: TempTarget.custom
  20. )
  21. tempTargetsStorage.storeTempTargets([tempTarget])
  22. debug(
  23. .remoteControl,
  24. "Remote command processed successfully. \(pushMessage.humanReadableDescription())"
  25. )
  26. }
  27. func cancelTempTarget(_ pushMessage: PushMessage) async {
  28. debug(.remoteControl, "Cancelling temp target.")
  29. guard tempTargetsStorage.current() != nil else {
  30. await logError("Command rejected: no active temp target to cancel.")
  31. return
  32. }
  33. let cancelEntry = TempTarget.cancel(at: Date())
  34. tempTargetsStorage.storeTempTargets([cancelEntry])
  35. debug(
  36. .remoteControl,
  37. "Remote command processed successfully. \(pushMessage.humanReadableDescription())"
  38. )
  39. }
  40. }