#include "pch.h" #include "app.h" #include "util.h" #include "node_progress_bar.h" #include "node_dialog_cloud.h" using namespace ui; void App::cloud_upload() { if (!canvas) return; if (ui::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 { std::thread([this] { std::string path = data_path + "/" + doc_name + ".pano"; if (ui::Canvas::I->m_unsaved) { Canvas::I->project_save_thread(path); } async_start(); auto pb = show_progress("Uploading"); async_redraw(); async_end(); upload(path, doc_name + ".pano", [this,pb](float p){ async_start(); pb->m_progress->SetWidthP(p * 100.f); async_redraw(); async_end(); }); async_start(); 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(); async_redraw(); async_end(); }).detach(); } } void App::cloud_upload_all() { std::thread([this] { auto names = Asset::list_files(data_path, false, ".*\\.pano"); gl_state gl; std::shared_ptr pb; if (layout.m_loaded) { async_start(); pb = show_progress("Export Pano Image"); async_redraw(); async_end(); } int progress = 0; int total = 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) { async_start(); pb->m_progress->SetWidthP(p); gl.save(); async_redraw(); gl.restore(); async_end(); } } if (layout.m_loaded) { async_start(); pb->destroy(); async_redraw(); async_end(); } }).detach(); } void App::cloud_browse() { if (!canvas) return; // load thumbnail test auto dialog = std::make_shared(); dialog->m_manager = &layout; dialog->data_path = data_path; dialog->init(); dialog->create(); dialog->loaded(); layout[main_id]->add_child(dialog); layout[main_id]->update(); dialog->btn_ok->on_click = [this, dialog](Node*) { dialog->destroy(); std::thread([this, dialog] { async_start(); auto* m = layout[main_id]->add_child(); m->m_title->set_text("Downloading"); m->m_message->set_text("Download in progress"); async_redraw(); async_end(); download(dialog->selected_file, [this,m](float p){ static char progress[256]; sprintf(progress, "Download in progress %.2f%%", p * 100.f); async_start(); m->m_message->set_text(progress); async_redraw(); async_end(); }); async_start(); canvas->reset_camera(); layers->clear(); async_end(); canvas->m_canvas->project_open_thread(dialog->selected_path); async_start(); doc_name = dialog->selected_name; title_update(); for (auto& i : canvas->m_canvas->m_order) layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str()); ActionManager::clear(); m->destroy(); async_redraw(); async_end(); }).detach(); }; }