BaseProvider.swift 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. required init(resolver: Resolver) {
  13. injectServices(resolver)
  14. subscribe()
  15. }
  16. private func subscribe() {
  17. authorizationManager.credentials
  18. .map { credentials -> User? in
  19. guard let credentials = credentials else { return nil }
  20. return User(id: credentials.id)
  21. }
  22. .sink { user in
  23. self.user.send(user)
  24. }
  25. .store(in: &lifetime)
  26. }
  27. func defaults(for file: String) -> RawJSON {
  28. guard let url = Foundation.Bundle.main.url(forResource: "json/defaults/\(file)", withExtension: "") else {
  29. return ""
  30. }
  31. return (try? String(contentsOf: url)) ?? ""
  32. }
  33. func type(for file: String) -> JSON.Type {
  34. switch file {
  35. case OpenAPS.Monitor.pumpHistory:
  36. return [PumpHistoryEvent].self
  37. default:
  38. return RawJSON.self
  39. }
  40. }
  41. }