PluginManager.swift 2.3 KB

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