Centralize legacy video export bridge

This commit is contained in:
2026-06-04 14:11:24 +02:00
parent 78003923ca
commit ca5b94b044
8 changed files with 259 additions and 16 deletions

View File

@@ -61,6 +61,11 @@ enum class DocumentExportCollectionKind {
animation_frames,
};
enum class DocumentVideoExportKind {
animation_mp4,
timelapse,
};
struct DocumentExportMenuPlan {
DocumentExportMenuKind kind = DocumentExportMenuKind::jpeg;
DocumentExportMenuAction action = DocumentExportMenuAction::show_jpeg_dialog;
@@ -96,6 +101,16 @@ public:
virtual void export_cube_faces(std::string_view document_name) = 0;
};
class DocumentVideoExportServices {
public:
virtual ~DocumentVideoExportServices() = default;
virtual void export_animation_mp4(std::string_view path) = 0;
virtual void export_timelapse_mp4(std::string_view path) = 0;
virtual void show_animation_export_success(std::string_view path) = 0;
virtual void show_timelapse_export_success(std::string_view path) = 0;
};
[[nodiscard]] constexpr DocumentExportStartDecision plan_document_export_start(
bool requires_license,
bool license_valid,
@@ -342,6 +357,29 @@ public:
return pp::foundation::Status::success();
}
[[nodiscard]] inline pp::foundation::Status execute_document_video_export(
DocumentVideoExportKind kind,
std::string_view path,
DocumentVideoExportServices& services)
{
if (path.empty()) {
return pp::foundation::Status::invalid_argument("video export path must not be empty");
}
switch (kind) {
case DocumentVideoExportKind::animation_mp4:
services.export_animation_mp4(path);
services.show_animation_export_success(path);
return pp::foundation::Status::success();
case DocumentVideoExportKind::timelapse:
services.export_timelapse_mp4(path);
services.show_timelapse_export_success(path);
return pp::foundation::Status::success();
}
return pp::foundation::Status::invalid_argument("unknown document video export kind");
}
[[nodiscard]] inline pp::foundation::Status execute_document_export_menu_plan(
const DocumentExportMenuPlan& plan,
DocumentExportMenuServices& services)