BaseProvider.swift 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import Combine
  2. import Foundation
  3. import Swinject
  4. protocol Provider {
  5. init(resolver: Resolver)
  6. var user: CurrentValueSubject<User?, Never> { get }
  7. }
  8. class BaseProvider: Provider, Injectable {
  9. let user = CurrentValueSubject<User?, Never>(nil)
  10. var lifetime = Set<AnyCancellable>()
  11. @Injected() var authorizationManager: AuthorizationManager!
  12. @Injected() var deviceManager: DeviceDataManager!
  13. @Injected() var storage: FileStorage!
  14. required init(resolver: Resolver) {
  15. injectServices(resolver)
  16. subscribe()
  17. }
  18. private func subscribe() {
  19. authorizationManager.credentials
  20. .map { credentials -> User? in
  21. guard let credentials = credentials else { return nil }
  22. return User(id: credentials.id)
  23. }
  24. .sink { user in
  25. self.user.send(user)
  26. }
  27. .store(in: &lifetime)
  28. }
  29. func type(for file: String) -> JSON.Type {
  30. switch file {
  31. case OpenAPS.Monitor.pumpHistory:
  32. return [PumpHistoryEvent].self
  33. default:
  34. return RawJSON.self
  35. }
  36. }
  37. }