Centralize legacy brush package export
This commit is contained in:
@@ -639,6 +639,16 @@ Known local toolchain state:
|
||||
preserving desktop worker-thread timelapse behavior, mobile/Web save
|
||||
callbacks, `App::rec_export`, animation `Canvas::export_anim_mp4`, and
|
||||
success messages; retained video/export ownership is tracked by `DEBT-0044`.
|
||||
- `src/legacy_brush_package_export_services.*` is the current app-shell bridge
|
||||
between `pp_app_core` PPBR brush package export requests and live
|
||||
`NodePanelBrushPreset::export_ppbr` execution. It preserves dialog metadata,
|
||||
the retained legacy `Image` header object, desktop worker-thread export,
|
||||
mobile/Web save completion, dialog lifetime, and success messages while brush
|
||||
asset/storage/UI/platform ownership is tracked by `DEBT-0047`.
|
||||
- `pp_app_core_brush_package_export_tests` covers PPBR export request path
|
||||
validation, metadata preservation, legacy-flexible destination/export-data
|
||||
combinations, service dispatch, and malformed request rejection without
|
||||
requiring a window, brush preset panel, or filesystem write.
|
||||
- `src/legacy_history_services.*` is the current app-shell bridge between
|
||||
`pp_app_core` history plans and legacy `ActionManager`; toolbar and
|
||||
`NodeCanvas` hotkeys share it while document-history extraction remains
|
||||
|
||||
@@ -64,6 +64,7 @@ agent or engineer to remove them without reconstructing context from chat.
|
||||
| DEBT-0044 | Open | Modernization | Timelapse and animation MP4 export execution dispatch now consumes pure `pp_app_core` through `App::dialog_timelapse_export`, `App::dialog_export_mp4`, `pano_cli plan-export-menu`, `pano_cli plan-export-target --kind name`, `DocumentVideoExportServices`, and `src/legacy_document_export_services.*`, but the bridge still launches legacy desktop timelapse worker threads, calls `App::rec_export`, calls `Canvas::export_anim_mp4`, owns mobile/Web save callbacks, and emits success messages directly | Preserve current MP4/timelapse export behavior while video export moves toward app/document/renderer/video/platform/storage services | `pp_app_core_document_export_tests`; `pano_cli plan-export-menu --kind animation-mp4`; `pano_cli plan-export-menu --kind timelapse`; `pano_cli plan-export-target --kind name --doc-name demo --suffix -animation`; `pano_cli plan-export-target --kind name --doc-name demo --suffix -timelapse`; `ctest --preset desktop-fast --build-config Debug` | Timelapse and animation MP4 execution, desktop worker threading, frame readback/video encoding handoff, mobile/Web save callbacks, and success reporting are owned by injected app/document/renderer/video/platform/storage services with export dialogs acting only as UI adapters |
|
||||
| DEBT-0045 | Open | Modernization | Options-menu preference execution now consumes pure `pp_app_core` through UI scale, viewport scale, RTL direction, VR mode, VR-controller, auto-timelapse, and canvas cursor-mode callbacks plus `AppPreferenceServices` and `src/legacy_app_preference_services.*`, but the bridge still calls legacy `App::set_ui_scale`, `App::set_ui_rtl`, `App::vr_start`, `App::vr_stop`, `NodeCanvas::set_density`, `NodeCanvas::set_cursor_visibility`, `App::rec_start`, `App::rec_stop`, and `Settings::save` directly | Preserve current options-menu behavior while preferences move toward app/UI/platform/storage services | `pp_app_core_app_preferences_tests`; `pano_cli plan-app-preferences --ui-scale 1.5 --display-density 2 --current-scale 1.6 --scale-option 1 --scale-option 1.5 --rtl`; `ctest --preset desktop-fast --build-config Debug`; `cmake --build --preset windows-msvc-default --config Debug --target PanoPainter` | Preference persistence, UI/layout direction, viewport density, cursor mode, VR mode start/stop/failure handling, VR-controller state, and auto-timelapse recording side effects are owned by injected app/UI/platform/storage services with options-menu callbacks acting only as UI adapters |
|
||||
| DEBT-0046 | Open | Modernization | Startup preference/runtime execution now consumes pure `pp_app_core` through `App::init`, `pano_cli plan-app-startup`, `AppStartupServices`, and `src/legacy_app_startup_services.*`, but the bridge still calls legacy `Settings::set`, `Settings::save`, `App::rec_start`, app VR-controller state mutation, and message-box license warning execution directly | Preserve current startup behavior while app startup moves toward app/preferences/storage/recording/UI services | `pp_app_core_app_startup_tests`; `pano_cli plan-app-startup --run-counter 7 --vr-controllers-disabled --license-invalid`; `pano_cli plan-app-startup --run-counter -1`; `ctest --preset desktop-fast --build-config Debug`; `cmake --build --preset windows-msvc-default --config Debug --target PanoPainter` | Startup preference persistence, auto-timelapse startup, stored VR-controller state, license validation/warning, and startup UI/runtime side effects are owned by injected app/preferences/storage/recording/UI services with `App::init` acting only as orchestration |
|
||||
| DEBT-0047 | Open | Modernization | PPBR brush package export request validation and execution dispatch now consume pure `pp_app_core` through `App::dialog_ppbr_export`, `pano_cli plan-brush-package-export`, `BrushPackageExportServices`, and `src/legacy_brush_package_export_services.*`, but the bridge still reads `NodeDialogExportPPBR`, carries the legacy `Image` header object outside the pure request, converts to `NodePanelBrushPreset::PPBRInfo`, calls `NodePanelBrushPreset::export_ppbr`, owns desktop worker-thread dispatch, dialog destruction, mobile/Web completion, and success-message behavior directly | Preserve current PPBR export behavior while brush assets, PPBR serialization, picker completion, and UI lifetime move toward asset/storage/UI/platform services | `pp_app_core_brush_package_export_tests`; `pano_cli plan-brush-package-export --path D:/Paint/clouds.ppbr --author Artist --dest-path D:/Paint/BrushPreviews --export-data --header-image`; `pano_cli plan-brush-package-export`; `pano_cli plan-brush-package-export --path D:/Paint/clouds.ppbr --dest-path D:/Paint/BrushPreviews --no-export-data`; `ctest --preset desktop-fast --build-config Debug`; `cmake --build --preset windows-msvc-default --config Debug --target PanoPainter` | PPBR metadata collection, header-image ownership, serialization, picker-selected path execution, desktop threading, dialog lifetime, and success UI are owned by injected brush asset/storage/UI/platform services with `App::dialog_ppbr_export` acting only as a UI adapter |
|
||||
|
||||
## Closed Debt
|
||||
|
||||
|
||||
@@ -778,6 +778,12 @@ executor and `src/legacy_document_export_services.*`, preserving mobile/Web
|
||||
suggested-name save callbacks, desktop worker-thread timelapse export,
|
||||
`App::rec_export`, animation `Canvas::export_anim_mp4` dispatch, and existing
|
||||
success messages while retained execution remains tracked under `DEBT-0044`.
|
||||
`App::dialog_ppbr_export` now routes picker-selected PPBR brush package exports
|
||||
through the app-core brush package export executor and
|
||||
`src/legacy_brush_package_export_services.*`, preserving dialog metadata
|
||||
collection, legacy `Image` header ownership, desktop worker-thread export,
|
||||
mobile/Web save completion, `NodePanelBrushPreset::export_ppbr`, and existing
|
||||
success messages while retained execution remains tracked under `DEBT-0047`.
|
||||
|
||||
Implementation tasks:
|
||||
|
||||
@@ -1369,6 +1375,14 @@ Results:
|
||||
- Focused startup CTest coverage passed for `pp_app_core_app_startup_tests`,
|
||||
`pano_cli_plan_app_startup_smoke`, and
|
||||
`pano_cli_plan_app_startup_rejects_negative_counter`.
|
||||
- `PanoPainter`, `pp_app_core_brush_package_export_tests`, and `pano_cli` built
|
||||
after PPBR brush package export request validation and dispatch moved behind
|
||||
app-core brush package services.
|
||||
- Focused PPBR export CTest coverage passed for
|
||||
`pp_app_core_brush_package_export_tests`,
|
||||
`pano_cli_plan_brush_package_export_smoke`,
|
||||
`pano_cli_plan_brush_package_export_rejects_empty_path`, and
|
||||
`pano_cli_plan_brush_package_export_dest_without_data_smoke`.
|
||||
- `pp_app_core_document_recording_tests` passed, covering recording start/stop,
|
||||
clear, platform recorded-file cleanup, frame-count reset, export progress
|
||||
totals, and oversized progress-total clamping.
|
||||
|
||||
Reference in New Issue
Block a user