Skip to content

Commit 85b09db

Browse files
committed
fix: handle missing event calendar and simplify cancellation path
1 parent d22198e commit 85b09db

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

app/dauphin/Utilities/EventManager.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,19 @@ import EventKit
1919
}
2020

2121
/// 將你的模型轉成 EKEvent,給編輯器預填
22-
func makeEKEvent(from ce: CalendarEvent) -> EKEvent {
22+
/// Returns nil when no writable calendar is available.
23+
func makeEKEvent(from ce: CalendarEvent) -> EKEvent? {
24+
guard
25+
let calendar = eventStore.defaultCalendarForNewEvents
26+
?? eventStore.calendars(for: .event).first
27+
else { return nil }
28+
2329
let ek = EKEvent(eventStore: eventStore)
2430
ek.title = ce.event
2531
ek.startDate = ce.startDate
2632
ek.endDate = ce.endDate
2733
ek.isAllDay = Calendar.current.isDate(ce.startDate, inSameDayAs: ce.endDate)
28-
if let calendar = eventStore.defaultCalendarForNewEvents
29-
?? eventStore.calendars(for: .event).first
30-
{
31-
ek.calendar = calendar
32-
}
34+
ek.calendar = calendar
3335
return ek
3436
}
3537
}

app/dauphin/View/Other/Event/EventView.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ struct EventView: View {
2828
Button {
2929
Task {
3030
if await eventManager.requestWriteAccess() {
31-
editorItem = EditItem(
32-
ekEvent: eventManager.makeEKEvent(from: event))
31+
if let ekEvent = eventManager.makeEKEvent(from: event) {
32+
editorItem = EditItem(ekEvent: ekEvent)
33+
}
3334
}
3435
}
3536
} label: {

app/dauphin/ViewModels/EventViewModel.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ import OSLog
4545
return delegate.events
4646
}
4747

48-
if Task.isCancelled { throw CancellationError() }
49-
5048
if let err = parser.parserError { throw err }
5149

5250
throw NSError(

0 commit comments

Comments
 (0)