From 2db4b42fa118231da851074855f46bff218161cc Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Tue, 20 Oct 2026 22:01:16 +0200 Subject: [PATCH] Stop the calendar blinking empty after saving an event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Routing the post-save reload through the manual sync button made a new Home Assistant event appear, but at the cost of invalidateCache(), which drops the cached events as well as the range bounds — so every event vanished and reappeared for one new one. That reads as unfinished, and it is. Only the range bounds have to go: nil bounds are what force the next fetch to reach the server. The events can stay on screen until the fresh ones replace them. Saving now does exactly that and nothing more; the menu's manual sync keeps clearing everything, which is what a full refresh is for. Co-Authored-By: Claude Opus 5 --- .../UserInterfaceState.xcuserstate | Bin 10733 -> 11227 bytes ios/Calendarr iOS/Models/CalendarStore.swift | 8 ++++++++ .../Views/Calendar/CalendarHostView.swift | 15 ++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ios/Calendarr iOS.xcodeproj/project.xcworkspace/xcuserdata/scarriffle.xcuserdatad/UserInterfaceState.xcuserstate b/ios/Calendarr iOS.xcodeproj/project.xcworkspace/xcuserdata/scarriffle.xcuserdatad/UserInterfaceState.xcuserstate index 5c63243c832111194425c280fa78f78b7ef98673..2e585ff4748db7786bad6d88bf2fdefde07ad0b3 100644 GIT binary patch delta 5115 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