60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <string_view>
|
|
|
|
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;
|
|
}
|
|
|
|
}
|