Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6676e62889 | |||
| d1fbd4c81f | 
| @@ -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 = 5; | 				CURRENT_PROJECT_VERSION = 7; | ||||||
| 				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.3; | 				MARKETING_VERSION = 1.2.5; | ||||||
| 				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 = 5; | 				CURRENT_PROJECT_VERSION = 7; | ||||||
| 				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.3; | 				MARKETING_VERSION = 1.2.5; | ||||||
| 				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,13 @@ 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 { | ||||||
|  |         let manualOK = !targetIDs.isEmpty && sourceIndex < calendars.count | ||||||
|  |         return hasAccess && !isRunning && !calendars.isEmpty && (manualOK || !routes.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 +557,7 @@ struct ContentView: View { | |||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 .disabled(isRunning || targetSelections.isEmpty || calendars.isEmpty) |                 .disabled(!canRunMirrorNow) | ||||||
|  |  | ||||||
|                 Button("Cleanup Placeholders") { |                 Button("Cleanup Placeholders") { | ||||||
|                     if writeEnabled { |                     if writeEnabled { | ||||||
|   | |||||||
| @@ -1,7 +1,11 @@ | |||||||
| # 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.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. | ||||||
|  |  | ||||||
| ## [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. | ||||||
| @@ -15,4 +19,3 @@ All notable changes to BusyMirror will be documented in this file. | |||||||
|  |  | ||||||
| ## [1.2.0] - 2024-09-29 | ## [1.2.0] - 2024-09-29 | ||||||
| - Feature: multi-route mirroring, overlap modes, merge gaps, work hours filter, CLI support, export/import settings. | - Feature: multi-route mirroring, overlap modes, merge gaps, work hours filter, CLI support, export/import settings. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								ReleaseNotes-1.2.4.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ReleaseNotes-1.2.4.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # BusyMirror 1.2.4 — 2025-10-10 | ||||||
|  |  | ||||||
|  | Bugfix release improving route-driven mirroring. | ||||||
|  |  | ||||||
|  | Fixes | ||||||
|  | - Mirror Now is enabled when routes are defined, even if nothing is checked in the main window. This allows fully route-driven runs without requiring a temporary manual selection. | ||||||
|  |  | ||||||
|  | Build | ||||||
|  | - `make build-release` | ||||||
|  | - `make package` → BusyMirror-1.2.4-macOS.zip and .sha256 | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user