diff --git a/data/layout.xml b/data/layout.xml index cd76871..702e841 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -501,7 +501,7 @@ - + diff --git a/engine/app.cpp b/engine/app.cpp index 8540260..d9f22ff 100644 --- a/engine/app.cpp +++ b/engine/app.cpp @@ -80,7 +80,7 @@ void App::download(std::string filename) } } -void App::upload(std::string filename) +void App::upload(std::string filename, std::string name) { CURL *curl; @@ -100,7 +100,8 @@ void App::upload(std::string filename) if (curl) { - curl_easy_setopt(curl, CURLOPT_URL, "http://omigamedev.ddns.net:8080/panoview/upl.php"); + std::string url = "http://omigamedev.ddns.net:8080/panoview/cloud-upl.php?name=" + name; + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &res); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_data_handler); diff --git a/engine/app.h b/engine/app.h index f621087..6712aee 100644 --- a/engine/app.h +++ b/engine/app.h @@ -121,14 +121,16 @@ public: void init_menu_layer(); void dialog_newdoc(); void dialog_save(); + void dialog_save_ver(); void dialog_open(); void dialog_browse(); void dialog_export(); void dialog_layer_rename(); + void cloud_upload(); void cloud_upload_all(); void cloud_browse(); - void upload(std::string filename); + void upload(std::string filename, std::string name = ""); void download(std::string filename); void brush_update(); diff --git a/engine/app_cloud.cpp b/engine/app_cloud.cpp index 55f9831..af94016 100644 --- a/engine/app_cloud.cpp +++ b/engine/app_cloud.cpp @@ -6,6 +6,39 @@ 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([] { diff --git a/engine/app_dialogs.cpp b/engine/app_dialogs.cpp index ffae787..c67eb78 100644 --- a/engine/app_dialogs.cpp +++ b/engine/app_dialogs.cpp @@ -133,6 +133,36 @@ void App::dialog_browse() } } +void App::dialog_save_ver() +{ + int current = 0; + std::string next = doc_name + ".01"; + std::string base = doc_name; + + std::regex r(R"((.*)\.(\w{2})$)"); + std::smatch m; + if (std::regex_search(doc_name, m, r)) + { + base = m[1].str(); + current = atoi(m[2].str().c_str()); + } + + for (int i = current + 1; i < 99; i++) + { + static char tmp_name[256]; + sprintf(tmp_name, "%s.%02d", base.c_str(), i); + next = tmp_name; + if (Asset::exist(data_path + "/" + next + ".pano", false)) + continue; + break; + } + + doc_name = next; + if (auto docname = layout[main_id]->find("txt-docname")) + docname->set_text(("Panodoc: " + doc_name).c_str()); + canvas->m_canvas->project_save(data_path + "/" + next + ".pano"); +} + void App::dialog_save() { if (canvas) diff --git a/engine/app_layout.cpp b/engine/app_layout.cpp index 20dd104..1fcd5d9 100644 --- a/engine/app_layout.cpp +++ b/engine/app_layout.cpp @@ -383,39 +383,7 @@ void App::init_menu_file() popup->destroy(); }; popup->find("file-save-ver")->on_click = [this](Node*) { - if (doc_name.empty()) - { - dialog_save(); - } - else - { - int current = 0; - std::string next = doc_name + ".01"; - std::string base = doc_name; - - std::regex r(R"((.*)\.(\w{2})$)"); - std::smatch m; - if (std::regex_search(doc_name, m, r)) - { - base = m[1].str(); - current = atoi(m[2].str().c_str()); - } - - for (int i = current + 1; i < 99; i++) - { - static char tmp_name[256]; - sprintf(tmp_name, "%s.%02d", base.c_str(), i); - next = tmp_name; - if (Asset::exist(data_path + "/" + next + ".pano", false)) - continue; - break; - } - - doc_name = next; - if (auto docname = layout[main_id]->find("txt-docname")) - docname->set_text(("Panodoc: " + doc_name).c_str()); - canvas->m_canvas->project_save(data_path + "/" + next + ".pano"); - } + doc_name.empty() ? dialog_save() : dialog_save_ver(); popup->mouse_release(); popup->destroy(); }; @@ -425,7 +393,7 @@ void App::init_menu_file() popup->destroy(); }; popup->find("file-cloud-upload")->on_click = [this](Node*) { - cloud_upload_all(); + cloud_upload(); popup->mouse_release(); popup->destroy(); };