BackgroundRefreshType.swift 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // BackgroundRefreshType.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2025-01-02.
  6. //
  7. import Foundation
  8. enum BackgroundRefreshType: String, Codable, CaseIterable {
  9. case none = "None"
  10. case silentTune = "Silent Tune"
  11. case rileyLink = "RileyLink"
  12. case dexcom = "Dexcom"
  13. case omnipodDash = "Omnipod Dash"
  14. /// Indicates if the device type uses Bluetooth
  15. var isBluetooth: Bool {
  16. switch self {
  17. case .rileyLink, .dexcom, .omnipodDash:
  18. return true
  19. case .silentTune, .none:
  20. return false
  21. }
  22. }
  23. var heartBeatInterval: TimeInterval? {
  24. switch self {
  25. case .rileyLink:
  26. return 60
  27. case .omnipodDash:
  28. return 3 * 60
  29. case .dexcom:
  30. return 5 * 60
  31. case .silentTune, .none:
  32. return nil
  33. }
  34. }
  35. var estimatedDelayBasedOnHeartbeat: Bool {
  36. switch self {
  37. case .rileyLink:
  38. return true
  39. case .dexcom, .omnipodDash, .silentTune, .none:
  40. return false
  41. }
  42. }
  43. /// Determines if a BLEDevice matches the specific device type
  44. func matches(_ device: BLEDevice) -> Bool {
  45. switch self {
  46. case .rileyLink:
  47. let rileyUUIDString = "0235733b-99c5-4197-b856-69219c2a3845"
  48. if let services = device.advertisedServices {
  49. return services.map { $0.lowercased() }
  50. .contains(rileyUUIDString.lowercased())
  51. }
  52. return false
  53. case .dexcom:
  54. if let name = device.name {
  55. return name.hasPrefix("DXCM") || name.hasPrefix("DX02") || name.hasPrefix("Dexcom")
  56. }
  57. return false
  58. case .omnipodDash:
  59. if let name = device.name {
  60. return name == "TWI BOARD"
  61. }
  62. return false
  63. case .silentTune, .none:
  64. return false
  65. }
  66. }
  67. }