ENH: First Load MWWebPage When User Click OnlineModel Menu

JIRA: none
Change-Id: Id858dd80ae5b24bdb1e939e6a47099983f6bf4df
(cherry picked from commit 5a62a5236fc767283e4360e0b95bb85c18c5cf8e)
(cherry picked from commit 5730141311e2da20551fd811a9349f2b88c5c1b1)
This commit is contained in:
zorro.zhang 2024-06-20 11:33:09 +08:00 committed by Lane.Wei
parent 004fd02b2d
commit 294e60b80c
2 changed files with 59 additions and 69 deletions

View File

@ -36,6 +36,7 @@ WebViewPanel::WebViewPanel(wxWindow *parent)
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize)
{
m_Region = wxGetApp().app_config->get_country_code();
m_loginstatus = -1;
wxString UrlLeft = wxString::Format("file://%s/web/homepage3/left.html", from_u8(resources_dir()));
wxString UrlRight = wxString::Format("file://%s/web/homepage3/home.html", from_u8(resources_dir()));
@ -98,21 +99,18 @@ WebViewPanel::WebViewPanel(wxWindow *parent)
wxLogError("Could not init m_browser");
return;
}
m_onlinefirst = false;
m_online_spec_id = "";
auto host = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
std::string mwurl = (boost::format("%1%studio/webview?from=bambustudio") % host ).str();
m_browserMW = WebView::CreateWebView(this, mwurl);
m_browserMW = WebView::CreateWebView(this, "about:blank");
if (m_browserMW == nullptr) {
wxLogError("Could not init m_browserMW");
return;
}
m_browserMW->Hide();
SetMakerworldModelID("");
m_onlinefirst = false;
m_leftfirst = false;
m_browserLeft = WebView::CreateWebView(this, UrlLeft);
//m_browserLeft = WebView::CreateWebView(this, "https://www.163.com");
if (m_browserLeft == nullptr) {
wxLogError("Could not init m_browser");
return;
@ -288,10 +286,8 @@ void WebViewPanel::ResetWholePage()
RunScript(strJS);
//online
m_online_spec_id = "";
auto host = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
std::string mwurl = (boost::format("%1%studio/webview?from=bambustudio") % host).str();
m_browserMW->LoadURL(mwurl);
SetMakerworldModelID("");
m_onlinefirst = false;
}
void WebViewPanel::load_url(wxString& url)
@ -477,8 +473,6 @@ void WebViewPanel::OnClose(wxCloseEvent& evt)
void WebViewPanel::OnFreshLoginStatus(wxTimerEvent &event)
{
static int loginstatus = -1;
//wxString mwnow = m_browserMW->GetCurrentURL();
auto mainframe = Slic3r::GUI::wxGetApp().mainframe;
@ -486,17 +480,19 @@ void WebViewPanel::OnFreshLoginStatus(wxTimerEvent &event)
Slic3r::GUI::wxGetApp().get_login_info();
if (wxGetApp().is_user_login()) {
if (loginstatus != 1)
if (m_loginstatus != 1)
{
loginstatus = 1;
m_loginstatus = 1;
UpdateMakerworldLoginStatus();
if (m_onlinefirst)
UpdateMakerworldLoginStatus();
}
} else {
if (loginstatus != 0) {
loginstatus = 0;
if (m_loginstatus != 0) {
m_loginstatus = 0;
SetMakerworldPageLoginStatus(false);
if (m_onlinefirst)
SetMakerworldPageLoginStatus(false);
}
}
}
@ -667,7 +663,7 @@ void WebViewPanel::OpenModelDetail(std::string id, NetworkAgent *agent)
{
SwitchLeftMenu("online");
m_online_spec_id = id;
SetMakerworldModelID(id);
}
@ -811,16 +807,8 @@ void WebViewPanel::SetMakerworldPageLoginStatus(bool login ,wxString ticket)
if (m_browserMW == nullptr) return;
wxString mw_currenturl;
if (m_online_spec_id != "") {
auto host = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
wxString language_code = wxGetApp().current_language_code().BeforeFirst('_');
language_code = language_code.ToStdString();
mw_currenturl = (boost::format("%1%%2%/studio/webview?modelid=%3%&from=%4%") % host % language_code.mb_str() % m_online_spec_id % m_online_type.mb_str()).str();
m_onlinefirst = true;
m_online_spec_id = "";
if (m_online_LastUrl != "") {
mw_currenturl = m_online_LastUrl;
} else {
mw_currenturl = m_browserMW->GetCurrentURL();
mw_currenturl.Replace("modelid=", "");
@ -830,8 +818,10 @@ void WebViewPanel::SetMakerworldPageLoginStatus(bool login ,wxString ticket)
wxString mw_jumpurl = "";
bool b = GetJumpUrl(login, ticket, mw_currenturl, mw_jumpurl);
if (b)
if (b) {
m_browserMW->LoadURL(mw_jumpurl);
m_online_LastUrl = "";
}
}
@ -935,11 +925,11 @@ void WebViewPanel::OnNavigationRequest(wxWebViewEvent& evt)
void WebViewPanel::OnNavigationComplete(wxWebViewEvent& evt)
{
if (m_browserMW!=nullptr && evt.GetId() == m_browserMW->GetId())
{
auto host = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
if(m_browserMW->GetCurrentURL().Contains(host))
m_onlinefirst = true;
{
std::string TmpNowUrl = m_browserMW->GetCurrentURL().ToStdString();
std::string mwHost = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
if (TmpNowUrl.find(mwHost) != std::string::npos) m_onlinefirst = true;
if (m_contentname == "online") { // conf save
SetWebviewShow("right", false);
SetWebviewShow("online", true);
@ -1246,6 +1236,8 @@ void WebViewPanel::OnSelectAll(wxCommandEvent& WXUNUSED(evt))
*/
void WebViewPanel::OnError(wxWebViewEvent& evt)
{
BOOST_LOG_TRIVIAL(info) << "HomePage OnError, Url = " << evt.GetURL() << " , Message: "<<evt.GetString();
#define WX_ERROR_CASE(type) \
case type: \
category = #type; \
@ -1275,8 +1267,7 @@ void WebViewPanel::OnError(wxWebViewEvent& evt)
//m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() + "\n" + "'" + category + "'", wxICON_ERROR);
if (evt.GetInt() == wxWEBVIEW_NAV_ERR_CONNECTION && evt.GetId() == m_browserMW->GetId())
{
m_onlinefirst = false;
{
m_online_LastUrl = m_browserMW->GetCurrentURL();
if (m_contentname == "online")
@ -1300,6 +1291,19 @@ void WebViewPanel::OnError(wxWebViewEvent& evt)
UpdateState();
}
void WebViewPanel::SetMakerworldModelID(std::string ModelID)
{
auto host = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
wxString language_code = wxGetApp().current_language_code().BeforeFirst('_');
language_code = language_code.ToStdString();
if (ModelID != "")
m_online_LastUrl = (boost::format("%1%%2%/studio/webview?modelid=%3%&from=bambustudio") % host % language_code.mb_str() % ModelID).str();
else
m_online_LastUrl = (boost::format("%1%%2%/studio/webview?from=bambustudio") % host % language_code.mb_str()).str();
}
void WebViewPanel::SwitchWebContent(std::string modelname, int refresh)
{
m_contentname = modelname;
@ -1329,41 +1333,26 @@ void WebViewPanel::SwitchWebContent(std::string modelname, int refresh)
return;
} else if (modelname.compare("online") == 0) {
if (m_online_spec_id != "") {
auto host = wxGetApp().get_model_http_url(wxGetApp().app_config->get_country_code());
wxString language_code = wxGetApp().current_language_code().BeforeFirst('_');
language_code = language_code.ToStdString();
std::string mwurl = (boost::format("%1%%2%/studio/webview?modelid=%3%&from=%4%") % host % language_code.mb_str() % m_online_spec_id % m_online_type.mb_str()).str();
m_onlinefirst = true;
m_browserMW->LoadURL(mwurl);
SetWebviewShow("online", true);
SetWebviewShow("right", false);
m_online_spec_id = "";
} else {
if (m_onlinefirst == false) {
refresh = 1; // Force Refresh
if (m_online_LastUrl != "") {
m_browserMW->LoadURL(m_online_LastUrl);
m_online_LastUrl = "";
}
else
m_browserMW->Reload();
if (!m_onlinefirst) {
if (m_loginstatus == 1) {
UpdateMakerworldLoginStatus();
} else {
if (refresh == 1)
m_browserMW->Reload();
else {
SetWebviewShow("online", true);
SetWebviewShow("right", false);
}
SetMakerworldPageLoginStatus(false);
}
} else {
if (m_online_LastUrl != "") {
m_browserMW->LoadURL(m_online_LastUrl);
m_online_LastUrl = "";
} else {
//m_browserMW->Reload();
}
}
SetWebviewShow("online", true);
SetWebviewShow("right", false);
GetSizer()->Layout();
// conf save

View File

@ -96,7 +96,7 @@ public:
public:
void ResetWholePage();
void SetMakerworldModelID(std::string ModelID) { m_online_spec_id = ModelID; }
void SetMakerworldModelID(std::string ModelID);
void SwitchWebContent(std::string modelname, int refresh=0);
void SwitchLeftMenu(std::string strMenu);
void OpenOneMakerlab(std::string url);
@ -131,6 +131,7 @@ private:
wxBoxSizer *topsizer;
int m_loginstatus;
wxBoxSizer* m_home_web;
wxWebView* m_browser;
wxWebView* m_browserLeft;
@ -138,7 +139,7 @@ private:
std::string m_contentname;
bool m_leftfirst; //Left First Loaded
bool m_onlinefirst; //Online Page First Load
std::string m_online_spec_id; //Online Page Spec_ID
//std::string m_online_spec_id; // Online Page Spec_ID
wxString m_online_type; //recommend & browse
wxString m_online_LastUrl; //PageLastError Url