PluginManager.swift 2.1 KB

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