FIX: handle printer file downalod failure

Change-Id: I1e8cbf4a6d4081270ed78bf7d1471eb1d6114a0b
This commit is contained in:
chunmao.guo 2023-07-31 16:57:23 +08:00 committed by Lane.Wei
parent 5a0f9ff4f0
commit 448e3b8a8b
3 changed files with 18 additions and 3 deletions

View file

@ -19,6 +19,16 @@
//#define PRINTER_FILE_SYSTEM_TEST
#endif
std::string last_system_error() {
return std::error_code(
#ifdef _WIN32
GetLastError(),
#else
errno,
#endif
std::system_category()).message();
}
wxDEFINE_EVENT(EVT_STATUS_CHANGED, wxCommandEvent);
wxDEFINE_EVENT(EVT_MODE_CHANGED, wxCommandEvent);
wxDEFINE_EVENT(EVT_FILE_CHANGED, wxCommandEvent);
@ -628,6 +638,7 @@ void PrinterFileSystem::DownloadNextFile()
prog.total = resp["total"];
if (prog.size == 0) {
download->ofs.open(download->local_path, std::ios::binary);
wxLogWarning("PrinterFileSystem::DownloadNextFile open error: %s\n", wxString::FromUTF8(last_system_error()));
if (!download->ofs) return FILE_OPEN_ERR;
}
if (download->total && (download->size != prog.size || download->total != prog.total)) {
@ -635,6 +646,10 @@ void PrinterFileSystem::DownloadNextFile()
}
// receive data
download->ofs.write((char const *) data, size);
if (!download->ofs) {
wxLogWarning("PrinterFileSystem::DownloadNextFile write error: %s\n", wxString::FromUTF8(last_system_error()));
return FILE_READ_WRITE_ERR;
}
download->boost_md5.process_bytes(data, size);
prog.size += size;
download->total = prog.total;
@ -993,7 +1008,7 @@ void PrinterFileSystem::SendChangedEvent(wxEventType type, size_t index, std::st
if (!str.empty())
event.SetString(wxString::FromUTF8(str.c_str()));
else if (auto iter = error_messages.find(extra); iter != error_messages.end())
event.SetString(wxString::FromUTF8(iter->second.c_str()));
event.SetString(_L(iter->second.c_str()));
event.SetExtraLong(extra);
if (wxThread::IsMain())
ProcessEventLocally(event);

View file

@ -48,7 +48,7 @@ public:
FILE_NAME_INVALID = 11,
FILE_SIZE_ERR = 12,
FILE_OPEN_ERR = 13,
FILE_READ_ERR = 14,
FILE_READ_WRITE_ERR = 14,
FILE_CHECK_ERR = 15,
FILE_TYPE_ERR = 16,
STORAGE_UNAVAILABLE = 17,