Initial Commit
This commit is contained in:
33
Screaming Reminder/Models/Extensions.swift
Normal file
33
Screaming Reminder/Models/Extensions.swift
Normal file
@ -0,0 +1,33 @@
|
||||
//
|
||||
// Extensions.swift
|
||||
// Screaming Reminder
|
||||
//
|
||||
// Created by Amine Bou on 23/07/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension Date {
|
||||
func withSpecificHour(hour: Int) -> Date {
|
||||
var dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: self)
|
||||
dateComponents.hour = hour
|
||||
dateComponents.minute = 0
|
||||
return Calendar.current.date(from: dateComponents).unsafelyUnwrapped
|
||||
}
|
||||
|
||||
func atZeroMinutes() -> Date {
|
||||
var dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: self)
|
||||
dateComponents.minute = 0
|
||||
return Calendar.current.date(from: dateComponents).unsafelyUnwrapped
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension Set {
|
||||
mutating func insertAll(_ newMembers: [Set.Element]) {
|
||||
newMembers.forEach { (member) in
|
||||
self.insert(member)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
35
Screaming Reminder/Models/Notification.swift
Normal file
35
Screaming Reminder/Models/Notification.swift
Normal file
@ -0,0 +1,35 @@
|
||||
//
|
||||
// Item.swift
|
||||
// Screaming Reminder
|
||||
//
|
||||
// Created by Amine Bou on 11/07/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
final class Notification: CustomStringConvertible {
|
||||
var reminder: Reminder
|
||||
var triggers: [UNCalendarNotificationTrigger]
|
||||
|
||||
|
||||
init(reminder: Reminder) {
|
||||
self.reminder = reminder
|
||||
self.triggers = getTriggersForReminder(reminder: reminder)
|
||||
}
|
||||
|
||||
public var description: String { return "\(reminder) + \(triggers)" }
|
||||
|
||||
|
||||
}
|
||||
|
||||
func getTriggersForReminder(reminder: Reminder) -> [UNCalendarNotificationTrigger] {
|
||||
return reminder.when.map {
|
||||
let components = NSCalendar.current.dateComponents([.second, .minute, .hour], from: $0)
|
||||
return UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
|
||||
}
|
||||
}
|
||||
|
||||
func getIdentifier(reminder: Reminder, trigger: UNCalendarNotificationTrigger) -> String {
|
||||
return "\(reminder.label)-\(trigger.dateComponents.hour ?? -1)-\(trigger.dateComponents.minute ?? -1)"
|
||||
}
|
33
Screaming Reminder/Models/Reminder.swift
Normal file
33
Screaming Reminder/Models/Reminder.swift
Normal file
@ -0,0 +1,33 @@
|
||||
//
|
||||
// Reminder.swift
|
||||
// Screaming Reminder
|
||||
//
|
||||
// Created by Amine Bou on 11/07/2024.
|
||||
//
|
||||
import SwiftUI
|
||||
import SwiftData
|
||||
|
||||
|
||||
@Model
|
||||
final class Reminder: CustomStringConvertible {
|
||||
|
||||
var label: String
|
||||
var when: [Date]
|
||||
|
||||
|
||||
required init(label: String, when: [Date]) {
|
||||
self.label = label
|
||||
self.when = when
|
||||
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
let dateFormatter: DateFormatter = {
|
||||
let formatter = DateFormatter()
|
||||
formatter.timeStyle = .short
|
||||
return formatter
|
||||
}()
|
||||
let smallestDate = self.when.sorted()[0]
|
||||
return "\(label) - Tous les jours, à partir de \(dateFormatter.string(from: smallestDate))"
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user