mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-16 17:59:56 +00:00
Catch and log exceptions on loading cell names
Instead of terminating the process.
This commit is contained in:
parent
5a691380ea
commit
d18d860ea2
2 changed files with 26 additions and 18 deletions
|
@ -1,37 +1,45 @@
|
||||||
#include "cellnameloader.hpp"
|
#include "cellnameloader.hpp"
|
||||||
|
|
||||||
|
#include <components/debug/debuglog.hpp>
|
||||||
#include <components/esm3/loadcell.hpp>
|
#include <components/esm3/loadcell.hpp>
|
||||||
#include <components/files/qtconversion.hpp>
|
#include <components/files/qtconversion.hpp>
|
||||||
|
|
||||||
QSet<QString> CellNameLoader::getCellNames(QStringList& contentPaths)
|
QSet<QString> CellNameLoader::getCellNames(const QStringList& contentPaths)
|
||||||
{
|
{
|
||||||
QSet<QString> cellNames;
|
QSet<QString> cellNames;
|
||||||
ESM::ESMReader esmReader;
|
ESM::ESMReader esmReader;
|
||||||
|
|
||||||
// Loop through all content files
|
// Loop through all content files
|
||||||
for (auto& contentPath : contentPaths)
|
for (const QString& contentPath : contentPaths)
|
||||||
{
|
{
|
||||||
if (contentPath.endsWith(".omwscripts", Qt::CaseInsensitive))
|
if (contentPath.endsWith(".omwscripts", Qt::CaseInsensitive))
|
||||||
continue;
|
continue;
|
||||||
esmReader.open(Files::pathFromQString(contentPath));
|
try
|
||||||
|
|
||||||
// Loop through all records
|
|
||||||
while (esmReader.hasMoreRecs())
|
|
||||||
{
|
{
|
||||||
ESM::NAME recordName = esmReader.getRecName();
|
esmReader.open(Files::pathFromQString(contentPath));
|
||||||
esmReader.getRecHeader();
|
|
||||||
|
|
||||||
if (isCellRecord(recordName))
|
// Loop through all records
|
||||||
|
while (esmReader.hasMoreRecs())
|
||||||
{
|
{
|
||||||
QString cellName = getCellName(esmReader);
|
ESM::NAME recordName = esmReader.getRecName();
|
||||||
if (!cellName.isEmpty())
|
esmReader.getRecHeader();
|
||||||
{
|
|
||||||
cellNames.insert(cellName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stop loading content for this record and continue to the next
|
if (isCellRecord(recordName))
|
||||||
esmReader.skipRecord();
|
{
|
||||||
|
QString cellName = getCellName(esmReader);
|
||||||
|
if (!cellName.isEmpty())
|
||||||
|
{
|
||||||
|
cellNames.insert(cellName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stop loading content for this record and continue to the next
|
||||||
|
esmReader.skipRecord();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const std::exception& e)
|
||||||
|
{
|
||||||
|
Log(Debug::Error) << "Failed to get cell names from " << contentPath.toStdString() << ": " << e.what();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
* @param contentPaths the file paths of each content file to be examined
|
* @param contentPaths the file paths of each content file to be examined
|
||||||
* @return the names of all cells
|
* @return the names of all cells
|
||||||
*/
|
*/
|
||||||
QSet<QString> getCellNames(QStringList& contentPaths);
|
QSet<QString> getCellNames(const QStringList& contentPaths);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue