149 lines
4.2 KiB
C++
149 lines
4.2 KiB
C++
#include "pch.h"
|
|
#include "app.h"
|
|
#include "util.h"
|
|
#include "node_progress_bar.h"
|
|
#include "node_dialog_cloud.h"
|
|
|
|
void App::cloud_upload()
|
|
{
|
|
if (!canvas)
|
|
return;
|
|
if (Canvas::I->m_newdoc)
|
|
{
|
|
auto msgbox = new NodeMessageBox();
|
|
msgbox->m_manager = &layout;
|
|
msgbox->init();
|
|
msgbox->m_title->set_text("Warning");
|
|
msgbox->m_message->set_text("This document needs to be saved before upload.");
|
|
layout[main_id]->add_child(msgbox);
|
|
layout[main_id]->update();
|
|
}
|
|
else
|
|
{
|
|
auto upload_thread = [this] {
|
|
BT_SetTerminate();
|
|
|
|
if (Canvas::I->m_unsaved)
|
|
{
|
|
Canvas::I->project_save_thread(doc_path, true);
|
|
}
|
|
|
|
auto pb = show_progress("Uploading");
|
|
|
|
upload(doc_path, doc_filename, [this,pb](float p){
|
|
pb->m_progress->SetWidthP(p * 100.f);
|
|
});
|
|
|
|
pb->destroy();
|
|
auto msgbox = new NodeMessageBox();
|
|
msgbox->m_manager = &layout;
|
|
msgbox->init();
|
|
msgbox->m_title->set_text("Success");
|
|
msgbox->m_message->set_text("This document has been succesfully uploaded.");
|
|
layout[main_id]->add_child(msgbox);
|
|
layout[main_id]->update();
|
|
};
|
|
|
|
auto m = layout[main_id]->add_child<NodeMessageBox>();
|
|
m->m_title->set_text("Publish document");
|
|
m->m_message->set_text("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");
|
|
m->btn_ok->on_click = [this, m, upload_thread](Node*) {
|
|
std::thread(upload_thread).detach();
|
|
m->destroy();
|
|
};
|
|
m->btn_cancel->on_click = [this, m, upload_thread](Node*) {
|
|
m->destroy();
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
void App::cloud_upload_all()
|
|
{
|
|
std::thread([this] {
|
|
BT_SetTerminate();
|
|
|
|
auto names = Asset::list_files(data_path, ".*\\.ppi");
|
|
|
|
gl_state gl;
|
|
std::shared_ptr<NodeProgressBar> pb;
|
|
if (layout.m_loaded)
|
|
{
|
|
pb = show_progress("Export Pano Image");
|
|
}
|
|
|
|
int progress = 0;
|
|
int total = (int)names.size();
|
|
|
|
for (const auto& n : names)
|
|
{
|
|
std::string path = data_path + "/" + n;
|
|
upload(path);
|
|
|
|
progress++;
|
|
float p = (float)progress / total * 100.f;
|
|
LOG("progress: %f", p);
|
|
|
|
if (layout.m_loaded)
|
|
{
|
|
pb->m_progress->SetWidthP(p);
|
|
}
|
|
}
|
|
|
|
if (layout.m_loaded)
|
|
{
|
|
pb->destroy();
|
|
}
|
|
}).detach();
|
|
}
|
|
|
|
void App::cloud_browse()
|
|
{
|
|
if (!canvas)
|
|
return;
|
|
|
|
// load thumbnail test
|
|
auto dialog = std::make_shared<NodeDialogCloud>();
|
|
dialog->m_manager = &layout;
|
|
dialog->init();
|
|
dialog->create();
|
|
dialog->loaded();
|
|
|
|
layout[main_id]->add_child(dialog);
|
|
layout[main_id]->update();
|
|
|
|
dialog->btn_ok->on_click = [this, dialog](Node*)
|
|
{
|
|
if (dialog->selected_file.empty())
|
|
return;
|
|
dialog->destroy();
|
|
std::thread([this, dialog] {
|
|
BT_SetTerminate();
|
|
|
|
auto* m = layout[main_id]->add_child<NodeMessageBox>();
|
|
m->m_title->set_text("Downloading");
|
|
m->m_message->set_text("Download in progress");
|
|
std::string url = "https://panopainter.com/cloud/cloud-dwl.php?file=" + dialog->selected_file;
|
|
download(url, dialog->selected_path, [this,m](float p){
|
|
static char progress[256];
|
|
sprintf(progress, "Download in progress %.2f%%", p * 100.f);
|
|
m->m_message->set_text(progress);
|
|
});
|
|
|
|
canvas->reset_camera();
|
|
layers->clear();
|
|
|
|
canvas->m_canvas->project_open_thread(dialog->selected_path);
|
|
|
|
doc_name = dialog->selected_name;
|
|
title_update();
|
|
for (auto& l : canvas->m_canvas->m_layers)
|
|
layers->add_layer(l->m_name.c_str(), false);
|
|
ActionManager::clear();
|
|
m->destroy();
|
|
}).detach();
|
|
};
|
|
}
|