Initial Commit

This commit is contained in:
aminecmi
2024-07-11 12:38:11 +02:00
parent dc63e0c91e
commit 7aa8fab7f5
20 changed files with 1127 additions and 0 deletions

View 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)
}
}
}

View 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)"
}

View 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))"
}
}