diff options
Diffstat (limited to 'src/shared')
| -rw-r--r-- | src/shared/util.cpp | 46 | ||||
| -rw-r--r-- | src/shared/util.h | 3 |
2 files changed, 49 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. #include <DbgHelp.h>
#include <set>
#include <boost/scoped_array.hpp>
+#include <QApplication>
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 <http://www.gnu.org/licenses/>. #define WIN32_LEAN_AND_MEAN
#include <Windows.h>
+#include <versioninfo.h>
+
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
|
