From 15db1b76f72a7dd88dbb84df42951c57dfe9917e Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Wed, 16 May 2018 00:42:31 +0100 Subject: Move improved version parsing to util.h and use it everywhere. --- src/shared/util.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/shared/util.h | 3 +++ 2 files changed, 49 insertions(+) (limited to 'src/shared') diff --git a/src/shared/util.cpp b/src/shared/util.cpp index 008c5050..102565f5 100644 --- a/src/shared/util.cpp +++ b/src/shared/util.cpp @@ -27,6 +27,7 @@ along with Mod Organizer. If not, see . #include #include #include +#include namespace MOShared { @@ -202,5 +203,50 @@ std::wstring GetFileVersionString(const std::wstring &fileName) } } +MOBase::VersionInfo createVersionInfo() +{ + VS_FIXEDFILEINFO version = GetFileVersion(QApplication::applicationFilePath().toStdWString()); + + if (version.dwFileFlags | VS_FF_PRERELEASE) + { + // Pre-release builds need annotating + QString versionString = QString::fromStdWString(GetFileVersionString(QApplication::applicationFilePath().toStdWString())); + + // The pre-release flag can be set without the string specifying what type of pre-release + bool noLetters = true; + for (QChar character : versionString) + { + if (character.isLetter()) + { + noLetters = false; + break; + } + } + + if (noLetters) + { + // Default to pre-alpha when release type is unspecified + return MOBase::VersionInfo(version.dwFileVersionMS >> 16, + version.dwFileVersionMS & 0xFFFF, + version.dwFileVersionLS >> 16, + version.dwFileVersionLS & 0xFFFF, + MOBase::VersionInfo::RELEASE_PREALPHA); + } + else + { + // Trust the string to make sense + return MOBase::VersionInfo(versionString); + } + } + else + { + // Non-pre-release builds just need their version numbers reading + return MOBase::VersionInfo(version.dwFileVersionMS >> 16, + version.dwFileVersionMS & 0xFFFF, + version.dwFileVersionLS >> 16, + version.dwFileVersionLS & 0xFFFF); + } +} + } // namespace MOShared diff --git a/src/shared/util.h b/src/shared/util.h index 75c382a7..1fdfb089 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -25,6 +25,8 @@ along with Mod Organizer. If not, see . #define WIN32_LEAN_AND_MEAN #include +#include + namespace MOShared { /// Test if a file (or directory) by the specified name exists @@ -46,6 +48,7 @@ bool CaseInsensitiveEqual(const std::wstring &lhs, const std::wstring &rhs); VS_FIXEDFILEINFO GetFileVersion(const std::wstring &fileName); std::wstring GetFileVersionString(const std::wstring &fileName); +MOBase::VersionInfo createVersionInfo(); } // namespace MOShared -- cgit v1.3.1