Calendarr: ein Blick alle zwei Minuten unter die Benachrichtigung
Onyx holt sich nichts, sondern liest den Schnappschuss, den Calendarr in den gemeinsamen Ordner schreibt — kein Netzzugriff, kein zweiter Zwischenspeicher. Gemeldet wird das über eine Darwin-Nachricht, und darauf hört Onyx. Die Nachricht ist aber flüchtig: schreibt Calendarr, während Onyx nicht läuft oder gerade startet, kommt sie nie an. Der Schnappschuss steht dann so lange still, bis Calendarr das nächste Mal schreibt — und die Terminliste ist aus unerfindlichen Gründen von gestern. Also zusätzlich alle zwei Minuten nachsehen, solange Calendarr überhaupt gefragt wird. Das kostet das Einlesen einer Datei von vierzehn Kilobyte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -56,6 +56,8 @@ public final class CalendarModel {
|
||||
private var refreshTask: Task<Void, Never>?
|
||||
/// `nil` = nicht auf Calendarr-Änderungen angemeldet.
|
||||
private var calendarrObserver: DarwinObserver?
|
||||
/// Das Sicherheitsnetz unter der Benachrichtigung.
|
||||
private var calendarrTimer: Timer?
|
||||
|
||||
public init(appleSource: CalendarSource = EventKitSource(),
|
||||
calendarrSource: CalendarSource = CalendarrSource(),
|
||||
@@ -108,6 +110,21 @@ public final class CalendarModel {
|
||||
Task { @MainActor in self?.refresh() }
|
||||
}
|
||||
: nil
|
||||
|
||||
// Dazu ein Blick alle zwei Minuten.
|
||||
//
|
||||
// Die Benachrichtigung ist der schnelle Weg, aber sie ist flüchtig:
|
||||
// schreibt Calendarr, während Onyx nicht läuft oder gerade startet,
|
||||
// kommt sie nie an — und dann steht der Schnappschuss so lange still,
|
||||
// bis Calendarr das nächste Mal schreibt. Das Nachsehen kostet das
|
||||
// Einlesen einer Datei von wenigen Kilobyte; das ist billiger als eine
|
||||
// Terminliste, die aus unerfindlichen Gründen von gestern ist.
|
||||
calendarrTimer?.invalidate()
|
||||
calendarrTimer = wanted
|
||||
? Timer.scheduledTimer(withTimeInterval: 120, repeats: true) { _ in
|
||||
MainActor.assumeIsolated { [weak self] in self?.refresh() }
|
||||
}
|
||||
: nil
|
||||
}
|
||||
|
||||
/// Fragt die Berechtigung an und lädt bei Erfolg gleich.
|
||||
|
||||
Reference in New Issue
Block a user