#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 (doc_name.empty()) { 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"; Canvas::I->project_save_thread(path); upload(path); async_start(); 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_end(); }).detach(); } } void App::cloud_upload_all() { std::thread([] { auto names = Asset::list_files(App::I.data_path, false, ".*\\.pano"); gl_state gl; std::shared_ptr pb; if (App::I.layout.m_loaded) { App::I.async_start(); pb = std::make_shared(); pb->m_manager = &App::I.layout; pb->init(); pb->create(); pb->loaded(); pb->m_progress->SetWidthP(0); pb->m_title->set_text("Export Pano Image"); App::I.layout[App::I.main_id]->add_child(pb); App::I.async_update(); App::I.async_end(); } int progress = 0; int total = names.size(); for (const auto& n : names) { std::string path = App::I.data_path + "/" + n; App::I.upload(path); progress++; float p = (float)progress / total * 100.f; LOG("progress: %f", p); if (App::I.layout.m_loaded) { App::I.async_start(); pb->m_progress->SetWidthP(p); gl.save(); App::I.async_update(); gl.restore(); App::I.async_end(); } } if (App::I.layout.m_loaded) { App::I.async_start(); pb->destroy(); App::I.async_update(); App::I.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*) { std::thread([this, dialog] { download(dialog->selected_file); async_start(); canvas->reset_camera(); layers->clear(); canvas->m_canvas->project_open_thread(dialog->selected_path); doc_name = dialog->selected_name; title_update(doc_name, canvas->m_canvas->m_width); for (auto& i : canvas->m_canvas->m_order) layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str()); dialog->destroy(); ActionManager::clear(); async_update(); async_end(); }).detach(); }; }