#pragma once #include namespace pp::app { enum class CloudUploadAction { unavailable_no_canvas, show_save_required_warning, prompt_publish, }; enum class CloudBrowseAction { unavailable_no_canvas, show_browser, }; enum class CloudDownloadSelectionAction { wait_for_selection, start_download, }; struct CloudUploadPlan { CloudUploadAction action = CloudUploadAction::unavailable_no_canvas; bool save_before_upload = false; }; [[nodiscard]] constexpr CloudUploadPlan plan_cloud_upload( bool has_canvas, bool is_new_document, bool has_unsaved_changes) noexcept { if (!has_canvas) { return { CloudUploadAction::unavailable_no_canvas, false }; } if (is_new_document) { return { CloudUploadAction::show_save_required_warning, false }; } return { CloudUploadAction::prompt_publish, has_unsaved_changes }; } [[nodiscard]] constexpr CloudBrowseAction plan_cloud_browse(bool has_canvas) noexcept { return has_canvas ? CloudBrowseAction::show_browser : CloudBrowseAction::unavailable_no_canvas; } [[nodiscard]] constexpr CloudDownloadSelectionAction plan_cloud_download_selection( std::string_view selected_file) noexcept { return selected_file.empty() ? CloudDownloadSelectionAction::wait_for_selection : CloudDownloadSelectionAction::start_download; } }