/*
Copyright (C) 2012 Sebastian Herbord. All rights reserved.
This file is part of Mod Organizer.
Mod Organizer is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Mod Organizer is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see .
*/
#ifndef UTIL_H
#define UTIL_H
#include
#include
#define WIN32_LEAN_AND_MEAN
#include
#include
namespace MOShared {
/// Test if a file (or directory) by the specified name exists
bool FileExists(const std::string &filename);
bool FileExists(const std::wstring &filename);
bool FileExists(const std::wstring &searchPath, const std::wstring &filename);
std::string ToString(const std::wstring &source, bool utf8);
std::wstring ToWString(const std::string &source, bool utf8);
std::string &ToLower(std::string &text);
std::string ToLower(const std::string &text);
std::wstring &ToLower(std::wstring &text);
std::wstring ToLower(const std::wstring &text);
bool CaseInsensitiveEqual(const std::wstring &lhs, const std::wstring &rhs);
namespace env
{
class Module
{
public:
explicit Module(QString path, std::size_t fileSize);
const QString& path() const;
QString displayPath() const;
std::size_t fileSize() const;
const QString& version() const;
const QString& versionString() const;
QString timestampString() const;
QString toString() const;
private:
struct FileInfo
{
VS_FIXEDFILEINFO ffi;
QString fileDescription;
};
QString m_path;
std::size_t m_fileSize;
QString m_version;
QDateTime m_timestamp;
QString m_versionString;
QString m_md5;
FileInfo getFileInfo() const;
QString getVersion(const VS_FIXEDFILEINFO& fi) const;
QDateTime getTimestamp(const VS_FIXEDFILEINFO& fi) const;
QString getMD5() const;
VS_FIXEDFILEINFO getFixedFileInfo(std::byte* buffer) const;
QString getFileDescription(std::byte* buffer) const;
};
class WindowsVersion
{
public:
WindowsVersion();
QString toString() const;
private:
DWORD m_realMajor, m_realMinor, m_realBuild;
DWORD m_major, m_minor, m_build;
QString m_buildLab, m_productName, m_releaseID;
DWORD m_UBR;
std::optional m_elevated;
void getVersion();
void getRealVersion(HINSTANCE ntdll);
void getReportedVersion(HINSTANCE ntdll);
void getRelease();
void getElevated();
};
class Environment
{
public:
Environment();
const std::vector& loadedModules();
const WindowsVersion& windowsVersion() const;
private:
std::vector m_modules;
WindowsVersion m_windows;
void getLoadedModules();
};
} // namespace env
MOBase::VersionInfo createVersionInfo();
} // namespace MOShared
#endif // UTIL_H