CgmEvent.swift 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //
  2. // CachedCgmEvent.swift
  3. // LoopKit
  4. //
  5. // Created by Pete Schwamb on 9/9/23.
  6. // Copyright © 2023 LoopKit Authors. All rights reserved.
  7. //
  8. import Foundation
  9. import CoreData
  10. class CgmEvent: NSManagedObject {
  11. @NSManaged var date: Date!
  12. @NSManaged var storedAt: Date!
  13. @NSManaged var primitiveType: String!
  14. @NSManaged var deviceIdentifier: String!
  15. @NSManaged var primitiveExpectedLifetime: NSNumber?
  16. @NSManaged var primitiveWarmupPeriod: NSNumber?
  17. @NSManaged var failureMessage: String?
  18. @NSManaged var modificationCounter: Int64
  19. var type: CgmEventType? {
  20. get {
  21. willAccessValue(forKey: "type")
  22. defer { didAccessValue(forKey: "type") }
  23. return CgmEventType(rawValue: primitiveType)
  24. }
  25. set {
  26. willChangeValue(forKey: "type")
  27. defer { didChangeValue(forKey: "type") }
  28. primitiveType = newValue?.rawValue
  29. }
  30. }
  31. var expectedLifetime: TimeInterval? {
  32. get {
  33. willAccessValue(forKey: "expectedLifetime")
  34. defer { didAccessValue(forKey: "expectedLifetime") }
  35. return primitiveExpectedLifetime?.doubleValue
  36. }
  37. set {
  38. willChangeValue(forKey: "expectedLifetime")
  39. defer { didChangeValue(forKey: "expectedLifetime") }
  40. primitiveExpectedLifetime = newValue.flatMap { NSNumber(floatLiteral: $0) }
  41. }
  42. }
  43. var warmupPeriod: TimeInterval? {
  44. get {
  45. willAccessValue(forKey: "warmupPeriod")
  46. defer { didAccessValue(forKey: "warmupPeriod") }
  47. return primitiveWarmupPeriod?.doubleValue
  48. }
  49. set {
  50. willChangeValue(forKey: "warmupPeriod")
  51. defer { didChangeValue(forKey: "warmupPeriod") }
  52. primitiveWarmupPeriod = newValue.flatMap { NSNumber(floatLiteral: $0) }
  53. }
  54. }
  55. @nonobjc public class func fetchRequest() -> NSFetchRequest<CgmEvent> {
  56. return NSFetchRequest<CgmEvent>(entityName: "CgmEvent")
  57. }
  58. var hasUpdatedModificationCounter: Bool { changedValues().keys.contains("modificationCounter") }
  59. func updateModificationCounter() { setPrimitiveValue(managedObjectContext!.modificationCounter!, forKey: "modificationCounter") }
  60. override func awakeFromInsert() {
  61. super.awakeFromInsert()
  62. updateModificationCounter()
  63. }
  64. override func willSave() {
  65. if isUpdated && !hasUpdatedModificationCounter {
  66. updateModificationCounter()
  67. }
  68. super.willSave()
  69. }
  70. }