PluginManager.swift 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import CGMBLEKit
  2. import Foundation
  3. import G7SensorKit
  4. import G7SensorKitUI
  5. import LibreTransmitter
  6. import LibreTransmitterUI
  7. import LoopKit
  8. import LoopKitUI
  9. import Swinject
  10. protocol PluginManager {
  11. var availableCGMManagers: [CGMManagerDescriptor] { get }
  12. func getCGMManagerTypeByIdentifier(_ identifier: String) -> CGMManagerUI.Type?
  13. }
  14. class BasePluginManager: Injectable, PluginManager {
  15. struct CgmPluginDescription {
  16. let pluginIdentifier: String
  17. let localizedTitle: String
  18. let manager: CGMManagerUI.Type
  19. }
  20. static let cgms = [
  21. CgmPluginDescription(
  22. pluginIdentifier: G5CGMManager.pluginIdentifier,
  23. localizedTitle: "Dexcom G5",
  24. manager: G5CGMManager.self
  25. ),
  26. CgmPluginDescription(
  27. pluginIdentifier: G6CGMManager.pluginIdentifier,
  28. localizedTitle: "Dexcom G6 / ONE",
  29. manager: G6CGMManager.self
  30. ),
  31. CgmPluginDescription(
  32. pluginIdentifier: G7CGMManager.pluginIdentifier,
  33. localizedTitle: "Dexcom G7 / ONE+",
  34. manager: G7CGMManager.self
  35. ),
  36. CgmPluginDescription(
  37. pluginIdentifier: LibreTransmitterManagerV3.pluginIdentifier,
  38. localizedTitle: "FreeStyle Libre",
  39. manager: LibreTransmitterManagerV3.self
  40. )
  41. ]
  42. init(resolver: Resolver) {
  43. injectServices(resolver)
  44. }
  45. func getCGMManagerTypeByIdentifier(_ pluginIdentifier: String) -> CGMManagerUI.Type? {
  46. BasePluginManager.cgms.filter({ $0.pluginIdentifier == pluginIdentifier }).first?.manager
  47. }
  48. var availableCGMManagers: [CGMManagerDescriptor] {
  49. BasePluginManager.cgms.map { CGMManagerDescriptor(identifier: $0.pluginIdentifier, localizedTitle: $0.localizedTitle) }
  50. }
  51. }