TempPresetsIntentRequest.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. // TODO: - probably broken for now...
  29. func enactTempTarget(_ presetTarget: TempTarget) throws -> TempTarget {
  30. var tempTarget = presetTarget
  31. tempTarget.createdAt = Date()
  32. storage.storeTempTargets([tempTarget])
  33. coredataContext.performAndWait {
  34. var tempTargetsArray = [TempTargetStored]()
  35. let requestTempTargets = TempTargetStored.fetchRequest() as NSFetchRequest<TempTargetStored>
  36. let sortTT = NSSortDescriptor(key: "date", ascending: false)
  37. requestTempTargets.sortDescriptors = [sortTT]
  38. if coredataContext.hasChanges {
  39. try? tempTargetsArray = coredataContext.fetch(requestTempTargets)
  40. }
  41. let whichID = tempTargetsArray.first(where: { $0.id == UUID(uuidString: tempTarget.id) })
  42. if whichID != nil {
  43. let saveToCoreData = TempTargetStored(context: self.coredataContext)
  44. saveToCoreData.enabled = true
  45. saveToCoreData.date = Date()
  46. saveToCoreData.target = whichID?.target ?? 160
  47. saveToCoreData.date = Date()
  48. saveToCoreData.duration = whichID?.duration ?? 0
  49. do {
  50. guard coredataContext.hasChanges else { return }
  51. try self.coredataContext.save()
  52. } catch {
  53. print(error.localizedDescription)
  54. }
  55. } else {
  56. let saveToCoreData = TempTargetStored(context: self.coredataContext)
  57. saveToCoreData.enabled = false
  58. saveToCoreData.date = Date()
  59. do {
  60. guard coredataContext.hasChanges else { return }
  61. try self.coredataContext.save()
  62. } catch {
  63. print(error.localizedDescription)
  64. }
  65. }
  66. }
  67. return tempTarget
  68. }
  69. func cancelTempTarget() throws {
  70. storage.storeTempTargets([TempTarget.cancel(at: Date())])
  71. try coredataContext.performAndWait {
  72. let saveToCoreData = TempTargetStored(context: self.coredataContext)
  73. saveToCoreData.enabled = false
  74. saveToCoreData.date = Date()
  75. if coredataContext.hasChanges {
  76. try self.coredataContext.save()
  77. }
  78. let setHBT = TempTargetStored(context: self.coredataContext)
  79. setHBT.enabled = false
  80. setHBT.date = Date()
  81. if coredataContext.hasChanges {
  82. try self.coredataContext.save()
  83. }
  84. }
  85. }
  86. }