Adds embedded AppSecrets configuration so Release/ClickOnce builds work without appsettings.Development.json or a Public Documents config file. Includes AppSecrets.example.cs as a template; copy to gitignored AppSecrets.cs and fill in credentials before publishing. Improves dashboard messages when HRMS is missing vs unreachable.
Prod DB users often lack SELECT on inventory.location_site. When that join fails, load distinct location sites from hrms.employee instead of failing the whole dropdown. Site names fall back to Site {id} when inventory titles are unavailable.
Update Sync History presentation for the renamed Device → Device operation.
- Map DeviceToDevice operations to Template Sync display text
- Keep the existing template sync icon styling for Device → Device history rows
Replace the old DB → Device page with the new Device → Device page.
- Remove the old DbToDevice view and code-behind
- Add the new DeviceToDevice view and code-behind
- Add source/target device selection
- Add connection checks, user loading, selection, progress, and sync action UI
Add the service logic for copying users and face templates from one Hikvision device to another.
- Rename DbToDevice sync method to DeviceToDevice
- Support source-device face download when source is connected
- Fall back to stored DB face templates when source is unavailable
- Register transferred users on the target machine
- Record Device → Device operation history
Introduce model support for the Device → Device sync flow.
- Replace DbToDevice sync operation with DeviceToDevice
- Update sync history display text for the renamed operation
- Add source display and face display fields for selectable machine users
- Add DeviceTransferUser model for transferring selected users
Update the main window navigation and page host from DB → Device to Device → Device.
- Rename the sidebar navigation item to Device → Device
- Route the new navigation tag to the new page
- Replace DbToDevice page/control references with DeviceToDevice references
Extends sync result types with UserCreated, FaceEnrolled, and OverallResult.PARTIAL so create/delete flows can report user-only vs face-enrollment outcomes.
Adds image normalization (480×640 portrait, JPEG ≤200 KB) required by the ISAPI face upload path. Commit this first so the project builds against the already-committed HikvisionIsapiClient.
Per-device test locks, 10s timeout, [DEVICE_TEST] logging, and outcome-based results.
Background device probes with parallel checks; maps outcomes to dashboard without false offline on parse errors.