Improve format version in content selector

qt6_macos
Andrei Kortunov 1 year ago
parent 78459314bf
commit 93e50cc7aa

@ -341,7 +341,7 @@ namespace
{ {
std::cout << "Author: " << esm.getAuthor() << '\n' std::cout << "Author: " << esm.getAuthor() << '\n'
<< "Description: " << esm.getDesc() << '\n' << "Description: " << esm.getDesc() << '\n'
<< "File format version: " << esm.getFVer() << '\n'; << "File format version: " << esm.esmVersionF() << '\n';
std::vector<ESM::Header::MasterData> masterData = esm.getGameFiles(); std::vector<ESM::Header::MasterData> masterData = esm.getGameFiles();
if (!masterData.empty()) if (!masterData.empty())
{ {
@ -508,7 +508,7 @@ namespace
ToUTF8::Utf8Encoder encoder(ToUTF8::calculateEncoding(info.encoding)); ToUTF8::Utf8Encoder encoder(ToUTF8::calculateEncoding(info.encoding));
esm.setEncoder(&encoder); esm.setEncoder(&encoder);
esm.setHeader(data.mHeader); esm.setHeader(data.mHeader);
esm.setVersion(ESM::VER_13); esm.setVersion(ESM::VER_130);
esm.setRecordCount(recordCount); esm.setRecordCount(recordCount);
std::fstream save(info.outname, std::fstream::out | std::fstream::binary); std::fstream save(info.outname, std::fstream::out | std::fstream::binary);

@ -489,7 +489,7 @@ void ContentSelectorModel::ContentModel::addFiles(const QString& path, bool newf
fileReader.setEncoder(&encoder); fileReader.setEncoder(&encoder);
fileReader.open(std::move(stream), filepath); fileReader.open(std::move(stream), filepath);
file->setAuthor(QString::fromUtf8(fileReader.getAuthor().c_str())); file->setAuthor(QString::fromUtf8(fileReader.getAuthor().c_str()));
file->setFormat(fileReader.getFormatVersion()); file->setFormat(QString::number(fileReader.esmVersionF()));
file->setDescription(QString::fromUtf8(fileReader.getDesc().c_str())); file->setDescription(QString::fromUtf8(fileReader.getDesc().c_str()));
for (const auto& master : fileReader.getGameFiles()) for (const auto& master : fileReader.getGameFiles())
file->addGameFile(QString::fromUtf8(master.name.c_str())); file->addGameFile(QString::fromUtf8(master.name.c_str()));
@ -505,11 +505,11 @@ void ContentSelectorModel::ContentModel::addFiles(const QString& path, bool newf
case ESM::Format::Tes4: case ESM::Format::Tes4:
{ {
ToUTF8::StatelessUtf8Encoder encoder(ToUTF8::calculateEncoding(mEncoding.toStdString())); ToUTF8::StatelessUtf8Encoder encoder(ToUTF8::calculateEncoding(mEncoding.toStdString()));
ESM4::Reader reader(std::move(stream), filepath, nullptr, &encoder, true); ESM4::Reader fileReader(std::move(stream), filepath, nullptr, &encoder, true);
file->setAuthor(QString::fromUtf8(reader.getAuthor().c_str())); file->setAuthor(QString::fromUtf8(fileReader.getAuthor().c_str()));
file->setFormat(reader.esmVersion()); file->setFormat(QString::number(fileReader.esmVersionF()));
file->setDescription(QString::fromUtf8(reader.getDesc().c_str())); file->setDescription(QString::fromUtf8(fileReader.getDesc().c_str()));
for (const auto& master : reader.getGameFiles()) for (const auto& master : fileReader.getGameFiles())
file->addGameFile(QString::fromUtf8(master.name.c_str())); file->addGameFile(QString::fromUtf8(master.name.c_str()));
break; break;
} }

@ -26,7 +26,7 @@ void ContentSelectorModel::EsmFile::setDate(const QDateTime& modified)
mModified = modified; mModified = modified;
} }
void ContentSelectorModel::EsmFile::setFormat(int format) void ContentSelectorModel::EsmFile::setFormat(const QString& format)
{ {
mVersion = format; mVersion = format;
} }
@ -51,8 +51,7 @@ QByteArray ContentSelectorModel::EsmFile::encodedData() const
QByteArray encodedData; QByteArray encodedData;
QDataStream stream(&encodedData, QIODevice::WriteOnly); QDataStream stream(&encodedData, QIODevice::WriteOnly);
stream << mFileName << mAuthor << QString::number(mVersion) << mModified.toString() << mPath << mDescription stream << mFileName << mAuthor << mVersion << mModified.toString() << mPath << mDescription << mGameFiles;
<< mGameFiles;
return encodedData; return encodedData;
} }

@ -40,7 +40,7 @@ namespace ContentSelectorModel
void setAuthor(const QString& author); void setAuthor(const QString& author);
void setSize(const int size); void setSize(const int size);
void setDate(const QDateTime& modified); void setDate(const QDateTime& modified);
void setFormat(const int format); void setFormat(const QString& format);
void setFilePath(const QString& path); void setFilePath(const QString& path);
void setGameFiles(const QStringList& gameFiles); void setGameFiles(const QStringList& gameFiles);
void setDescription(const QString& description); void setDescription(const QString& description);
@ -51,7 +51,7 @@ namespace ContentSelectorModel
QString fileName() const { return mFileName; } QString fileName() const { return mFileName; }
QString author() const { return mAuthor; } QString author() const { return mAuthor; }
QDateTime modified() const { return mModified; } QDateTime modified() const { return mModified; }
ESM::FormatVersion formatVersion() const { return mVersion; } QString formatVersion() const { return mVersion; }
QString filePath() const { return mPath; } QString filePath() const { return mPath; }
/// @note Contains file names, not paths. /// @note Contains file names, not paths.
@ -76,7 +76,7 @@ namespace ContentSelectorModel
private: private:
QString mTooltipTemlate = tr( QString mTooltipTemlate = tr(
"<b>Author:</b> %1<br/>" "<b>Author:</b> %1<br/>"
"<b>Version:</b> %2<br/>" "<b>Format version:</b> %2<br/>"
"<b>Modified:</b> %3<br/>" "<b>Modified:</b> %3<br/>"
"<b>Path:</b><br/>%4<br/>" "<b>Path:</b><br/>%4<br/>"
"<br/><b>Description:</b><br/>%5<br/>" "<br/><b>Description:</b><br/>%5<br/>"
@ -85,7 +85,7 @@ namespace ContentSelectorModel
QString mFileName; QString mFileName;
QString mAuthor; QString mAuthor;
QDateTime mModified; QDateTime mModified;
ESM::FormatVersion mVersion = ESM::DefaultFormatVersion; QString mVersion = QString::number(ESM::DefaultFormatVersion);
QString mPath; QString mPath;
QStringList mGameFiles; QStringList mGameFiles;
QString mDescription; QString mDescription;

@ -13,12 +13,6 @@
namespace ESM namespace ESM
{ {
enum Version
{
VER_12 = 0x3f99999a,
VER_13 = 0x3fa66666
};
enum RecordFlag enum RecordFlag
{ {
// This flag exists, but is not used to determine if a record has been deleted while loading // This flag exists, but is not used to determine if a record has been deleted while loading

@ -53,9 +53,9 @@ namespace ESM
* *
*************************************************************************/ *************************************************************************/
int getVer() const { return mHeader.mData.version; } int getVer() const { return mHeader.mData.version.ui; }
int getRecordCount() const { return mHeader.mData.records; } int getRecordCount() const { return mHeader.mData.records; }
float getFVer() const { return (mHeader.mData.version == VER_12) ? 1.2f : 1.3f; } float esmVersionF() const { return (mHeader.mData.version.f); }
const std::string& getAuthor() const { return mHeader.mData.author; } const std::string& getAuthor() const { return mHeader.mData.author; }
const std::string& getDesc() const { return mHeader.mData.desc; } const std::string& getDesc() const { return mHeader.mData.desc; }
const std::vector<Header::MasterData>& getGameFiles() const { return mHeader.mMaster; } const std::vector<Header::MasterData>& getGameFiles() const { return mHeader.mMaster; }

@ -84,12 +84,12 @@ namespace ESM
unsigned int ESMWriter::getVersion() const unsigned int ESMWriter::getVersion() const
{ {
return mHeader.mData.version; return mHeader.mData.version.ui;
} }
void ESMWriter::setVersion(unsigned int ver) void ESMWriter::setVersion(unsigned int ver)
{ {
mHeader.mData.version = ver; mHeader.mData.version.ui = ver;
} }
void ESMWriter::setType(int type) void ESMWriter::setType(int type)

@ -2,6 +2,7 @@
#include "esmreader.hpp" #include "esmreader.hpp"
#include "esmwriter.hpp" #include "esmwriter.hpp"
#include <components/esm/common.hpp>
namespace ESM namespace ESM
{ {
@ -83,7 +84,7 @@ namespace ESM
esm.writeHNOCString("FNAM", mName); esm.writeHNOCString("FNAM", mName);
if (esm.getVersion() == VER_12) if (esm.getVersion() == VER_120)
esm.writeHNT("WEAT", mData.mProbabilities, mData.mProbabilities.size() - 2); esm.writeHNT("WEAT", mData.mProbabilities, mData.mProbabilities.size() - 2);
else else
esm.writeHNT("WEAT", mData.mProbabilities); esm.writeHNT("WEAT", mData.mProbabilities);

@ -9,7 +9,7 @@ namespace ESM
void Header::blank() void Header::blank()
{ {
mData.version = VER_13; mData.version.ui = VER_130;
mData.type = 0; mData.type = 0;
mData.author.clear(); mData.author.clear();
mData.desc.clear(); mData.desc.clear();
@ -26,7 +26,7 @@ namespace ESM
if (esm.isNextSub("HEDR")) if (esm.isNextSub("HEDR"))
{ {
esm.getSubHeader(); esm.getSubHeader();
esm.getT(mData.version); esm.getT(mData.version.ui);
esm.getT(mData.type); esm.getT(mData.type);
mData.author = esm.getMaybeFixedStringSize(32); mData.author = esm.getMaybeFixedStringSize(32);
mData.desc = esm.getMaybeFixedStringSize(256); mData.desc = esm.getMaybeFixedStringSize(256);

@ -3,6 +3,7 @@
#include <vector> #include <vector>
#include "components/esm/common.hpp"
#include "components/esm/esmcommon.hpp" #include "components/esm/esmcommon.hpp"
#include "components/esm3/formatversion.hpp" #include "components/esm3/formatversion.hpp"
@ -13,11 +14,7 @@ namespace ESM
struct Data struct Data
{ {
/* File format version. This is actually a float, the supported ESM::ESMVersion version;
versions are 1.2 and 1.3. These correspond to:
1.2 = 0x3f99999a and 1.3 = 0x3fa66666
*/
uint32_t version;
int32_t type; // 0=esp, 1=esm, 32=ess (unused) int32_t type; // 0=esp, 1=esm, 32=ess (unused)
std::string author; // Author's name std::string author; // Author's name
std::string desc; // File description std::string desc; // File description

Loading…
Cancel
Save