1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-15 18:39:51 +00:00

Issue #567: workaround for crash with non-English ESX files

This commit is contained in:
Marc Zinnschlag 2013-02-17 19:26:01 +01:00
parent 170a9762ac
commit abd307d70e
2 changed files with 17 additions and 13 deletions

View File

@ -72,7 +72,11 @@ void CSMWorld::Data::merge()
void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base) void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
{ {
ESM::ESMReader reader; ESM::ESMReader reader;
/// \todo set encoder
/// \todo set encoding properly, once config implementation has been fixed.
ToUTF8::Utf8Encoder encoder (ToUTF8::calculateEncoding ("win1252"));
reader.setEncoder (&encoder);
reader.open (path.string()); reader.open (path.string());
// Note: We do not need to send update signals here, because at this point the model is not connected // Note: We do not need to send update signals here, because at this point the model is not connected

View File

@ -10,48 +10,48 @@ OpenDialog::OpenDialog(QWidget * parent) : QDialog(parent)
QVBoxLayout *layout = new QVBoxLayout(this); QVBoxLayout *layout = new QVBoxLayout(this);
mFileSelector = new DataFilesList(mCfgMgr, this); mFileSelector = new DataFilesList(mCfgMgr, this);
layout->addWidget(mFileSelector); layout->addWidget(mFileSelector);
//FIXME - same as DataFilesPage::setupDataFiles /// \todo move config to Editor class and add command line options.
// We use the Configuration Manager to retrieve the configuration values // We use the Configuration Manager to retrieve the configuration values
boost::program_options::variables_map variables; boost::program_options::variables_map variables;
boost::program_options::options_description desc; boost::program_options::options_description desc;
desc.add_options() desc.add_options()
("data", boost::program_options::value<Files::PathContainer>()->default_value(Files::PathContainer(), "data")->multitoken()) ("data", boost::program_options::value<Files::PathContainer>()->default_value(Files::PathContainer(), "data")->multitoken())
("data-local", boost::program_options::value<std::string>()->default_value("")) ("data-local", boost::program_options::value<std::string>()->default_value(""))
("fs-strict", boost::program_options::value<bool>()->implicit_value(true)->default_value(false)) ("fs-strict", boost::program_options::value<bool>()->implicit_value(true)->default_value(false))
("encoding", boost::program_options::value<std::string>()->default_value("win1252")); ("encoding", boost::program_options::value<std::string>()->default_value("win1252"));
boost::program_options::notify(variables); boost::program_options::notify(variables);
mCfgMgr.readConfiguration(variables, desc); mCfgMgr.readConfiguration(variables, desc);
Files::PathContainer mDataDirs, mDataLocal; Files::PathContainer mDataDirs, mDataLocal;
if (!variables["data"].empty()) { if (!variables["data"].empty()) {
mDataDirs = Files::PathContainer(variables["data"].as<Files::PathContainer>()); mDataDirs = Files::PathContainer(variables["data"].as<Files::PathContainer>());
} }
std::string local = variables["data-local"].as<std::string>(); std::string local = variables["data-local"].as<std::string>();
if (!local.empty()) { if (!local.empty()) {
mDataLocal.push_back(Files::PathContainer::value_type(local)); mDataLocal.push_back(Files::PathContainer::value_type(local));
} }
mCfgMgr.processPaths(mDataDirs); mCfgMgr.processPaths(mDataDirs);
mCfgMgr.processPaths(mDataLocal); mCfgMgr.processPaths(mDataLocal);
// Set the charset for reading the esm/esp files // Set the charset for reading the esm/esp files
QString encoding = QString::fromStdString(variables["encoding"].as<std::string>()); QString encoding = QString::fromStdString(variables["encoding"].as<std::string>());
Files::PathContainer dataDirs; Files::PathContainer dataDirs;
dataDirs.insert(dataDirs.end(), mDataDirs.begin(), mDataDirs.end()); dataDirs.insert(dataDirs.end(), mDataDirs.begin(), mDataDirs.end());
dataDirs.insert(dataDirs.end(), mDataLocal.begin(), mDataLocal.end()); dataDirs.insert(dataDirs.end(), mDataLocal.begin(), mDataLocal.end());
mFileSelector->setupDataFiles(dataDirs, encoding); mFileSelector->setupDataFiles(dataDirs, encoding);
buttonBox = new QDialogButtonBox(QDialogButtonBox::Open | QDialogButtonBox::Cancel, Qt::Horizontal, this); buttonBox = new QDialogButtonBox(QDialogButtonBox::Open | QDialogButtonBox::Cancel, Qt::Horizontal, this);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
layout->addWidget(buttonBox); layout->addWidget(buttonBox);
setLayout(layout); setLayout(layout);
setWindowTitle(tr("Open")); setWindowTitle(tr("Open"));
} }