BolusIntentRequest.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import Combine
  2. import CoreData
  3. import Foundation
  4. @available(iOS 16.0,*) final class BolusIntentRequest: BaseIntentsRequest {
  5. private var suggestion: Determination? {
  6. fileStorage.retrieve(OpenAPS.Enact.suggested, as: Determination.self)
  7. }
  8. func bolus(_ bolusAmount: Double) async throws -> LocalizedStringResource {
  9. var bolusQ: Decimal = 0
  10. switch settingsManager.settings.bolusShortcut {
  11. case .noAllowed:
  12. return LocalizedStringResource(
  13. "Bolusing is not allowed with Shortcuts",
  14. table: "ShortcutsDetail"
  15. )
  16. case .limitBolusMax:
  17. bolusQ = apsManager
  18. .roundBolus(amount: min(settingsManager.pumpSettings.maxBolus, Decimal(bolusAmount)))
  19. case .limitInsulinSuggestion:
  20. let insulinSuggestion = suggestion?.insulinForManualBolus ?? 0
  21. bolusQ = apsManager
  22. .roundBolus(amount: min(
  23. insulinSuggestion * (settingsManager.settings.insulinReqPercentage / 100),
  24. Decimal(bolusAmount)
  25. ))
  26. }
  27. await apsManager.enactBolus(amount: Double(bolusQ), isSMB: false)
  28. return LocalizedStringResource(
  29. "A bolus command of \(bolusQ.formatted()) U of insulin was sent",
  30. table: "ShortcutsDetail"
  31. )
  32. }
  33. private var glucoseFormatter: NumberFormatter {
  34. let formatter = NumberFormatter()
  35. formatter.numberStyle = .decimal
  36. formatter.maximumFractionDigits = 0
  37. if settingsManager.settings.units == .mmolL {
  38. formatter.minimumFractionDigits = 1
  39. formatter.maximumFractionDigits = 1
  40. }
  41. formatter.roundingMode = .halfUp
  42. return formatter
  43. }
  44. }