summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2016-11-24 23:28:55 +0100
committerPetr Mrázek <peterix@gmail.com>2016-11-24 23:28:55 +0100
commit486d6535867d35e801e9f0b11423783e5b6caadc (patch)
tree252e78f043d01889c7b1adeb7c9a8352cd7b2530
parent121e2fd46ca109e6aadef0924f8ef9fcd1931bc3 (diff)
downloadMultiMC-486d6535867d35e801e9f0b11423783e5b6caadc.tar
MultiMC-486d6535867d35e801e9f0b11423783e5b6caadc.tar.gz
MultiMC-486d6535867d35e801e9f0b11423783e5b6caadc.tar.lz
MultiMC-486d6535867d35e801e9f0b11423783e5b6caadc.tar.xz
MultiMC-486d6535867d35e801e9f0b11423783e5b6caadc.zip
NOISSUE Better Windows version detection and user agent
-rw-r--r--application/resources/MultiMC.manifest6
-rw-r--r--libraries/ganalytics/src/ganalytics_worker.cpp3
-rw-r--r--libraries/ganalytics/src/sys_win32.cpp88
3 files changed, 47 insertions, 50 deletions
diff --git a/application/resources/MultiMC.manifest b/application/resources/MultiMC.manifest
index 3acf8f7f..9278f6e4 100644
--- a/application/resources/MultiMC.manifest
+++ b/application/resources/MultiMC.manifest
@@ -20,8 +20,12 @@
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates app support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
- <!--The ID below indicates app support for Windows Developer Preview / Windows 8 -->
+ <!--The ID below indicates app support for Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+ <!--The ID below indicates app support for Windows 8.1 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+ <!--The ID below indicates app support for Windows 10 -->
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
</assembly> \ No newline at end of file
diff --git a/libraries/ganalytics/src/ganalytics_worker.cpp b/libraries/ganalytics/src/ganalytics_worker.cpp
index d002924f..435306a4 100644
--- a/libraries/ganalytics/src/ganalytics_worker.cpp
+++ b/libraries/ganalytics/src/ganalytics_worker.cpp
@@ -106,10 +106,9 @@ QString GAnalyticsWorker::getScreenResolution()
*/
QString GAnalyticsWorker::getUserAgent()
{
- QString locale = QLocale::system().name();
QString system = Sys::getSystemInfo();
- return QString("%1/%2 (%3; %4) GAnalytics/1.0 (Qt/%5)").arg(m_appName).arg(m_appVersion).arg(system).arg(locale).arg(QT_VERSION_STR);
+ return QString("%1/%2 (%3)").arg(m_appName).arg(m_appVersion).arg(system);
}
/**
diff --git a/libraries/ganalytics/src/sys_win32.cpp b/libraries/ganalytics/src/sys_win32.cpp
index 4c4e35a9..d5e33172 100644
--- a/libraries/ganalytics/src/sys_win32.cpp
+++ b/libraries/ganalytics/src/sys_win32.cpp
@@ -1,56 +1,51 @@
#include "sys.h"
-// FIXME: replace with our version...
+#include <windows.h>
+
QString Sys::getSystemInfo()
{
- QSysInfo::WinVersion version = QSysInfo::windowsVersion();
- QString os("Windows; ");
- switch (version)
+ static QString cached;
+ if(!cached.isNull())
{
- case QSysInfo::WV_95:
- os += "Win 95";
- break;
- case QSysInfo::WV_98:
- os += "Win 98";
- break;
- case QSysInfo::WV_Me:
- os += "Win ME";
- break;
- case QSysInfo::WV_NT:
- os += "Win NT";
- break;
- case QSysInfo::WV_2000:
- os += "Win 2000";
- break;
- case QSysInfo::WV_2003:
- os += "Win Server 2003";
- break;
- case QSysInfo::WV_VISTA:
- os += "Win Vista";
- break;
- case QSysInfo::WV_WINDOWS7:
- os += "Win 7";
- break;
- case QSysInfo::WV_WINDOWS8:
- os += "Win 8";
- break;
- case QSysInfo::WV_WINDOWS8_1:
- os += "Win 8.1";
- break;
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0))
- case QSysInfo::WV_WINDOWS10:
- os += "Win 10";
- break;
+ return cached;
+ }
+ else
+ {
+ // We support only Windows NT (XP and up) - everything else is not interesting.
+ OSVERSIONINFO osvi;
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
+ GetVersionExW(&osvi);
+ QString os = QString("Windows NT %1.%2").arg(osvi.dwMajorVersion).arg(osvi.dwMinorVersion);
+
+#if defined(_WIN64)
+ // 64-bit programs run only on Win64
+ os.append("; Win64");
+ // determine CPU type
+ SYSTEM_INFO info;
+ ZeroMemory(&info, sizeof(SYSTEM_INFO));
+ GetNativeSystemInfo(&info);
+ auto arch = info.wProcessorArchitecture;
+ if(arch == PROCESSOR_ARCHITECTURE_AMD64)
+ {
+ os.append("; x64");
+ }
+ else if (arch == PROCESSOR_ARCHITECTURE_IA64)
+ {
+ os.append("; IA64");
+ }
+#elif defined(_WIN32)
+ // 32-bit programs run on both 32-bit and 64-bit Windows
+ // so must sniff
+ BOOL f64 = false;
+ if(IsWow64Process(GetCurrentProcess(), &f64) && f64)
+ {
+ os.append("; WOW64");
+ }
#endif
- default:
- os = "Windows; unknown";
- break;
+ return os;
}
- return os;
}
-#include <windows.h>
-
uint64_t Sys::getSystemRam()
{
MEMORYSTATUSEX status;
@@ -63,10 +58,8 @@ uint64_t Sys::getSystemRam()
bool Sys::isSystem64bit()
{
#if defined(_WIN64)
- return true; // 64-bit programs run only on Win64
+ return true;
#elif defined(_WIN32)
- // 32-bit programs run on both 32-bit and 64-bit Windows
- // so must sniff
BOOL f64 = false;
return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#else
@@ -78,6 +71,7 @@ bool Sys::isSystem64bit()
bool Sys::isCPU64bit()
{
SYSTEM_INFO info;
+ ZeroMemory(&info, sizeof(SYSTEM_INFO));
GetNativeSystemInfo(&info);
auto arch = info.wProcessorArchitecture;
return arch == PROCESSOR_ARCHITECTURE_AMD64 || arch == PROCESSOR_ARCHITECTURE_IA64;