BackgroundRefreshType.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. /// Indicates if the device type uses Bluetooth
  14. var isBluetooth: Bool {
  15. switch self {
  16. case .rileyLink, .dexcom:
  17. return true
  18. case .silentTune, .none:
  19. return false
  20. }
  21. }
  22. var heartBeatInterval: TimeInterval? {
  23. switch self {
  24. case .rileyLink:
  25. return 60
  26. case .dexcom:
  27. return 5 * 60
  28. case .silentTune, .none:
  29. return nil
  30. }
  31. }
  32. var estimatedDelayBasedOnHeartbeat: Bool {
  33. switch self {
  34. case .rileyLink:
  35. return true
  36. case .dexcom, .silentTune, .none:
  37. return false
  38. }
  39. }
  40. /// Determines if a BLEDevice matches the specific device type
  41. func matches(_ device: BLEDevice) -> Bool {
  42. switch self {
  43. case .rileyLink:
  44. let rileyUUIDString = "0235733b-99c5-4197-b856-69219c2a3845"
  45. if let services = device.advertisedServices {
  46. return services.map { $0.lowercased() }
  47. .contains(rileyUUIDString.lowercased())
  48. }
  49. return false
  50. case .dexcom:
  51. if let name = device.name {
  52. return name.hasPrefix("DXCM") || name.hasPrefix("DX02") || name.hasPrefix("Dexcom")
  53. }
  54. return false
  55. case .silentTune, .none:
  56. return false
  57. }
  58. }
  59. }