TempPresetsIntentRequest.swift 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. try? tempTargetsArray = coredataContext.fetch(requestTempTargets)
  38. let whichID = tempTargetsArray.first(where: { $0.id == tempTarget.id })
  39. if whichID != nil {
  40. let saveToCoreData = TempTargets(context: self.coredataContext)
  41. saveToCoreData.active = true
  42. saveToCoreData.date = Date()
  43. saveToCoreData.hbt = whichID?.hbt ?? 160
  44. saveToCoreData.startDate = Date()
  45. saveToCoreData.duration = whichID?.duration ?? 0
  46. try? self.coredataContext.save()
  47. } else {
  48. let saveToCoreData = TempTargets(context: self.coredataContext)
  49. saveToCoreData.active = false
  50. saveToCoreData.date = Date()
  51. try? self.coredataContext.save()
  52. }
  53. }
  54. return tempTarget
  55. }
  56. func cancelTempTarget() throws {
  57. storage.storeTempTargets([TempTarget.cancel(at: Date())])
  58. try coredataContext.performAndWait {
  59. let saveToCoreData = TempTargets(context: self.coredataContext)
  60. saveToCoreData.active = false
  61. saveToCoreData.date = Date()
  62. try self.coredataContext.save()
  63. let setHBT = TempTargetsSlider(context: self.coredataContext)
  64. setHBT.enabled = false
  65. setHBT.date = Date()
  66. try self.coredataContext.save()
  67. }
  68. }
  69. }