Plan cloud upload decisions in app core

This commit is contained in:
2026-06-02 23:34:58 +02:00
parent 6e3296469a
commit 3a78361aea
10 changed files with 217 additions and 8 deletions

View File

@@ -1,19 +1,29 @@
#include "pch.h"
#include "app.h"
#include "app_core/document_cloud.h"
#include "util.h"
#include "node_progress_bar.h"
#include "node_dialog_cloud.h"
void App::cloud_upload()
{
if (!canvas)
const bool has_canvas = canvas != nullptr;
const auto plan = pp::app::plan_cloud_upload(
has_canvas,
has_canvas && Canvas::I->m_newdoc,
has_canvas && Canvas::I->m_unsaved);
switch (plan.action)
{
case pp::app::CloudUploadAction::unavailable_no_canvas:
return;
if (Canvas::I->m_newdoc)
{
case pp::app::CloudUploadAction::show_save_required_warning:
message_box("Warning", "This document needs to be saved before upload.");
return;
case pp::app::CloudUploadAction::prompt_publish:
break;
}
else
{
auto upload_thread = [this] {
BT_SetTerminate();
@@ -42,7 +52,6 @@ void App::cloud_upload()
m->btn_cancel->on_click = [this, m, upload_thread](Node*) {
m->destroy();
};
}
}
void App::cloud_upload_all()

View File

@@ -0,0 +1,32 @@
#pragma once
namespace pp::app {
enum class CloudUploadAction {
unavailable_no_canvas,
show_save_required_warning,
prompt_publish,
};
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 };
}
}