implement download and open from the cloud browser
This commit is contained in:
@@ -63,6 +63,23 @@ void App::initLog()
|
||||
LogRemote::I.file_init();
|
||||
}
|
||||
|
||||
void App::download(std::string filename)
|
||||
{
|
||||
CURL *curl = curl_easy_init();
|
||||
if (curl)
|
||||
{
|
||||
auto dest = data_path + "/" + filename;
|
||||
FILE* fp = fopen(dest.c_str(), "wb");
|
||||
std::string url = "http://omigamedev.ddns.net:8080/panoview/cloud-dwl.php?file=" + filename;
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_data_write);
|
||||
auto err = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
void App::upload(std::string filename)
|
||||
{
|
||||
CURL *curl;
|
||||
|
||||
@@ -92,7 +92,6 @@ public:
|
||||
void initShaders();
|
||||
void initAssets();
|
||||
void initLayout();
|
||||
void upload(std::string filename);
|
||||
void create();
|
||||
void terminate();
|
||||
void clear();
|
||||
@@ -129,6 +128,8 @@ public:
|
||||
|
||||
void cloud_upload_all();
|
||||
void cloud_browse();
|
||||
void upload(std::string filename);
|
||||
void download(std::string filename);
|
||||
|
||||
void brush_update();
|
||||
|
||||
|
||||
@@ -79,15 +79,21 @@ void App::cloud_browse()
|
||||
|
||||
dialog->btn_ok->on_click = [this, dialog](Node*)
|
||||
{
|
||||
// canvas->reset_camera();
|
||||
// layers->clear();
|
||||
// canvas->m_canvas->project_open(dialog->selected_path);
|
||||
// doc_name = dialog->selected_name;
|
||||
// if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
// docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
// 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();
|
||||
std::thread([this, dialog] {
|
||||
download(dialog->selected_file);
|
||||
async_start();
|
||||
canvas->reset_camera();
|
||||
layers->clear();
|
||||
canvas->m_canvas->project_open(dialog->selected_path);
|
||||
doc_name = dialog->selected_name;
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
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();
|
||||
};
|
||||
}
|
||||
@@ -397,7 +397,7 @@ void App::init_menu_file()
|
||||
std::smatch m;
|
||||
if (std::regex_search(doc_name, m, r))
|
||||
{
|
||||
std::string base = m[1].str();
|
||||
base = m[1].str();
|
||||
current = atoi(m[2].str().c_str());
|
||||
}
|
||||
|
||||
|
||||
@@ -89,7 +89,6 @@ void NodeDialogCloud::load_thumbs_thread()
|
||||
thumb.create(width, height);
|
||||
thumb.copy_from((uint8_t*)rgb.data());
|
||||
|
||||
|
||||
App::I.async_start();
|
||||
auto node = new NodeDialogCloudItem;
|
||||
node->m_manager = m_manager;
|
||||
@@ -104,20 +103,16 @@ void NodeDialogCloud::load_thumbs_thread()
|
||||
App::I.async_update();
|
||||
App::I.async_end();
|
||||
|
||||
// node->on_selected = [&](NodeDialogCloudItem* target) {
|
||||
// if (target == current)
|
||||
// return;
|
||||
// selected_path = target->m_path;
|
||||
// selected_file = target->m_file_name;
|
||||
// selected_name = selected_file.substr(0, selected_file.length() - 5);
|
||||
// if (current)
|
||||
// current->m_selected = false;
|
||||
// current = target;
|
||||
// };
|
||||
|
||||
// load thumb
|
||||
// ui::Image thumb = ui::Canvas::I->thumbnail_read(node->m_path);
|
||||
|
||||
node->on_selected = [&](NodeDialogCloudItem* target) {
|
||||
if (target == current)
|
||||
return;
|
||||
selected_path = target->m_path;
|
||||
selected_file = target->m_file_name;
|
||||
selected_name = selected_file.substr(0, selected_file.length() - 5);
|
||||
if (current)
|
||||
current->m_selected = false;
|
||||
current = target;
|
||||
};
|
||||
}
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
|
||||
@@ -132,6 +132,13 @@ size_t curl_data_handler(void *contents, size_t size, size_t nmemb, void *userp)
|
||||
return size * nmemb;
|
||||
}
|
||||
|
||||
size_t curl_data_write(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||
{
|
||||
size_t written = fwrite(ptr, size, nmemb, stream);
|
||||
return written;
|
||||
}
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define GL(stmt) stmt; CheckOpenGLError(#stmt, __FILE__, __LINE__);
|
||||
#else
|
||||
|
||||
@@ -17,6 +17,7 @@ glm::vec3 convert_hsv2rgb(const glm::vec3 c);
|
||||
glm::vec3 convert_rgb2hsv(const glm::vec3 c);
|
||||
|
||||
size_t curl_data_handler(void *contents, size_t size, size_t nmemb, void *userp);
|
||||
size_t curl_data_write(void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||
void check_OpenGLError(const char* stmt, const char* fname, int line);
|
||||
|
||||
template<typename T, int N> struct cbuffer
|
||||
|
||||
Reference in New Issue
Block a user