TempPresetsIntentRequest.swift 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import CoreData
  2. import Foundation
  3. @available(iOS 16.0, *) final class TempPresetsIntentRequest: BaseIntentsRequest {
  4. enum TempPresetsError: Error {
  5. case noTempTargetFound
  6. case noDurationDefined
  7. }
  8. private func convert(tt: [TempTarget]) -> [tempPreset] {
  9. tt.map { tempPreset.convert($0) }
  10. }
  11. func fetchAll() -> [tempPreset] {
  12. convert(tt: tempTargetsStorage.presets())
  13. }
  14. func fetchIDs(_ uuid: [tempPreset.ID]) -> [tempPreset] {
  15. let UUIDTempTarget = tempTargetsStorage.presets().filter { uuid.contains(UUID(uuidString: $0.id)!) }
  16. return convert(tt: UUIDTempTarget)
  17. }
  18. func fetchOne(_ uuid: tempPreset.ID) -> tempPreset? {
  19. let UUIDTempTarget = tempTargetsStorage.presets().filter { UUID(uuidString: $0.id) == uuid }
  20. guard let OneTempTarget = UUIDTempTarget.first else { return nil }
  21. return tempPreset.convert(OneTempTarget)
  22. }
  23. func findTempTarget(_ tempPreset: tempPreset) throws -> TempTarget {
  24. let tempTargetFound = tempTargetsStorage.presets().filter { $0.id == tempPreset.id.uuidString }
  25. guard let tempOneTarget = tempTargetFound.first else { throw TempPresetsError.noTempTargetFound }
  26. return tempOneTarget
  27. }
  28. func enactTempTarget(_ presetTarget: TempTarget) throws -> TempTarget {
  29. var tempTarget = presetTarget
  30. tempTarget.createdAt = Date()
  31. storage.storeTempTargets([tempTarget])
  32. coredataContext.performAndWait {
  33. var tempTargetsArray = [TempTargetsSlider]()
  34. let requestTempTargets = TempTargetsSlider.fetchRequest() as NSFetchRequest<TempTargetsSlider>
  35. let sortTT = NSSortDescriptor(key: "date", ascending: false)
  36. requestTempTargets.sortDescriptors = [sortTT]
  37. if coredataContext.hasChanges {
  38. try? tempTargetsArray = coredataContext.fetch(requestTempTargets)
  39. }
  40. let whichID = tempTargetsArray.first(where: { $0.id == tempTarget.id })
  41. if whichID != nil {
  42. let saveToCoreData = TempTargets(context: self.coredataContext)
  43. saveToCoreData.active = true
  44. saveToCoreData.date = Date()
  45. saveToCoreData.hbt = whichID?.hbt ?? 160
  46. saveToCoreData.startDate = Date()
  47. saveToCoreData.duration = whichID?.duration ?? 0
  48. if coredataContext.hasChanges {
  49. try? self.coredataContext.save()
  50. }
  51. } else {
  52. let saveToCoreData = TempTargets(context: self.coredataContext)
  53. saveToCoreData.active = false
  54. saveToCoreData.date = Date()
  55. if coredataContext.hasChanges {
  56. try? self.coredataContext.save()
  57. }
  58. }
  59. }
  60. return tempTarget
  61. }
  62. func cancelTempTarget() throws {
  63. storage.storeTempTargets([TempTarget.cancel(at: Date())])
  64. try coredataContext.performAndWait {
  65. let saveToCoreData = TempTargets(context: self.coredataContext)
  66. saveToCoreData.active = false
  67. saveToCoreData.date = Date()
  68. if coredataContext.hasChanges {
  69. try self.coredataContext.save()
  70. }
  71. let setHBT = TempTargetsSlider(context: self.coredataContext)
  72. setHBT.enabled = false
  73. setHBT.date = Date()
  74. if coredataContext.hasChanges {
  75. try self.coredataContext.save()
  76. }
  77. }
  78. }
  79. }