204 lines
5.3 KiB
Markdown
204 lines
5.3 KiB
Markdown
# System Patterns
|
|
|
|
## Window Capture Architecture
|
|
|
|
### Window Detection Pattern
|
|
1. SCShareableContent Access
|
|
- Async/await pattern for content access
|
|
- Proper error propagation
|
|
- Permission handling
|
|
|
|
2. Window Identification
|
|
- Multiple validation criteria:
|
|
```swift
|
|
let bundleID = window.owningApplication?.bundleIdentifier ?? ""
|
|
let isChessApp = bundleID == "com.chess.iphone"
|
|
let hasValidSize = window.frame.width > 100 && window.frame.height > 100
|
|
return isChessApp && window.isOnScreen && hasValidSize
|
|
```
|
|
- Fail-fast approach with guard statements
|
|
- Clear error states
|
|
|
|
### Capture System Pattern
|
|
1. Stream Configuration
|
|
- Window-specific capture setup
|
|
- Frame dimension matching
|
|
- Proper delegate handling
|
|
|
|
2. Frame Processing
|
|
- Main thread safety for UI updates
|
|
- Efficient image conversion pipeline
|
|
- Resource cleanup
|
|
|
|
### Error Handling Pattern
|
|
1. Task Management
|
|
- Proper cancellation points
|
|
- Clean state management
|
|
- Resource cleanup
|
|
|
|
2. Error States
|
|
- Clear error types
|
|
- User-friendly messages
|
|
- State recovery
|
|
|
|
## UI Architecture
|
|
|
|
### MVVM Implementation
|
|
1. ViewModel
|
|
- @MainActor for thread safety
|
|
- Published properties for state
|
|
- Clear separation of concerns
|
|
|
|
2. View Layer
|
|
- SwiftUI declarative UI
|
|
- State-driven updates
|
|
- Error presentation
|
|
|
|
### Async Operations
|
|
1. Task Management
|
|
- Structured concurrency
|
|
- Proper cancellation
|
|
- State synchronization
|
|
|
|
2. State Updates
|
|
- Main thread safety
|
|
- Clear state transitions
|
|
- Error recovery
|
|
|
|
## Core Architecture
|
|
|
|
### Resource Management Patterns
|
|
1. Shared CIContext Pattern
|
|
- Static shared instance:
|
|
```swift
|
|
private static let shared = CIContext()
|
|
private var context: CIContext { Self.shared }
|
|
```
|
|
- Benefits:
|
|
* Prevents Metal command queue exhaustion
|
|
* Reduces resource overhead
|
|
* Enables long-running captures
|
|
- Implementation:
|
|
* Used in BoardDetector and ViewModel
|
|
* Proper cleanup on task completion
|
|
* Thread-safe access
|
|
|
|
### Screen Capture System
|
|
- Uses ScreenCaptureKit for efficient screen capture
|
|
- Implements SCStreamOutput protocol for frame processing
|
|
- Handles capture session lifecycle and cleanup
|
|
- Manages permissions and error handling
|
|
- Optimized resource usage
|
|
|
|
### Board Detection System
|
|
Two implemented approaches:
|
|
|
|
1. Pattern Recognition Approach (Primary)
|
|
- Rectangle detection with Vision framework
|
|
- Aspect ratio-based filtering (0.3-0.5 for taller rectangles)
|
|
- Size-based filtering (0.4 minimum for larger areas)
|
|
- Single observation for precision
|
|
- Board extraction from upper portion
|
|
- Width-based square calculation
|
|
|
|
2. Coordinate Detection (Fallback)
|
|
- Text recognition for board coordinates
|
|
- Rectangle detection with Vision framework
|
|
- Grid-based validation
|
|
- Coordinate-based refinement
|
|
|
|
3. Common Infrastructure
|
|
- Asynchronous frame processing
|
|
- Dedicated processing queue
|
|
- Efficient memory management
|
|
- Performance monitoring
|
|
|
|
### Coordinate Systems
|
|
- Vision framework: Bottom-left origin (0,0)
|
|
- NSImage/CGImage: Bottom-left origin (0,0)
|
|
- SwiftUI: Top-left origin (0,0)
|
|
- Transformations needed between systems:
|
|
1. Vision → Screen: Flip Y coordinate
|
|
2. Screen → Image: Direct mapping
|
|
3. Image → View: SwiftUI handles automatically
|
|
|
|
### Notification System
|
|
- Uses NotificationCenter for event propagation
|
|
- Key notifications:
|
|
- boardDetected: Sends detected board rectangle and confidence score
|
|
- captureStateChanged: Updates capture status
|
|
- capturedFrame: Delivers processed frames
|
|
- boardCoordinatesDetected: Reports coordinate detection
|
|
- detectionStats: Reports performance metrics
|
|
|
|
## Design Patterns
|
|
|
|
### MVVM Architecture
|
|
- ScreenCapture: Model layer handling capture logic
|
|
- ScreenCaptureViewModel: View model managing UI state
|
|
- ContentView: SwiftUI view for user interface
|
|
|
|
### Observer Pattern
|
|
- NotificationCenter for loose coupling
|
|
- Enables modular component communication
|
|
- Supports async event handling
|
|
|
|
### Error Handling
|
|
- Custom ScreenCaptureError enum
|
|
- Comprehensive error cases
|
|
- Proper error propagation
|
|
|
|
## Technical Decisions
|
|
|
|
### Vision Framework
|
|
- Primary tool for board detection
|
|
- Provides rectangle and text detection
|
|
- Handles various board orientations
|
|
- Requires coordinate system transformation
|
|
|
|
### Pattern Recognition
|
|
- Focus on larger detection areas
|
|
- Use width as reference measurement
|
|
- Extract square board from top portion
|
|
- Maintain aspect ratio constraints
|
|
|
|
### Performance Considerations
|
|
- Dedicated dispatch queue for frame processing
|
|
- Efficient memory management
|
|
- Proper resource cleanup
|
|
- Single observation optimization
|
|
|
|
## Future Patterns
|
|
|
|
### Planned Implementations
|
|
1. Board Position Analysis
|
|
- ML model integration
|
|
- Piece detection system
|
|
- Position validation
|
|
|
|
2. Move Analysis
|
|
- Stockfish integration
|
|
- Real-time evaluation
|
|
- Visual overlay system
|
|
|
|
3. State Management
|
|
- Game state tracking
|
|
- Move history
|
|
- Analysis persistence
|
|
|
|
## Testing Patterns
|
|
|
|
### Unit Testing
|
|
- ScreenCapture functionality
|
|
- Board detection accuracy
|
|
- Coordinate recognition
|
|
|
|
### Integration Testing
|
|
- End-to-end capture workflow
|
|
- Vision framework integration
|
|
- Notification system
|
|
|
|
### UI Testing
|
|
- SwiftUI interface validation
|
|
- User interaction flows
|
|
- Error state handling
|