TempPresetsIntentRequest.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. do {
  49. guard coredataContext.hasChanges else { return }
  50. try self.coredataContext.save()
  51. } catch {
  52. print(error.localizedDescription)
  53. }
  54. } else {
  55. let saveToCoreData = TempTargets(context: self.coredataContext)
  56. saveToCoreData.active = false
  57. saveToCoreData.date = Date()
  58. do {
  59. guard coredataContext.hasChanges else { return }
  60. try self.coredataContext.save()
  61. } catch {
  62. print(error.localizedDescription)
  63. }
  64. }
  65. }
  66. return tempTarget
  67. }
  68. func cancelTempTarget() throws {
  69. storage.storeTempTargets([TempTarget.cancel(at: Date())])
  70. try coredataContext.performAndWait {
  71. let saveToCoreData = TempTargets(context: self.coredataContext)
  72. saveToCoreData.active = false
  73. saveToCoreData.date = Date()
  74. if coredataContext.hasChanges {
  75. try self.coredataContext.save()
  76. }
  77. let setHBT = TempTargetsSlider(context: self.coredataContext)
  78. setHBT.enabled = false
  79. setHBT.date = Date()
  80. if coredataContext.hasChanges {
  81. try self.coredataContext.save()
  82. }
  83. }
  84. }
  85. }