Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
df06564434 | |||
74b9949610 | |||
6676e62889 |
@@ -410,7 +410,7 @@
|
|||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 6;
|
CURRENT_PROJECT_VERSION = 9;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = BusyMirror/Info.plist;
|
INFOPLIST_FILE = BusyMirror/Info.plist;
|
||||||
@@ -421,7 +421,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.2.4;
|
MARKETING_VERSION = 1.3.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.cqrenet.BusyMirror;
|
PRODUCT_BUNDLE_IDENTIFIER = com.cqrenet.BusyMirror;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
REGISTER_APP_GROUPS = YES;
|
REGISTER_APP_GROUPS = YES;
|
||||||
@@ -440,7 +440,7 @@
|
|||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 6;
|
CURRENT_PROJECT_VERSION = 9;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = BusyMirror/Info.plist;
|
INFOPLIST_FILE = BusyMirror/Info.plist;
|
||||||
@@ -451,7 +451,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.2.4;
|
MARKETING_VERSION = 1.3.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.cqrenet.BusyMirror;
|
PRODUCT_BUNDLE_IDENTIFIER = com.cqrenet.BusyMirror;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
REGISTER_APP_GROUPS = YES;
|
REGISTER_APP_GROUPS = YES;
|
||||||
|
@@ -150,6 +150,14 @@ struct ContentView: View {
|
|||||||
@AppStorage("placeholderTitle") private var placeholderTitle: String = "Busy" // global customizable placeholder title
|
@AppStorage("placeholderTitle") private var placeholderTitle: String = "Busy" // global customizable placeholder title
|
||||||
@AppStorage("autoDeleteMissing") private var autoDeleteMissing: Bool = true // delete mirrors whose source instance no longer exists
|
@AppStorage("autoDeleteMissing") private var autoDeleteMissing: Bool = true // delete mirrors whose source instance no longer exists
|
||||||
|
|
||||||
|
// Mirrors can run either by manual selection (source + at least one target)
|
||||||
|
// or using predefined routes. This derived flag controls the Mirror Now button.
|
||||||
|
private var canRunMirrorNow: Bool {
|
||||||
|
// Enable Mirror Now whenever calendars are available and permission is granted.
|
||||||
|
// The action itself chooses between routes or manual selection.
|
||||||
|
return hasAccess && !isRunning && !calendars.isEmpty
|
||||||
|
}
|
||||||
|
|
||||||
private static let intFormatter: NumberFormatter = {
|
private static let intFormatter: NumberFormatter = {
|
||||||
let f = NumberFormatter()
|
let f = NumberFormatter()
|
||||||
f.numberStyle = .none
|
f.numberStyle = .none
|
||||||
@@ -550,7 +558,7 @@ struct ContentView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.disabled(isRunning || calendars.isEmpty || (routes.isEmpty && targetSelections.isEmpty))
|
.disabled(!canRunMirrorNow)
|
||||||
|
|
||||||
Button("Cleanup Placeholders") {
|
Button("Cleanup Placeholders") {
|
||||||
if writeEnabled {
|
if writeEnabled {
|
||||||
|
@@ -6,6 +6,10 @@ All notable changes to BusyMirror will be documented in this file.
|
|||||||
## [1.2.4] - 2025-10-10
|
## [1.2.4] - 2025-10-10
|
||||||
- Fix: enable “Mirror Now” when Routes are defined even if no Source/Targets are checked in the main window. Button now enables if either routes exist or a manual selection is present.
|
- Fix: enable “Mirror Now” when Routes are defined even if no Source/Targets are checked in the main window. Button now enables if either routes exist or a manual selection is present.
|
||||||
|
|
||||||
|
## [1.3.0] - 2025-10-10
|
||||||
|
- New: Mark Private option to mirror with prefix + real title and set event privacy on supported servers; available globally and per-route; persisted.
|
||||||
|
- Misc: calendar access fixes, concurrency annotations, accepted‑only filter, settings autosave/restore, Mirror Now enablement.
|
||||||
|
|
||||||
## [1.2.3] - 2025-10-10
|
## [1.2.3] - 2025-10-10
|
||||||
- Fix: reliably save and restore settings between runs via autosave of key options and restoration of source/target selections by persistent IDs.
|
- Fix: reliably save and restore settings between runs via autosave of key options and restoration of source/target selections by persistent IDs.
|
||||||
- UX: persist Source and Target selections; rebuild indices on launch so UI matches saved IDs.
|
- UX: persist Source and Target selections; rebuild indices on launch so UI matches saved IDs.
|
||||||
|
17
ReleaseNotes-1.3.0.md
Normal file
17
ReleaseNotes-1.3.0.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# BusyMirror 1.3.0 — 2025-10-10
|
||||||
|
|
||||||
|
New
|
||||||
|
- Mark Private option: mirror events with your prefix + real title while marking them Private on supported servers (e.g., Exchange). Co‑workers see the time block but not the details.
|
||||||
|
- Per-route and global toggles for Mark Private; persists in settings and export/import.
|
||||||
|
|
||||||
|
Fixes & improvements
|
||||||
|
- More reliable calendar loading after permission grant (reinit EKEventStore).
|
||||||
|
- Concurrency: `@MainActor` on permission/refresh methods.
|
||||||
|
- Accepted‑only filter via current user attendee `participantStatus`.
|
||||||
|
- Settings autosave and restore (including source/target selections by IDs).
|
||||||
|
- Mirror Now enabled when calendars available; routes or manual selection used as appropriate.
|
||||||
|
|
||||||
|
Build
|
||||||
|
- `make build-release`
|
||||||
|
- `make package` → BusyMirror-1.3.0-macOS.zip and .sha256
|
||||||
|
|
Reference in New Issue
Block a user