From ef118017cd446e912e254b4187b6bdfb0547c5f7 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 14 Mar 2024 11:38:29 +0800 Subject: [PATCH] ENH:support jumping from project to makerworld jira:[STUDIO-6462] Change-Id: I35c5612e4aa9f387b30f6fad12419aee2e244217 --- src/libslic3r/Format/bbs_3mf.cpp | 9 ++++- src/slic3r/GUI/Project.cpp | 62 +++++++++++++++++++++++++++++++ src/slic3r/GUI/Project.hpp | 4 +- src/slic3r/Utils/NetworkAgent.cpp | 15 ++++++++ src/slic3r/Utils/NetworkAgent.hpp | 5 ++- version.inc | 3 +- 6 files changed, 94 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 698951588..6cf951b36 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -116,6 +116,7 @@ const std::string BBL_MODEL_NAME_TAG = "Title"; const std::string BBL_ORIGIN_TAG = "Origin"; const std::string BBL_DESIGNER_TAG = "Designer"; const std::string BBL_DESIGNER_USER_ID_TAG = "DesignerUserId"; +//const std::string BBL_DESIGNER_MODEL_ID_TAG = "DesignModelId"; const std::string BBL_DESIGNER_COVER_FILE_TAG = "DesignerCover"; const std::string BBL_DESCRIPTION_TAG = "Description"; const std::string BBL_COPYRIGHT_TAG = "CopyRight"; @@ -935,6 +936,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::string m_model_id; std::string m_contry_code; std::string m_designer; + std::string m_designer_id; std::string m_designer_user_id; std::string m_designer_cover; ModelInfo model_info; @@ -1356,6 +1358,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (!m_designer.empty()) { m_model->design_info = std::make_shared(); + m_model->design_info->DesignId = m_designer_id; m_model->design_info->DesignerUserId = m_designer_user_id; m_model->design_info->Designer = m_designer; } @@ -1648,6 +1651,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (!m_designer.empty()) { m_model->design_info = std::make_shared(); + m_model->design_info->DesignId = m_designer_id; m_model->design_info->DesignerUserId = m_designer_user_id; m_model->design_info->Designer = m_designer; } @@ -3581,7 +3585,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } else if (m_curr_metadata_name == BBL_DESIGNER_USER_ID_TAG) { BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found designer_user_id = " << m_curr_characters; m_designer_user_id = xml_unescape(m_curr_characters); - } else if (m_curr_metadata_name == BBL_DESIGNER_COVER_FILE_TAG) { + }else if (m_curr_metadata_name == BBL_DESIGNER_MODEL_ID_TAG) { + BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found designer_model_id = " << m_curr_characters; + m_designer_id = xml_unescape(m_curr_characters); + }else if (m_curr_metadata_name == BBL_DESIGNER_COVER_FILE_TAG) { BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found designer_cover = " << m_curr_characters; model_info.cover_file = xml_unescape(m_curr_characters); } else if (m_curr_metadata_name == BBL_DESCRIPTION_TAG) { diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp index 78df2ed2f..a1b05aa79 100644 --- a/src/slic3r/GUI/Project.cpp +++ b/src/slic3r/GUI/Project.cpp @@ -99,6 +99,7 @@ void ProjectPanel::on_reload(wxCommandEvent& evt) std::string p_author; std::string p_description; std::string p_cover_file; + std::string model_id; Model model = wxGetApp().plater()->model(); @@ -109,6 +110,18 @@ void ProjectPanel::on_reload(wxCommandEvent& evt) update_type = model.model_info->origin; + if (!model.design_info->DesignId.empty()) { + + if (m_model_id_map.count(model.design_info->DesignId) > 0) { + model_id = m_model_id_map[model.design_info->DesignId]; + } + else { + model_id = get_model_id(model.design_info->DesignId); + m_model_id_map[model.design_info->DesignId] = model_id; + } + } + + try { if (!model.model_info->copyright.empty()) { json copy_right = json::parse(model.model_info->copyright); @@ -154,6 +167,7 @@ void ProjectPanel::on_reload(wxCommandEvent& evt) j["model"]["description"] = wxGetApp().url_encode(description); j["model"]["preview_img"] = files["Model Pictures"]; j["model"]["upload_type"] = update_type; + j["model"]["model_id"] = model_id; j["file"]["BOM"] = files["Bill of Materials"]; j["file"]["Assembly"] = files["Assembly Guide"]; @@ -180,6 +194,34 @@ void ProjectPanel::on_reload(wxCommandEvent& evt) }); } +std::string ProjectPanel::get_model_id(std::string desgin_id) +{ + std::string model_id; + auto host = wxGetApp().get_http_url(wxGetApp().app_config->get_country_code(), "v1/design-service/model/" + desgin_id); + Http http = Http::get(host); + http.header("accept", "application/json") + //.header("Authorization") + .on_complete([this, &model_id](std::string body, unsigned status) { + try { + json j = json::parse(body); + if (j.contains("id")) { + int mid = j["id"].get(); + if (mid > 0) { + model_id = std::to_string(mid); + } + } + } + catch (...) { + ; + } + }) + .on_error([this](std::string body, std::string error, unsigned status) { + }) + .perform_sync(); + + return model_id; +} + void ProjectPanel::msw_rescale() { } @@ -216,6 +258,26 @@ void ProjectPanel::OnScriptMessage(wxWebViewEvent& evt) } else if (strCmd == "request_3mf_info") { m_web_init_completed = true; + } + else if (strCmd == "modelmall_model_open") { + if (j.contains("data")) { + json data = j["data"]; + + if (data.contains("id")) { + wxString model_id = j["data"]["id"]; + + if (!model_id.empty()) { + std::string h = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code()); + auto l = wxGetApp().current_language_code_safe(); + if (auto n = l.find('_'); n != std::string::npos) + l = l.substr(0, n); + auto url = (boost::format("%1%%2%/models/%3%") % h % l % model_id).str(); + wxLaunchDefaultBrowser(url); + } + } + } + + } else if (strCmd == "debug_info") { //wxString msg = j["msg"]; diff --git a/src/slic3r/GUI/Project.hpp b/src/slic3r/GUI/Project.hpp index c1452dece..ab9f96ad2 100644 --- a/src/slic3r/GUI/Project.hpp +++ b/src/slic3r/GUI/Project.hpp @@ -65,6 +65,7 @@ private: wxWebView* m_browser = {nullptr}; wxString m_project_home_url; wxString m_root_dir; + std::map m_model_id_map; static inline int m_sequence_id = 8000; @@ -75,7 +76,7 @@ public: void onWebNavigating(wxWebViewEvent& evt); void on_reload(wxCommandEvent& evt); - void on_size(wxSizeEvent &event); + void on_size(wxSizeEvent& event); void on_navigated(wxWebViewEvent& event); void msw_rescale(); @@ -88,6 +89,7 @@ public: std::map> Reload(wxString aux_path); std::string formatBytes(unsigned long bytes); + std::string get_model_id(std::string desgin_id); wxString to_base64(std::string path); }; diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index bfea0180b..1277995c4 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -67,6 +67,7 @@ func_get_user_nickanme NetworkAgent::get_user_nickanme_ptr = nullpt func_build_login_cmd NetworkAgent::build_login_cmd_ptr = nullptr; func_build_logout_cmd NetworkAgent::build_logout_cmd_ptr = nullptr; func_build_login_info NetworkAgent::build_login_info_ptr = nullptr; +func_get_model_id_from_desgin_id NetworkAgent::get_model_id_from_desgin_id_ptr = nullptr; func_bind NetworkAgent::bind_ptr = nullptr; func_unbind NetworkAgent::unbind_ptr = nullptr; func_get_bambulab_host NetworkAgent::get_bambulab_host_ptr = nullptr; @@ -227,6 +228,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) build_login_cmd_ptr = reinterpret_cast(get_network_function("bambu_network_build_login_cmd")); build_logout_cmd_ptr = reinterpret_cast(get_network_function("bambu_network_build_logout_cmd")); build_login_info_ptr = reinterpret_cast(get_network_function("bambu_network_build_login_info")); + get_model_id_from_desgin_id_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_id_from_desgin_id")); bind_ptr = reinterpret_cast(get_network_function("bambu_network_bind")); unbind_ptr = reinterpret_cast(get_network_function("bambu_network_unbind")); get_bambulab_host_ptr = reinterpret_cast(get_network_function("bambu_network_get_bambulab_host")); @@ -341,6 +343,7 @@ int NetworkAgent::unload_network_module() build_login_cmd_ptr = nullptr; build_logout_cmd_ptr = nullptr; build_login_info_ptr = nullptr; + get_model_id_from_desgin_id_ptr = nullptr; bind_ptr = nullptr; unbind_ptr = nullptr; get_bambulab_host_ptr = nullptr; @@ -860,6 +863,18 @@ std::string NetworkAgent::build_login_info() return ret; } +int NetworkAgent::get_model_id_from_desgin_id(std::string& desgin_id, std::string& model_id) +{ + int ret = 0; + if (network_agent && get_model_id_from_desgin_id_ptr) { + ret = get_model_id_from_desgin_id_ptr(network_agent, desgin_id, model_id); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, ping code=%3%") + % network_agent % ret % desgin_id; + } + return ret; +} + int NetworkAgent::bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn) { int ret = 0; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index bbeb395b8..8847d4efb 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -47,6 +47,7 @@ typedef std::string (*func_get_user_nickanme)(void *agent); typedef std::string (*func_build_login_cmd)(void *agent); typedef std::string (*func_build_logout_cmd)(void *agent); typedef std::string (*func_build_login_info)(void *agent); +typedef int (*func_get_model_id_from_desgin_id)(void *agent, std::string& desgin_id, std::string& model_id); typedef int (*func_bind)(void *agent, std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); typedef int (*func_unbind)(void *agent, std::string dev_id); typedef std::string (*func_get_bambulab_host)(void *agent); @@ -151,7 +152,8 @@ public: std::string build_login_cmd(); std::string build_logout_cmd(); std::string build_login_info(); - int bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); + int get_model_id_from_desgin_id(std::string& desgin_id, std::string& model_id); + int bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); int unbind(std::string dev_id); std::string get_bambulab_host(); std::string get_user_selected_machine(); @@ -243,6 +245,7 @@ private: static func_build_login_cmd build_login_cmd_ptr; static func_build_logout_cmd build_logout_cmd_ptr; static func_build_login_info build_login_info_ptr; + static func_get_model_id_from_desgin_id get_model_id_from_desgin_id_ptr; static func_bind bind_ptr; static func_unbind unbind_ptr; static func_get_bambulab_host get_bambulab_host_ptr; diff --git a/version.inc b/version.inc index 08b2bdaf8..fabcdc69b 100644 --- a/version.inc +++ b/version.inc @@ -14,4 +14,5 @@ set(BBL_INTERNAL_TESTING "1") endif() # The build_version should start from 50 in master branch -set(SLIC3R_VERSION "01.08.05.53") +set(SLIC3R_VERSION "01.08.06.51") +