mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	FIX: [STUDIO-3271] load staff pick model list with network agent
Change-Id: Ie2c36348a32a4cd0c0c1457fd715619b23550794
This commit is contained in:
		
							parent
							
								
									739d8c9b28
								
							
						
					
					
						commit
						9b5a86ba01
					
				
					 4 changed files with 50 additions and 14 deletions
				
			
		| 
						 | 
					@ -1363,7 +1363,7 @@ void GUI_App::shutdown()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
std::string GUI_App::get_http_url(std::string country_code)
 | 
					std::string GUI_App::get_http_url(std::string country_code, std::string path)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::string url;
 | 
					    std::string url;
 | 
				
			||||||
    if (country_code == "US") {
 | 
					    if (country_code == "US") {
 | 
				
			||||||
| 
						 | 
					@ -1385,7 +1385,7 @@ std::string GUI_App::get_http_url(std::string country_code)
 | 
				
			||||||
        url = "https://api.bambulab.com/";
 | 
					        url = "https://api.bambulab.com/";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    url += "v1/iot-service/api/slicer/resource";
 | 
					    url += path.empty() ? "v1/iot-service/api/slicer/resource" : path;
 | 
				
			||||||
    return url;
 | 
					    return url;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1771,7 +1771,7 @@ void GUI_App::restart_networking()
 | 
				
			||||||
            start_sync_user_preset();
 | 
					            start_sync_user_preset();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (mainframe && this->app_config->get("staff_pick_switch") == "true") {
 | 
					        if (mainframe && this->app_config->get("staff_pick_switch") == "true") {
 | 
				
			||||||
            if (mainframe->m_webview) { mainframe->m_webview->SendDesignStaffpick(m_agent); }
 | 
					            if (mainframe->m_webview) { mainframe->m_webview->SendDesignStaffpick(true); }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(" exit, m_agent=%1%")%m_agent;
 | 
					    BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(" exit, m_agent=%1%")%m_agent;
 | 
				
			||||||
| 
						 | 
					@ -3818,7 +3818,7 @@ std::string GUI_App::handle_web_request(std::string cmd)
 | 
				
			||||||
            else if (command_str.compare("modelmall_model_advise_get") == 0) {
 | 
					            else if (command_str.compare("modelmall_model_advise_get") == 0) {
 | 
				
			||||||
                if (mainframe && this->app_config->get("staff_pick_switch") == "true") {
 | 
					                if (mainframe && this->app_config->get("staff_pick_switch") == "true") {
 | 
				
			||||||
                    if (mainframe->m_webview) {
 | 
					                    if (mainframe->m_webview) {
 | 
				
			||||||
                        mainframe->m_webview->SendDesignStaffpick(m_agent);
 | 
					                        mainframe->m_webview->SendDesignStaffpick(true);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -3826,10 +3826,8 @@ std::string GUI_App::handle_web_request(std::string cmd)
 | 
				
			||||||
                if (root.get_child_optional("data") != boost::none) {
 | 
					                if (root.get_child_optional("data") != boost::none) {
 | 
				
			||||||
                    pt::ptree data_node = root.get_child("data");
 | 
					                    pt::ptree data_node = root.get_child("data");
 | 
				
			||||||
                    boost::optional<std::string> id = data_node.get_optional<std::string>("id");
 | 
					                    boost::optional<std::string> id = data_node.get_optional<std::string>("id");
 | 
				
			||||||
                    if (id.has_value() && m_agent) {
 | 
					                    if (id.has_value() && mainframe->m_webview) {
 | 
				
			||||||
                        std::string url;
 | 
					                        mainframe->m_webview->OpenModelDetail(id.value(), m_agent);
 | 
				
			||||||
                        if (m_agent->get_model_mall_detail_url(&url, id.value()) == 0)
 | 
					 | 
				
			||||||
                            wxLaunchDefaultBrowser(url);
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -4686,7 +4684,7 @@ void GUI_App::stop_http_server()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GUI_App::switch_staff_pick(bool on)
 | 
					void GUI_App::switch_staff_pick(bool on)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    mainframe->m_webview->SendDesignStaffpick(on ? m_agent : nullptr);
 | 
					    mainframe->m_webview->SendDesignStaffpick(on);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool GUI_App::switch_language()
 | 
					bool GUI_App::switch_language()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -603,7 +603,7 @@ public:
 | 
				
			||||||
    std::string     get_plugin_url(std::string name, std::string country_code);
 | 
					    std::string     get_plugin_url(std::string name, std::string country_code);
 | 
				
			||||||
    int             download_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr);
 | 
					    int             download_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr);
 | 
				
			||||||
    int             install_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr);
 | 
					    int             install_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr);
 | 
				
			||||||
    std::string     get_http_url(std::string country_code);
 | 
					    std::string     get_http_url(std::string country_code, std::string path = {});
 | 
				
			||||||
    std::string     get_model_http_url(std::string country_code);
 | 
					    std::string     get_model_http_url(std::string country_code);
 | 
				
			||||||
    bool            is_compatibility_version();
 | 
					    bool            is_compatibility_version();
 | 
				
			||||||
    bool            check_networking_version();
 | 
					    bool            check_networking_version();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
#include "slic3r/GUI/GUI_App.hpp"
 | 
					#include "slic3r/GUI/GUI_App.hpp"
 | 
				
			||||||
#include "slic3r/GUI/MainFrame.hpp"
 | 
					#include "slic3r/GUI/MainFrame.hpp"
 | 
				
			||||||
#include "libslic3r_version.h"
 | 
					#include "libslic3r_version.h"
 | 
				
			||||||
 | 
					#include "../Utils/Http.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <wx/sizer.h>
 | 
					#include <wx/sizer.h>
 | 
				
			||||||
#include <wx/toolbar.h>
 | 
					#include <wx/toolbar.h>
 | 
				
			||||||
| 
						 | 
					@ -427,10 +428,10 @@ void WebViewPanel::SendRecentList(int images)
 | 
				
			||||||
    RunScript(wxString::Format("window.postMessage(%s)", oss.str()));
 | 
					    RunScript(wxString::Format("window.postMessage(%s)", oss.str()));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WebViewPanel::SendDesignStaffpick(NetworkAgent *agent)
 | 
					void WebViewPanel::SendDesignStaffpick(bool on)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (agent) {
 | 
					    if (on) {
 | 
				
			||||||
        agent->get_design_staffpick(0, 60, [this](std::string body) {
 | 
					        get_design_staffpick(0, 60, [this](std::string body) {
 | 
				
			||||||
            if (body.empty() || body.front() != '{') {
 | 
					            if (body.empty() || body.front() != '{') {
 | 
				
			||||||
                BOOST_LOG_TRIVIAL(warning) << "get_design_staffpick failed " + body;
 | 
					                BOOST_LOG_TRIVIAL(warning) << "get_design_staffpick failed " + body;
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
| 
						 | 
					@ -448,6 +449,13 @@ void WebViewPanel::SendDesignStaffpick(NetworkAgent *agent)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WebViewPanel::OpenModelDetail(std::string id, NetworkAgent *agent)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::string url;
 | 
				
			||||||
 | 
					    if ((agent ? agent->get_model_mall_detail_url(&url, id) : get_model_mall_detail_url(&url, id)) == 0)
 | 
				
			||||||
 | 
					        wxLaunchDefaultBrowser(url);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WebViewPanel::SendLoginInfo()
 | 
					void WebViewPanel::SendLoginInfo()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (wxGetApp().getAgent()) {
 | 
					    if (wxGetApp().getAgent()) {
 | 
				
			||||||
| 
						 | 
					@ -478,6 +486,32 @@ void WebViewPanel::ShowNetpluginTip()
 | 
				
			||||||
    RunScript(strJS);
 | 
					    RunScript(strJS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WebViewPanel::get_design_staffpick(int offset, int limit, std::function<void(std::string)> callback)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    auto host = wxGetApp().get_http_url(wxGetApp().app_config->get_country_code(), "v1/design-service/design/staffpick");
 | 
				
			||||||
 | 
					    std::string url = (boost::format("%1%/?offset=%2%&limit=%3%") % host % offset % limit).str();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Http http = Http::get(url);
 | 
				
			||||||
 | 
					    http.header("accept", "application/json")
 | 
				
			||||||
 | 
					        .header("Content-Type", "application/json")
 | 
				
			||||||
 | 
					        .on_complete([this, callback](std::string body, unsigned status) { callback(body); })
 | 
				
			||||||
 | 
					        .on_error([this, callback](std::string body, std::string error, unsigned status) {
 | 
				
			||||||
 | 
					            callback(body);
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .perform();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int WebViewPanel::get_model_mall_detail_url(std::string *url, std::string id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // https://makerhub-qa.bambu-lab.com/en/models/2077
 | 
				
			||||||
 | 
					    std::string h = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
 | 
				
			||||||
 | 
					    auto l = wxGetApp().app_config->get("language");
 | 
				
			||||||
 | 
					    if (auto n = l.find('_'); n != std::string::npos)
 | 
				
			||||||
 | 
					        l = l.substr(0, n);
 | 
				
			||||||
 | 
					    *url = (boost::format("%1%%2%/models/%3%") % h % l % id).str();
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WebViewPanel::update_mode()
 | 
					void WebViewPanel::update_mode()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GetSizer()->Show(size_t(0), wxGetApp().app_config->get("internal_developer_mode") == "true");
 | 
					    GetSizer()->Show(size_t(0), wxGetApp().app_config->get("internal_developer_mode") == "true");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,10 +94,14 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    void SendRecentList(int images);
 | 
					    void SendRecentList(int images);
 | 
				
			||||||
    void SendDesignStaffpick(NetworkAgent *agent);
 | 
					    void SendDesignStaffpick(bool on);
 | 
				
			||||||
 | 
					    void OpenModelDetail(std::string id, NetworkAgent *agent);
 | 
				
			||||||
    void SendLoginInfo();
 | 
					    void SendLoginInfo();
 | 
				
			||||||
    void ShowNetpluginTip();
 | 
					    void ShowNetpluginTip();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void get_design_staffpick(int offset, int limit, std::function<void(std::string)> callback);
 | 
				
			||||||
 | 
					    int  get_model_mall_detail_url(std::string *url, std::string id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void update_mode();
 | 
					    void update_mode();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue