RemoteViewController.swift 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // RemoteViewController.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2024-07-19.
  6. // Copyright © 2024 Jon Fawcett. All rights reserved.
  7. //
  8. import Foundation
  9. import UIKit
  10. import SwiftUI
  11. import HealthKit
  12. class RemoteViewController: UIViewController {
  13. override func viewDidLoad() {
  14. super.viewDidLoad()
  15. let remoteView = RemoteView(
  16. onCancelExistingTarget: cancelExistingTarget,
  17. sendTempTarget: sendTempTarget
  18. )
  19. let hostingController = UIHostingController(rootView: remoteView)
  20. addChild(hostingController)
  21. view.addSubview(hostingController.view)
  22. hostingController.view.translatesAutoresizingMaskIntoConstraints = false
  23. NSLayoutConstraint.activate([
  24. hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
  25. hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
  26. hostingController.view.topAnchor.constraint(equalTo: view.topAnchor),
  27. hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
  28. ])
  29. hostingController.didMove(toParent: self)
  30. }
  31. private func cancelExistingTarget(completion: @escaping (Bool) -> Void) {
  32. Task {
  33. let tempTargetBody: [String: Any] = [
  34. "enteredBy": "LoopFollow",
  35. "eventType": "Temporary Target",
  36. "reason": "Manual",
  37. "duration": 0,
  38. "created_at": ISO8601DateFormatter().string(from: Date())
  39. ]
  40. do {
  41. let response: [TreatmentCancelResponse] = try await NightscoutUtils.executePostRequest(eventType: .treatments, body: tempTargetBody)
  42. Observable.shared.tempTarget.value = nil
  43. NotificationCenter.default.post(name: NSNotification.Name("refresh"), object: nil)
  44. completion(true)
  45. } catch {
  46. completion(false)
  47. }
  48. }
  49. }
  50. private func sendTempTarget(newTarget: HKQuantity, duration: HKQuantity, completion: @escaping (Bool) -> Void) {
  51. let tempTargetBody: [String: Any] = [
  52. "enteredBy": "LoopFollow",
  53. "eventType": "Temporary Target",
  54. "reason": "Manual",
  55. "targetTop": newTarget.doubleValue(for: .milligramsPerDeciliter),
  56. "targetBottom": newTarget.doubleValue(for: .milligramsPerDeciliter),
  57. "duration": Int(duration.doubleValue(for: .minute())),
  58. "created_at": ISO8601DateFormatter().string(from: Date())
  59. ]
  60. Task {
  61. do {
  62. let response: [TreatmentResponse] = try await NightscoutUtils.executePostRequest(eventType: .treatments, body: tempTargetBody)
  63. Observable.shared.tempTarget.value = newTarget
  64. NotificationCenter.default.post(name: NSNotification.Name("refresh"), object: nil)
  65. completion(true)
  66. } catch {
  67. completion(false)
  68. }
  69. }
  70. }
  71. }