TempTargetsStorage.swift 1013 B

123456789101112131415161718192021222324252627282930
  1. import Foundation
  2. import SwiftDate
  3. import Swinject
  4. protocol TempTargetsStorage {
  5. func storeTempTargets(_ targets: [TempTarget])
  6. }
  7. final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
  8. private let processQueue = DispatchQueue(label: "BaseTempTargetsStorage.processQueue")
  9. @Injected() private var storage: FileStorage!
  10. init(resolver: Resolver) {
  11. injectServices(resolver)
  12. }
  13. func storeTempTargets(_ targets: [TempTarget]) {
  14. processQueue.async {
  15. let file = OpenAPS.Settings.tempTargets
  16. try? self.storage.transaction { storage in
  17. try storage.append(targets, to: file, uniqBy: \.createdAt)
  18. let uniqEvents = try storage.retrieve(file, as: [TempTarget].self)
  19. .filter { $0.createdAt.addingTimeInterval(1.days.timeInterval) > Date() }
  20. .sorted { $0.createdAt > $1.createdAt }
  21. try storage.save(Array(uniqEvents), as: file)
  22. }
  23. }
  24. }
  25. }