-
BusyMirror 1.5.1 Stable
released this
2026-05-27 13:50:24 +00:00 | 0 commits to main since this releaseBusyMirror 1.5.1
Bug fixes
-
Mirror index written on every sync —
MirrorRecord's synthesized equality check included anupdatedAttimestamp that is always set to the current date when a record is constructed. This meant every sync run marked the index as dirty and rewrote it toUserDefaults, even when no mirror events changed. Fixed with a custom==that ignoresupdatedAt. -
Mirror URLs corrupted by special characters in calendar IDs — Calendar and source IDs placed into the
mirror://URL were not percent-encoded before joining with;. An ID containing;would cause the URL to be mis-parsed on the next sync, potentially losing the link between a placeholder and its source event. IDs are now encoded withmirrorURLComponentEncode(already present and tested since 1.4.0) and the URL path is assigned viapercentEncodedPathto prevent double-encoding. -
Calendar picker jumped during route cleanup — Running "Cleanup Placeholders" over saved routes changed the source/target picker selection for each route. Cleanup no longer mutates the UI selection.
-
--exitflag was always implied — Using--routesor--run-saved-routesalways terminated the app, making--exitredundant. The app now exits only when--exitis explicitly passed.
Improvements
-
Live calendar refresh — The calendar list now updates automatically when the system calendar database changes (new account added, calendar renamed, etc.), without requiring a manual "Refresh Calendars" press.
-
AppLogStoreextracted into its own file; deprecatedFileHandleAPI replaced with the modern throwing variant. -
Block.span(start:end:)convenience factory added toBlockMath, eliminating repetitive nil-field construction. -
Redundant
MainActor.run {}wrappers removed fromMirrorEngine(already running on@MainActor).
Downloads
-