diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index f3493d704..67f436229 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -8,6 +8,9 @@ #include +#ifdef __WXMSW__ +#include +#endif #ifdef __APPLE__ #include "../Utils/MacDarkMode.hpp" #endif @@ -149,8 +152,15 @@ void Slic3r::GUI::ImageGrid::DoAction(size_t index, int action) auto &file = m_file_sys->GetFile(index); if (file.IsDownload() && file.progress >= -1) { if (file.progress >= 100) { + if (!m_file_sys->DownloadCheckFile(index)) { + wxMessageBox(wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), _L("Error"), wxOK); + Refresh(); + return; + } #ifdef __WXMSW__ - wxExecute("cmd /c start " + from_u8(file.path), wxEXEC_HIDE_CONSOLE); + auto wfile = boost::filesystem::path(file.path).wstring(); + SHELLEXECUTEINFO info{sizeof(info), 0, NULL, L"open", wfile.c_str(), L"", SW_HIDE}; + ::ShellExecuteEx(&info); #else wxShell("open " + file.path); #endif @@ -166,6 +176,11 @@ void Slic3r::GUI::ImageGrid::DoAction(size_t index, int action) auto &file = m_file_sys->GetFile(index); if (file.IsDownload() && file.progress >= -1) { if (file.progress >= 100) { + if (!m_file_sys->DownloadCheckFile(index)) { + wxMessageBox(wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), _L("Error"), wxOK); + Refresh(); + return; + } #ifdef __WIN32__ wxExecute(L"explorer.exe /select," + from_u8(file.path)); #elif __APPLE__ diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 1f9ef376c..8206c110b 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -111,6 +111,7 @@ void PrinterFileSystem::ListAllFiles() iter1->thumbnail = iter2->thumbnail; iter1->flags = iter2->flags; iter1->progress = iter2->progress; + iter1->path = iter2->path; ++iter1; ++iter2; } else if (*iter1 < *iter2) { ++iter1; @@ -196,6 +197,21 @@ void PrinterFileSystem::DownloadCheckFiles(std::string const &path) } } +bool PrinterFileSystem::DownloadCheckFile(size_t index) +{ + if (index >= m_file_list.size()) return false; + auto &file = m_file_list[index]; + if ((file.flags & FF_DOWNLOAD) == 0) return false; + if (!boost::filesystem::exists(file.path)) { + file.flags &= ~FF_DOWNLOAD; + file.progress = 0; + file.path.clear(); + SendChangedEvent(EVT_DOWNLOAD, index, file.path); + return false; + } + return true; +} + void PrinterFileSystem::DownloadCancel(size_t index) { if (index == (size_t) -1) return; diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.h b/src/slic3r/GUI/Printer/PrinterFileSystem.h index 886bc67e5..775721621 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.h +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.h @@ -128,6 +128,8 @@ public: void DownloadCheckFiles(std::string const &path); + bool DownloadCheckFile(size_t index); + void DownloadCancel(size_t index); size_t GetCount() const; diff --git a/src/slic3r/GUI/wxMediaCtrl2.cpp b/src/slic3r/GUI/wxMediaCtrl2.cpp index 6d92c6eb2..a4d2bed12 100644 --- a/src/slic3r/GUI/wxMediaCtrl2.cpp +++ b/src/slic3r/GUI/wxMediaCtrl2.cpp @@ -54,6 +54,8 @@ void wxMediaCtrl2::Load(wxURI url) wxRegKey key2(wxRegKey::HKCR, "bambu"); wxString clsid; key2.QueryRawValue("Source Filter", clsid); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": clsid %1% path %2%") % clsid % path; + if (path.empty() || !wxFile::Exists(path) || clsid != CLSID_BAMBU_SOURCE) { if (clsid != CLSID_BAMBU_SOURCE || path.empty()) { std::string data_dir_str = Slic3r::data_dir();