TempPresetsIntentRequest.swift 3.6 KB

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