Plan cloud dialog metadata

This commit is contained in:
2026-06-05 08:14:11 +02:00
parent e5526c6d0a
commit f46839bf5c
8 changed files with 190 additions and 26 deletions

View File

@@ -1,7 +1,9 @@
#pragma once
#include "app_core/app_dialog.h"
#include "foundation/result.h"
#include <cstdio>
#include <cstddef>
#include <cstdint>
#include <limits>
@@ -66,6 +68,61 @@ struct CloudTransferProgressPlan {
float fraction = 0.0F;
};
[[nodiscard]] inline AppMessageDialogPlan plan_cloud_save_required_prompt()
{
return plan_app_message_dialog(
"Warning",
"This document needs to be saved before upload.",
false);
}
[[nodiscard]] inline AppMessageDialogPlan plan_cloud_publish_prompt()
{
return plan_app_message_dialog(
"Publish document",
"Would you like to upload to the public domain?",
true,
"Yes",
"No");
}
[[nodiscard]] inline AppMessageDialogPlan plan_cloud_upload_success_prompt()
{
return plan_app_message_dialog(
"Success",
"This document has been succesfully uploaded.",
false);
}
[[nodiscard]] inline AppProgressDialogPlan plan_cloud_upload_progress_dialog()
{
return plan_app_progress_dialog("Uploading", 0);
}
[[nodiscard]] inline AppProgressDialogPlan plan_cloud_bulk_upload_progress_dialog(int progress_total)
{
return plan_app_progress_dialog("Export Pano Image", progress_total);
}
[[nodiscard]] inline AppMessageDialogPlan plan_cloud_download_progress_prompt()
{
return plan_app_message_dialog(
"Downloading",
"Download in progress",
true);
}
[[nodiscard]] inline std::string format_cloud_download_progress_message(float progress_fraction)
{
char buffer[64] {};
std::snprintf(
buffer,
sizeof(buffer),
"Download in progress %.2f%%",
progress_fraction * 100.0F);
return buffer;
}
class CloudServices {
public:
virtual ~CloudServices() = default;

View File

@@ -12,6 +12,20 @@
namespace pp::panopainter {
namespace {
void apply_cloud_message_box_plan(
NodeMessageBox& msgbox,
const pp::app::AppMessageDialogPlan& plan)
{
msgbox.m_title->set_text(plan.title.c_str());
msgbox.m_message->set_text(plan.message.c_str());
msgbox.btn_ok->m_text->set_text(plan.ok_caption.c_str());
if (plan.show_cancel) {
msgbox.btn_cancel->m_text->set_text(plan.cancel_caption.c_str());
} else {
msgbox.btn_cancel->destroy();
}
}
class LegacyCloudServices final : public pp::app::CloudServices {
public:
explicit LegacyCloudServices(App& app) noexcept
@@ -21,7 +35,8 @@ public:
void show_save_required_warning() override
{
app_.message_box("Warning", "This document needs to be saved before upload.");
const auto plan = pp::app::plan_cloud_save_required_prompt();
app_.message_box(plan.title, plan.message, plan.show_cancel);
}
void prompt_publish(bool save_before_upload) override
@@ -35,19 +50,20 @@ public:
Canvas::I->project_save_thread(app->doc_path, true);
}
auto pb = app->show_progress("Uploading");
const auto progress_plan = pp::app::plan_cloud_upload_progress_dialog();
auto pb = app->show_progress(progress_plan.title, progress_plan.total);
app->upload(app->doc_path, app->doc_filename, [pb](float p) {
pb->set_progress(p);
});
pb->destroy();
app->message_box("Success", "This document has been succesfully uploaded.");
const auto success_plan = pp::app::plan_cloud_upload_success_prompt();
app->message_box(success_plan.title, success_plan.message, success_plan.show_cancel);
};
auto m = app_.message_box("Publish document", "Would you like to upload to the public domain?");
m->btn_ok->m_text->set_text("Yes");
m->btn_cancel->m_text->set_text("No");
const auto prompt_plan = pp::app::plan_cloud_publish_prompt();
auto m = app_.message_box(prompt_plan.title, prompt_plan.message, prompt_plan.show_cancel);
m->btn_ok->on_click = [m, upload_thread](Node*) {
std::thread(upload_thread).detach();
m->destroy();
@@ -61,7 +77,8 @@ public:
{
bulk_progress_.reset();
if (show_progress) {
bulk_progress_ = app_.show_progress("Export Pano Image", progress_total);
const auto progress_plan = pp::app::plan_cloud_bulk_upload_progress_dialog(progress_total);
bulk_progress_ = app_.show_progress(progress_plan.title, progress_plan.total);
}
}
@@ -114,13 +131,11 @@ public:
BT_SetTerminate();
auto* m = app->layout[app->main_id]->add_child<NodeMessageBox>();
m->m_title->set_text("Downloading");
m->m_message->set_text("Download in progress");
apply_cloud_message_box_plan(*m, pp::app::plan_cloud_download_progress_prompt());
std::string url = "https://panopainter.com/cloud/cloud-dwl.php?file=" + request.selected_file;
app->download(url, request.selected_path, [m](float p) {
static char progress[256];
sprintf(progress, "Download in progress %.2f%%", p * 100.f);
m->m_message->set_text(progress);
const auto progress = pp::app::format_cloud_download_progress_message(p);
m->m_message->set_text(progress.c_str());
});
const auto reset_status = execute_legacy_canvas_camera_reset(*app);