#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(); 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 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(); 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(); 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(); }; }