Release 1.3.4
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -18,6 +18,7 @@ ExportOptions.plist
|
|||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
*.swp
|
*.swp
|
||||||
|
*.profraw
|
||||||
*.zip
|
*.zip
|
||||||
*.sha256
|
*.sha256
|
||||||
dist/
|
dist/
|
||||||
|
|||||||
@@ -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 = 9;
|
CURRENT_PROJECT_VERSION = 12;
|
||||||
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.3.1;
|
MARKETING_VERSION = 1.3.4;
|
||||||
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 = 9;
|
CURRENT_PROJECT_VERSION = 12;
|
||||||
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.3.1;
|
MARKETING_VERSION = 1.3.4;
|
||||||
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;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
12
CHANGELOG.md
12
CHANGELOG.md
@@ -1,11 +1,21 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes to BusyMirror will be documented in this file.
|
All notable changes to BusyMirror will be documented in this file.
|
||||||
|
|
||||||
|
## [1.3.4] - 2026-03-13
|
||||||
|
- Fix: route-scoped cleanup no longer deletes placeholders created by other source routes during the same multi-route run.
|
||||||
|
- Fix: stale calendars are pruned from saved selections and routes during refresh, and refresh now recreates `EKEventStore` for a hard reload.
|
||||||
|
- UX: the top bar `DRY RUN` / `WRITE` status pill is clickable, the left column keeps its own height on desktop, and the app can reveal its log file from the UI.
|
||||||
|
- Logging: mirror activity is persisted to `~/Library/Logs/BusyMirror/BusyMirror.log` with simple rotation to `BusyMirror.previous.log`.
|
||||||
|
- CLI: add `--run-saved-routes` so scheduled `launchd` runs can use the saved UI routes instead of fragile index-based route definitions.
|
||||||
|
|
||||||
## [1.3.1] - 2025-10-13
|
## [1.3.1] - 2025-10-13
|
||||||
- Fix: auto-delete of mirrored placeholders when the source is removed now works even if no source instances remain in the window. Also cleans legacy mirrors without URLs by matching exact times.
|
- Fix: auto-delete of mirrored placeholders when the source is removed now works even if no source instances remain in the window. Also cleans legacy mirrors without URLs by matching exact times.
|
||||||
|
|
||||||
|
## [1.3.2] - 2025-10-13
|
||||||
|
- New: Organizer filters — skip events by organizer (name/email/URL). UI under Options and persisted in settings.
|
||||||
|
- CLI: add `--exclude-organizers` (and `--exclude-titles`) flags to control filters when running headless.
|
||||||
|
|
||||||
## [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.
|
||||||
|
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -37,7 +37,25 @@ See `CHANGELOG.md` for notable changes.
|
|||||||
## CLI (optional)
|
## CLI (optional)
|
||||||
- Run from Terminal with `--routes` to mirror without the UI. Example:
|
- Run from Terminal with `--routes` to mirror without the UI. Example:
|
||||||
- `BusyMirror.app/Contents/MacOS/BusyMirror --routes "1->2,3; 4->5" --write 1 --days-forward 7 --mode allow --exit`
|
- `BusyMirror.app/Contents/MacOS/BusyMirror --routes "1->2,3; 4->5" --write 1 --days-forward 7 --mode allow --exit`
|
||||||
- Flags exist for privacy, all-day, merge gap, days window, overlap mode, and cleanup.
|
- Run the routes already saved in the app settings:
|
||||||
|
- `BusyMirror.app/Contents/MacOS/BusyMirror --run-saved-routes --write 1 --exit`
|
||||||
|
- Flags exist for privacy, all-day, merge gap, days window, overlap mode, cleanup, and filters.
|
||||||
|
- Filters:
|
||||||
|
- `--exclude-titles "token1, token2"`
|
||||||
|
- `--exclude-organizers "alice@example.com, Example Org"`
|
||||||
|
- Tokens are comma or newline separated; matching is case-insensitive.
|
||||||
|
|
||||||
|
## Logs
|
||||||
|
- BusyMirror now writes a persistent log file to `~/Library/Logs/BusyMirror/BusyMirror.log`.
|
||||||
|
- When the file grows large, the previous file is rotated to `~/Library/Logs/BusyMirror/BusyMirror.previous.log`.
|
||||||
|
- In the UI, use `Reveal Log File` to open the current log directly in Finder.
|
||||||
|
|
||||||
|
## Scheduling
|
||||||
|
- Yes. The recommended way is macOS `launchd` calling the built-in CLI with saved routes:
|
||||||
|
- `/Applications/BusyMirror.app/Contents/MacOS/BusyMirror --run-saved-routes --write 1 --exit`
|
||||||
|
- This is more stable than index-based `--routes`, because it uses the routes and per-route options you already configured in the UI.
|
||||||
|
- A typical `launchd` job can run this on a daily or weekday schedule after you grant calendar access once in the app.
|
||||||
|
- Note: scheduled headless runs depend on Calendar permission being granted to the installed app. Because these local builds are unsigned, macOS may require re-granting permission after replacing the app bundle with a new build.
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
See [ROADMAP.md](ROADMAP.md)
|
See [ROADMAP.md](ROADMAP.md)
|
||||||
|
|||||||
11
ReleaseNotes-1.3.2.md
Normal file
11
ReleaseNotes-1.3.2.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
BusyMirror 1.3.2 — 2025-10-13
|
||||||
|
|
||||||
|
Changes
|
||||||
|
- Organizer filters: skip mirroring events whose organizer matches a name, email, or URL token. Case-insensitive. Configure in Options.
|
||||||
|
- CLI flags: `--exclude-organizers` and `--exclude-titles` accept comma/newline separated tokens. Example:
|
||||||
|
- `--routes "1->2" --write 1 --exclude-organizers "alice@example.com, Example Org" --exit`
|
||||||
|
|
||||||
|
Notes
|
||||||
|
- Export/Import settings now includes organizer filters (backwards compatible).
|
||||||
|
- No changes to event URL format; feature is fully optional.
|
||||||
|
|
||||||
9
ReleaseNotes-1.3.3.md
Normal file
9
ReleaseNotes-1.3.3.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
BusyMirror 1.3.3 — 2025-10-13
|
||||||
|
|
||||||
|
Changes
|
||||||
|
- UI: Options panel is scrollable to ensure new filters are always visible on smaller windows.
|
||||||
|
- Organizer filter: skip by organizer name/email/URL; settings persisted; usable via CLI with `--exclude-organizers`.
|
||||||
|
|
||||||
|
Build
|
||||||
|
- Version bump to 1.3.3 (build stays 11).
|
||||||
|
|
||||||
11
ReleaseNotes-1.3.4.md
Normal file
11
ReleaseNotes-1.3.4.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
BusyMirror 1.3.4 - 2026-03-13
|
||||||
|
|
||||||
|
Changes
|
||||||
|
- Fix multi-route cleanup so one source route no longer deletes mirrored placeholders created by another route.
|
||||||
|
- Persist activity logs to `~/Library/Logs/BusyMirror/BusyMirror.log` and expose a `Reveal Log File` action in the app.
|
||||||
|
- Add `--run-saved-routes` for headless runs using the routes configured in the UI, which makes `launchd` scheduling practical.
|
||||||
|
- Improve calendar refresh by pruning stale saved identifiers and recreating the EventKit store.
|
||||||
|
- Keep the left column from stretching to match the routes/log column on desktop layouts.
|
||||||
|
|
||||||
|
Build
|
||||||
|
- Version bump to 1.3.4 (build 12).
|
||||||
Reference in New Issue
Block a user