1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-03-04 06:09:40 +00:00

Merge branch 'loadingesm4' into 'master'

Track ESM4 file loading progress

See merge request OpenMW/openmw!4516
This commit is contained in:
psi29a 2025-01-17 11:59:20 +00:00
commit e515e99937
4 changed files with 12 additions and 5 deletions

View file

@ -70,7 +70,7 @@ namespace MWWorld
mEncoder != nullptr ? &mEncoder->getStatelessEncoder() : nullptr); mEncoder != nullptr ? &mEncoder->getStatelessEncoder() : nullptr);
reader.setModIndex(index); reader.setModIndex(index);
reader.updateModIndices(mNameToIndex); reader.updateModIndices(mNameToIndex);
mStore.loadESM4(reader); mStore.loadESM4(reader, listener);
break; break;
} }
} }

View file

@ -468,9 +468,16 @@ namespace MWWorld
} }
} }
void ESMStore::loadESM4(ESM4::Reader& reader) void ESMStore::loadESM4(ESM4::Reader& reader, Loading::Listener* listener)
{ {
auto visitorRec = [this](ESM4::Reader& reader) { return ESMStoreImp::readRecord(reader, *this); }; if (listener != nullptr)
listener->setProgressRange(::EsmLoader::fileProgress);
auto visitorRec = [this, listener](ESM4::Reader& reader) {
bool result = ESMStoreImp::readRecord(reader, *this);
if (listener != nullptr)
listener->setProgress(::EsmLoader::fileProgress * reader.getFileOffset() / reader.getFileSize());
return result;
};
ESM4::ReaderUtils::readAll(reader, visitorRec, [](ESM4::Reader&) {}); ESM4::ReaderUtils::readAll(reader, visitorRec, [](ESM4::Reader&) {});
} }

View file

@ -219,7 +219,7 @@ namespace MWWorld
void validateDynamic(); void validateDynamic();
void load(ESM::ESMReader& esm, Loading::Listener* listener, ESM::Dialogue*& dialogue); void load(ESM::ESMReader& esm, Loading::Listener* listener, ESM::Dialogue*& dialogue);
void loadESM4(ESM4::Reader& esm); void loadESM4(ESM4::Reader& esm, Loading::Listener* listener);
template <class T> template <class T>
const Store<T>& get() const const Store<T>& get() const

View file

@ -217,7 +217,7 @@ namespace ESM4
// Methods added for updating loading progress bars // Methods added for updating loading progress bars
inline std::size_t getFileSize() const { return mFileSize; } inline std::size_t getFileSize() const { return mFileSize; }
inline std::size_t getFileOffset() const { return mStream->tellg(); } inline std::size_t getFileOffset() const { return mSavedStream ? mSavedStream->tellg() : mStream->tellg(); }
// Methods added for saving/restoring context // Methods added for saving/restoring context
ReaderContext getContext(); // WARN: must be called immediately after reading the record header ReaderContext getContext(); // WARN: must be called immediately after reading the record header