ENH: adjust connect error string

Change-Id: I2ec6743fb6a332af8742a229b672737342abb779
Jira: STUDIO-5935
This commit is contained in:
chunmao.guo 2024-01-10 09:03:34 +08:00 committed by Lane.Wei
parent 809f82b520
commit ac406d14ce
4 changed files with 69 additions and 41 deletions

View File

@ -513,7 +513,7 @@ void ImageGrid::render(wxDC& dc)
dc.DrawRectangle({ 0, 0, size.x, size.y });
if (!m_status_msg.IsEmpty()) {
auto si = m_status_icon.GetBmpSize();
auto st = dc.GetTextExtent(m_status_msg);
auto st = dc.GetMultiLineTextExtent(m_status_msg);
auto rect = wxRect{0, 0, max(st.x, si.x), si.y + 26 + st.y}.CenterIn(wxRect({0, 0}, size));
dc.DrawBitmap(m_status_icon.bmp(), rect.x + (rect.width - si.x) / 2, rect.y);
dc.SetTextForeground(wxColor(0x909090));

View File

@ -242,7 +242,7 @@ void MediaFilePanel::SetMachineObject(MachineObject* obj)
m_button_management->Enable(false);
SetSelecting(false);
if (m_machine.empty()) {
m_image_grid->SetStatus(m_bmp_failed, _L("No printers."));
m_image_grid->SetStatus(m_bmp_failed, _L("Please confirm if the printer is connected."));
} else {
boost::shared_ptr<PrinterFileSystem> fs(new PrinterFileSystem);
fs->Attached();
@ -282,17 +282,20 @@ void MediaFilePanel::SetMachineObject(MachineObject* obj)
switch (status) {
case PrinterFileSystem::Initializing: icon = m_bmp_loading; msg = _L("Initializing..."); break;
case PrinterFileSystem::Connecting: icon = m_bmp_loading; msg = _L("Connecting..."); break;
case PrinterFileSystem::Failed: icon = m_bmp_failed; if (extra != 1) msg = _L("Connect failed [%d]!"); break;
case PrinterFileSystem::Failed: icon = m_bmp_failed; if (extra != 1) msg = _L("Please check the network and try again, You can restart or update the printer if the issue persists."); break;
case PrinterFileSystem::ListSyncing: icon = m_bmp_loading; msg = _L("Loading file list..."); break;
case PrinterFileSystem::ListReady: icon = extra == 0 ? m_bmp_empty : m_bmp_failed; msg = extra == 0 ? _L("No files [%d]") : _L("Load failed [%d]"); break;
}
if (!e.GetString().IsEmpty()) msg = e.GetString();
int err = fs->GetLastError();
if (!e.GetString().IsEmpty())
msg = e.GetString();
if (err != 0)
msg += wxString::Format(" [%d]", err);
if (fs->GetCount() == 0 && !msg.empty())
m_image_grid->SetStatus(icon, msg);
if (e.GetInt() == PrinterFileSystem::Initializing)
fetchUrl(boost::weak_ptr(fs));
int err = fs->GetLastError();
if ((status == PrinterFileSystem::Failed && m_last_errors.find(err) == m_last_errors.end()) ||
status == PrinterFileSystem::ListReady) {
json j;
@ -426,19 +429,19 @@ void MediaFilePanel::fetchUrl(boost::weak_ptr<PrinterFileSystem> wfs)
if (!fs || fs != m_image_grid->GetFileSystem()) return;
if (!IsEnabled()) {
m_waiting_enable = true;
m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Device connection not ready)!"));
m_image_grid->SetStatus(m_bmp_failed, _L("Please confirm if the printer is connected."));
fs->SetUrl("0");
return;
}
m_waiting_enable = false;
if (!m_local_support && !m_remote_support) {
m_waiting_support = true;
m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not supported on the current printer version)!"));
m_image_grid->SetStatus(m_bmp_failed, _L("Please update the printer firmware and try again."));
fs->SetUrl("0");
return;
}
if (!m_sdcard_exist) {
m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Storage unavailable, insert SD card.)!"));
m_image_grid->SetStatus(m_bmp_failed, _L("Please check if the SD card is inserted into the printer.\nIf it still cannot be read, you can try formatting the SD card."));
fs->SetUrl("0");
return;
}
@ -450,12 +453,12 @@ void MediaFilePanel::fetchUrl(boost::weak_ptr<PrinterFileSystem> wfs)
return;
}
if (m_lan_mode) {
m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not accessible in LAN-only mode)!"));
m_image_grid->SetStatus(m_bmp_failed, _L("Problem occured. Please update the printer firmware and try again."));
fs->SetUrl("0");
return;
}
if (!m_remote_support && m_local_support) { // not support tutk
m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Missing LAN ip of printer)!"));
m_image_grid->SetStatus(m_bmp_failed, _L("Please enter the IP of printer to connect."));
fs->SetUrl("1");
return;
}
@ -470,7 +473,7 @@ void MediaFilePanel::fetchUrl(boost::weak_ptr<PrinterFileSystem> wfs)
if (boost::algorithm::starts_with(url, "bambu:///")) {
fs->SetUrl(url + "&device=" + m + "&dev_ver=" + v);
} else {
m_image_grid->SetStatus(m_bmp_failed, wxString::Format(_L("Initialize failed (%s)!"), url.empty() ? _L("Network unreachable") : from_u8(url)));
m_image_grid->SetStatus(m_bmp_failed, _L("Connection Failed. Please check the network and try again"));
fs->SetUrl("3");
}
});

View File

@ -25,6 +25,15 @@
#include <wx/clipbrd.h>
#include "wx/evtloop.h"
static std::map<int, std::string> error_messages = {
{1, L("The device cannot handle more conversations. Please retry later.")},
{2, L("Player is malfunctioning. Please reinstall the system player.")},
{100, L("The player is not loaded, please click \"play\" button to retry.")},
{101, L("The player is not loaded, please click \"play\" button to retry.")},
{102, L("The player is not loaded, please click \"play\" button to retry.")},
{103, L("The player is not loaded, please click \"play\" button to retry.")}
};
namespace Slic3r {
namespace GUI {
@ -140,7 +149,7 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj)
m_lan_passwd.clear();
m_dev_ver.clear();
m_tutk_state.clear();
m_remote_support = true;
m_remote_support = false;
m_device_busy = false;
}
Enable(obj && obj->is_connected() && obj->m_push_count > 0);
@ -204,24 +213,23 @@ void MediaPlayCtrl::Play()
}
m_failed_code = 0;
if (m_machine.empty()) {
Stop(_L("Initialize failed (No Device)!"));
Stop(_L("Please confirm if the printer is connected."));
return;
}
if (!IsEnabled()) {
Stop(_L("Initialize failed (Device connection not ready)!"));
Stop(_L("Please confirm if the printer is connected."));
return;
}
if (!m_camera_exists) {
Stop(_L("Initialize failed (No Camera Device)!"));
Stop(_L("Printer camera is malfunctioning."));
return;
}
if (m_device_busy) {
Stop(_L("Printer is busy downloading, Please wait for the downloading to finish."));
Stop(_L("The printer is currently busy downloading. Please try again after it finishes."));
m_failed_retry = 0;
return;
}
m_last_state = MEDIASTATE_INITIALIZING;
m_button_play->SetIcon("media_stop");
NetworkAgent *agent = wxGetApp().getAgent();
std::string agent_version = agent ? agent->get_version() : "";
@ -241,25 +249,27 @@ void MediaPlayCtrl::Play()
return;
}
m_disable_lan = false;
if (m_lan_ip.empty())
m_failed_code = -1;
// m_lan_mode && m_lan_proto == LVL_None (x)
// !m_lan_mode && m_remote_support
// !m_lan_mode && !m_remote_support && m_lan_proto > LVL_None (use local tunnel)
// !m_lan_mode && !m_remote_support && m_lan_proto == LVL_None (x)
if (m_lan_mode) {
Stop(m_lan_proto < 0
? _L("Initialize failed (Not supported on the current printer version)!")
: _L("Initialize failed (Not accessible in LAN-only mode)!"));
if (m_lan_proto == MachineObject::LVL_None && !m_remote_support) {
Stop(_L("Please update the printer firmware and try again."));
return;
}
m_disable_lan = false;
m_failed_code = 0;
m_last_state = MEDIASTATE_INITIALIZING;
if (!m_remote_support) { // not support tutk
Stop(m_lan_ip.empty()
? _L("Initialize failed (Missing LAN ip of printer)!")
: _L("Initialize failed (Not supported on the current printer version)!"));
m_failed_code = -1;
m_url = "bambu:///local/";
Stop(_L("Please enter the IP of printer to connect."));
return;
}
m_failed_code = 0;
SetStatus(_L("Initializing..."));
if (agent) {
@ -279,7 +289,7 @@ void MediaPlayCtrl::Play()
if (m_last_state == MEDIASTATE_INITIALIZING) {
if (url.empty() || !boost::algorithm::starts_with(url, "bambu:///")) {
m_failed_code = 3;
Stop(wxString::Format(_L("Initialize failed (%s)!"), url.empty() ? _L("Network unreachable") : from_u8(url)));
Stop(_L("Connection Failed. Please check the network and try again"));
} else {
load();
}
@ -301,13 +311,21 @@ void MediaPlayCtrl::Stop(wxString const &msg)
boost::unique_lock lock(m_mutex);
m_tasks.push_back("<stop>");
m_cond.notify_all();
m_last_state = MEDIASTATE_IDLE;
if (!msg.IsEmpty())
SetStatus(msg, false);
else if (m_failed_code)
SetStatus(_L("Stopped [%d]!"), true);
else
SetStatus(msg);
else if (m_failed_code) {
auto iter = error_messages.find(m_failed_code);
auto msg2 = iter == error_messages.end()
? _L("Please check the network and try again, You can restart or update the printer if the issue persists.")
: _L(iter->second.c_str());
if (m_failed_code == 1) {
if (m_last_state == wxMEDIASTATE_PLAYING)
msg2 = _L("The printer has been logged out and cannot connect.");
}
SetStatus(msg2);
} else
SetStatus(_L("Stopped."), false);
m_last_state = MEDIASTATE_IDLE;
if (!m_auto_retry || m_failed_code >= 100 || m_failed_code == 1) // not keep retry on local error or EOS
m_next_retry = wxDateTime();
} else if (!msg.IsEmpty()) {
@ -530,7 +548,7 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event)
} else if (event.GetId()) {
if (m_failed_code == 0)
m_failed_code = 2;
Stop(_L("Load failed [%d]!"));
Stop();
}
} else {
m_last_state = state;
@ -539,7 +557,12 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event)
void MediaPlayCtrl::SetStatus(wxString const &msg2, bool hyperlink)
{
auto msg = wxString::Format(msg2, m_failed_code);
auto msg = msg2;
if (m_failed_code != 0) {
int state2 = m_last_state >= MEDIASTATE_IDLE ? m_last_state - MEDIASTATE_IDLE :
m_last_state + MEDIASTATE_BUFFERING - MEDIASTATE_IDLE;
msg += wxString::Format(" [%d:%d]", state2, m_failed_code);
}
BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::SetStatus: " << msg.ToUTF8().data();
#ifdef __WXMSW__
OutputDebugStringA("MediaPlayCtrl::SetStatus: ");

View File

@ -45,12 +45,12 @@ wxDEFINE_EVENT(EVT_FILE_CALLBACK, wxCommandEvent);
static wxBitmap default_thumbnail;
static std::map<int, std::string> error_messages = {
{PrinterFileSystem::ERROR_PIPE, L("Connection lost. Please retry.")},
{PrinterFileSystem::ERROR_RES_BUSY, L("The device cannot handle more conversations. Please retry later.")},
{PrinterFileSystem::ERROR_PIPE, L("The printer has been logged out and cannot connect.")},
{PrinterFileSystem::ERROR_RES_BUSY, L("Over 4 studio/handy are using remote access, you can close some and try again.")},
{PrinterFileSystem::FILE_NO_EXIST, L("File does not exist.")},
{PrinterFileSystem::FILE_CHECK_ERR, L("File checksum error. Please retry.")},
{PrinterFileSystem::FILE_TYPE_ERR, L("Not supported on the current printer version.")},
{PrinterFileSystem::STORAGE_UNAVAILABLE, L("Storage unavailable, insert SD card.")}
{PrinterFileSystem::STORAGE_UNAVAILABLE, L("Please check if the SD card is inserted into the printer.\nIf it still cannot be read, you can try formatting the SD card.")}
};
struct StaticBambuLib : BambuLib {
@ -1134,8 +1134,7 @@ void PrinterFileSystem::RecvMessageThread()
if (n == 0) {
HandleResponse(l, sample);
} else if (n == Bambu_stream_end) {
if (m_status == ListSyncing)
m_stopped = true;
m_stopped = true;
Reconnect(l, m_status == ListSyncing ? ERROR_RES_BUSY : ERROR_PIPE);
} else if (n == Bambu_would_block) {
m_cond.timed_wait(l, boost::posix_time::milliseconds(m_messages.empty() && m_callbacks.empty() ? 1000 : 20));
@ -1275,6 +1274,9 @@ void PrinterFileSystem::Reconnect(boost::unique_lock<boost::mutex> &l, int resul
m_session.tunnel = tunnel;
wxLogMessage("PrinterFileSystem::Reconnect Connected");
break;
} else if (ret == 1) {
m_stopped = true;
ret = ERROR_RES_BUSY;
}
if (tunnel) {
Bambu_Close(tunnel);