Plan cloud dialog metadata
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user