Browse Source

Show message to player instead of crashing silently on extraction error

Ivan Savenko 1 year ago
parent
commit
5bc103f50e
2 changed files with 10 additions and 4 deletions
  1. 9 3
      launcher/modManager/cmodmanager.cpp
  2. 1 1
      lib/filesystem/CZipLoader.cpp

+ 9 - 3
launcher/modManager/cmodmanager.cpp

@@ -26,9 +26,15 @@ namespace
 {
 {
 QString detectModArchive(QString path, QString modName, std::vector<std::string> & filesToExtract)
 QString detectModArchive(QString path, QString modName, std::vector<std::string> & filesToExtract)
 {
 {
-	ZipArchive archive(qstringToPath(path));
-
-	filesToExtract = archive.listFiles();
+	try {
+		ZipArchive archive(qstringToPath(path));
+		filesToExtract = archive.listFiles();
+	}
+	catch (const std::runtime_error & e)
+	{
+		logGlobal->error("Failed to open zip archive. Reason: %s", e.what());
+		return "";
+	}
 
 
 	QString modDirName;
 	QString modDirName;
 
 

+ 1 - 1
lib/filesystem/CZipLoader.cpp

@@ -191,7 +191,7 @@ ZipArchive::ZipArchive(const boost::filesystem::path & from)
 #endif
 #endif
 
 
 	if (archive == nullptr)
 	if (archive == nullptr)
-		throw std::runtime_error("Failed to open file '" + from.string() + "' - unable to list files!");
+		throw std::runtime_error("Failed to open file '" + from.string());
 }
 }
 
 
 ZipArchive::~ZipArchive()
 ZipArchive::~ZipArchive()