TempTargetStored+Helper.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import CoreData
  2. import Foundation
  3. extension NSPredicate {
  4. static var allTempTargetPresets: NSPredicate {
  5. NSPredicate(format: "isPreset == %@", true as NSNumber)
  6. }
  7. static var lastActiveTempTarget: NSPredicate {
  8. let date = Date.oneDayAgo
  9. return NSPredicate(
  10. format: "date >= %@ AND enabled == %@",
  11. date as NSDate,
  12. true as NSNumber
  13. )
  14. }
  15. static var tempTargetsForMainChart: NSPredicate {
  16. let date = Date.oneDayAgo
  17. return NSPredicate(
  18. format: "(date >= %@ AND enabled == %@) OR (date >= %@ AND enabled == %@ AND isPreset == %@)",
  19. date as NSDate,
  20. true as NSNumber,
  21. Date() as NSDate,
  22. false as NSNumber,
  23. false as NSNumber
  24. )
  25. }
  26. }
  27. extension TempTargetStored {
  28. /// Running temp targets and upcoming scheduled ones. Enacting a preset enables the preset row itself,
  29. /// so enabled presets are running temp targets; inactive presets are templates and never drawn.
  30. var isVisibleInChart: Bool {
  31. enabled || (!isPreset && (date ?? .distantPast) > Date())
  32. }
  33. static func fetch(_ predicate: NSPredicate, ascending: Bool, fetchLimit: Int? = nil) -> NSFetchRequest<TempTargetStored> {
  34. let request = TempTargetStored.fetchRequest()
  35. request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: ascending)]
  36. request.predicate = predicate
  37. if let fetchLimit = fetchLimit {
  38. request.fetchLimit = fetchLimit
  39. }
  40. return request
  41. }
  42. }