From a666dc0a1afa69b5b42aa3a487c8fa971c01cde1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 1 Jan 2017 19:59:46 +0100 Subject: NOISSUE fix up translation selection in settings and add OS/sys arch reporting --- CMakeLists.txt | 1 + api/logic/CMakeLists.txt | 2 +- api/logic/java/launch/CheckJava.cpp | 20 +++++++ api/logic/java/launch/CheckJava.h | 1 + application/pages/global/MultiMCPage.cpp | 39 ++++++-------- application/pages/global/MultiMCPage.h | 5 ++ application/pages/global/MultiMCPage.ui | 4 +- application/setupwizard/SetupWizard.cpp | 93 +++++++++++++++++++------------- application/setupwizard/SetupWizard.h | 3 -- libraries/ganalytics/CMakeLists.txt | 18 +------ libraries/ganalytics/include/sys.h | 19 ------- libraries/ganalytics/src/sys_apple.cpp | 41 -------------- libraries/ganalytics/src/sys_test.cpp | 22 -------- libraries/ganalytics/src/sys_unix.cpp | 49 ----------------- libraries/ganalytics/src/sys_win32.cpp | 46 ---------------- libraries/systeminfo/CMakeLists.txt | 27 ++++++++++ libraries/systeminfo/include/sys.h | 19 +++++++ libraries/systeminfo/src/sys_apple.cpp | 41 ++++++++++++++ libraries/systeminfo/src/sys_test.cpp | 22 ++++++++ libraries/systeminfo/src/sys_unix.cpp | 49 +++++++++++++++++ libraries/systeminfo/src/sys_win32.cpp | 46 ++++++++++++++++ 21 files changed, 308 insertions(+), 259 deletions(-) delete mode 100644 libraries/ganalytics/include/sys.h delete mode 100644 libraries/ganalytics/src/sys_apple.cpp delete mode 100644 libraries/ganalytics/src/sys_test.cpp delete mode 100644 libraries/ganalytics/src/sys_unix.cpp delete mode 100644 libraries/ganalytics/src/sys_win32.cpp create mode 100644 libraries/systeminfo/CMakeLists.txt create mode 100644 libraries/systeminfo/include/sys.h create mode 100644 libraries/systeminfo/src/sys_apple.cpp create mode 100644 libraries/systeminfo/src/sys_test.cpp create mode 100644 libraries/systeminfo/src/sys_unix.cpp create mode 100644 libraries/systeminfo/src/sys_win32.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 69827ee1..d3dcac78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -93,6 +93,7 @@ set(NBT_NAME MultiMC_nbt++) add_subdirectory(libraries/libnbtplusplus) add_subdirectory(libraries/ganalytics) # google analytics library +add_subdirectory(libraries/systeminfo) # system information library add_subdirectory(libraries/hoedown) # markdown parser add_subdirectory(libraries/launcher) # java based launcher part for Minecraft add_subdirectory(libraries/javacheck) # java compatibility checker diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index ffecb073..bcf4b65a 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -490,7 +490,7 @@ set_target_properties(MultiMC_logic PROPERTIES CXX_VISIBILITY_PRESET hidden VISI generate_export_header(MultiMC_logic) # Link -target_link_libraries(MultiMC_logic xz-embedded unpack200 ${QUAZIP_LIBRARIES} ${NBT_NAME} ${ZLIB_LIBRARIES}) +target_link_libraries(MultiMC_logic xz-embedded unpack200 systeminfo ${QUAZIP_LIBRARIES} ${NBT_NAME} ${ZLIB_LIBRARIES}) qt5_use_modules(MultiMC_logic Core Xml Network Concurrent) add_dependencies(MultiMC_logic QuaZIP) diff --git a/api/logic/java/launch/CheckJava.cpp b/api/logic/java/launch/CheckJava.cpp index 41bb6398..717fad49 100644 --- a/api/logic/java/launch/CheckJava.cpp +++ b/api/logic/java/launch/CheckJava.cpp @@ -18,6 +18,7 @@ #include #include #include +#include void CheckJava::executeTask() { @@ -83,6 +84,7 @@ void CheckJava::checkJavaFinished(JavaCheckResult result) emit logLine(tr("Could not start java:"), MessageLevel::Error); emit logLines(result.errorLog.split('\n'), MessageLevel::Error); emit logLine("\nCheck your MultiMC Java settings.", MessageLevel::MultiMC); + printSystemInfo(false, false); emitFailed(tr("Could not start java!")); } else @@ -99,4 +101,22 @@ void CheckJava::checkJavaFinished(JavaCheckResult result) void CheckJava::printJavaInfo(const QString& version, const QString& architecture) { emit logLine(tr("Java is version %1, using %2-bit architecture.\n\n").arg(version, architecture), MessageLevel::MultiMC); + printSystemInfo(true, architecture == "64"); +} + +void CheckJava::printSystemInfo(bool javaIsKnown, bool javaIs64bit) +{ + auto cpu64 = Sys::isCPU64bit(); + auto system64 = Sys::isSystem64bit(); + if(cpu64 != system64) + { + emit logLine(tr("Your CPU architecture is not matching your system architecture. You might want to install a 64bit Operating System.\n\n"), MessageLevel::Error); + } + if(javaIsKnown) + { + if(javaIs64bit != system64) + { + emit logLine(tr("Your Java architecture is not matching your system architecture. You might want to install a 64bit Java version.\n\n"), MessageLevel::Error); + } + } } diff --git a/api/logic/java/launch/CheckJava.h b/api/logic/java/launch/CheckJava.h index 7126f4c4..9e16cbd2 100644 --- a/api/logic/java/launch/CheckJava.h +++ b/api/logic/java/launch/CheckJava.h @@ -36,6 +36,7 @@ private slots: private: void printJavaInfo(const QString & version, const QString & architecture); + void printSystemInfo(bool javaIsKnown, bool javaIs64bit); private: QString m_javaPath; diff --git a/application/pages/global/MultiMCPage.cpp b/application/pages/global/MultiMCPage.cpp index 11129d86..b2ef325d 100644 --- a/application/pages/global/MultiMCPage.cpp +++ b/application/pages/global/MultiMCPage.cpp @@ -55,6 +55,7 @@ MultiMCPage::MultiMCPage(QWidget *parent) : QWidget(parent), ui(new Ui::MultiMCP defaultFormat = new QTextCharFormat(ui->fontPreview->currentCharFormat()); + m_languageModel = MMC->translations(); loadSettings(); if(BuildConfig.UPDATER_ENABLED) @@ -82,6 +83,7 @@ MultiMCPage::MultiMCPage(QWidget *parent) : QWidget(parent), ui(new Ui::MultiMCP } connect(ui->fontSizeBox, SIGNAL(valueChanged(int)), SLOT(refreshFontPreview())); connect(ui->consoleFont, SIGNAL(currentFontChanged(QFont)), SLOT(refreshFontPreview())); + connect(ui->languageBox, SIGNAL(currentIndexChanged(int)), SLOT(languageIndexChanged(int))); } MultiMCPage::~MultiMCPage() @@ -190,6 +192,19 @@ void MultiMCPage::on_lwjglDirBrowseBtn_clicked() } } +void MultiMCPage::languageIndexChanged(int index) +{ + auto languageCode = ui->languageBox->itemData(ui->languageBox->currentIndex()).toString(); + if(languageCode.isEmpty()) + { + qWarning() << "Unknown language at index" << index; + return; + } + auto translations = MMC->translations(); + translations->selectLanguage(languageCode); + translations->updateLanguage(languageCode); +} + void MultiMCPage::refreshUpdateChannelList() { // Stop listening for selection changes. It's going to change a lot while we update it and @@ -363,29 +378,7 @@ void MultiMCPage::loadSettings() auto s = MMC->settings(); // Language { - using LanguageItem = std::pair; - std::vector items; - - QLocale english("en"); - items.push_back(std::make_pair(english.nativeLanguageName(), "en")); - for(QString lang: QDir("translations").entryList(QStringList() << "*.qm", QDir::Files)) - { - lang.remove(".qm"); - lang.remove("mmc_"); - QLocale locale(lang); - QString fullLangName = locale.nativeLanguageName(); - qDebug() << fullLangName << lang; - items.push_back(std::make_pair(fullLangName, lang)); - } - std::sort(items.begin(), items.end(), [](const LanguageItem & a, const LanguageItem & b) - { - return a.first.localeAwareCompare(b.first) < 0; - }); - ui->languageBox->clear(); - for(auto & item: items) - { - ui->languageBox->addItem(item.first, item.second); - } + ui->languageBox->setModel(m_languageModel.get()); ui->languageBox->setCurrentIndex(ui->languageBox->findData(s->get("Language").toString())); } diff --git a/application/pages/global/MultiMCPage.h b/application/pages/global/MultiMCPage.h index 5d4f048e..ed280171 100644 --- a/application/pages/global/MultiMCPage.h +++ b/application/pages/global/MultiMCPage.h @@ -22,6 +22,7 @@ #include "pages/BasePage.h" #include #include "ColorCache.h" +#include class QTextCharFormat; class SettingsObject; @@ -71,6 +72,8 @@ slots: void on_lwjglDirBrowseBtn_clicked(); void on_iconsDirBrowseBtn_clicked(); + void languageIndexChanged(int index); + /*! * Updates the list of update channels in the combo box. */ @@ -100,4 +103,6 @@ private: QTextCharFormat *defaultFormat; std::unique_ptr m_colors; + + std::shared_ptr m_languageModel; }; diff --git a/application/pages/global/MultiMCPage.ui b/application/pages/global/MultiMCPage.ui index f9d74a38..bf2b4da7 100644 --- a/application/pages/global/MultiMCPage.ui +++ b/application/pages/global/MultiMCPage.ui @@ -6,7 +6,7 @@ 0 0 - 458 + 467 614 @@ -320,7 +320,7 @@ - Language (needs restart): + Language: diff --git a/application/setupwizard/SetupWizard.cpp b/application/setupwizard/SetupWizard.cpp index af6b8c8e..3c87759f 100644 --- a/application/setupwizard/SetupWizard.cpp +++ b/application/setupwizard/SetupWizard.cpp @@ -67,7 +67,27 @@ public: languageView->setCurrentIndex(index); connect(languageView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &LanguageWizardPage::languageRowChanged); } - virtual ~LanguageWizardPage() {}; + + virtual ~LanguageWizardPage() + { + }; + + bool validatePage() override + { + auto settings = MMC->settings(); + auto translations = MMC->translations(); + QString key = translations->data(languageView->currentIndex(), Qt::UserRole).toString(); + settings->set("Language", key); + return true; + } + + static bool isRequired() + { + auto settings = MMC->settings(); + if (settings->get("Language").toString().isEmpty()) + return true; + return false; + } protected: void retranslate() override @@ -116,7 +136,35 @@ public: verticalLayout_3->addWidget(checkBox); retranslate(); } - virtual ~AnalyticsWizardPage() {}; + + virtual ~AnalyticsWizardPage() + { + }; + + bool validatePage() override + { + auto settings = MMC->settings(); + auto analytics = MMC->analytics(); + auto status = checkBox->isChecked(); + settings->set("AnalyticsSeen", analytics->version()); + settings->set("Analytics", status); + return true; + } + + static bool isRequired() + { + auto settings = MMC->settings(); + auto analytics = MMC->analytics(); + if(!settings->get("Analytics").toBool()) + { + return false; + } + if(settings->get("AnalyticsSeen").toInt() < analytics->version()) + { + return true; + } + return false; + } protected: void retranslate() override @@ -149,20 +197,12 @@ SetupWizard::SetupWizard(QWidget *parent) : QWizard(parent) { setObjectName(QStringLiteral("SetupWizard")); resize(615, 659); - setOptions(QWizard::NoCancelButton); - if (languageIsRequired()) + setOptions(QWizard::NoCancelButton | QWizard::IndependentPages); + if (LanguageWizardPage::isRequired()) { setPage(Page::Language, new LanguageWizardPage(this)); } - if(javaIsRequired()) - { - // set up java selection - } - else - { - removePage(Page::Java); - } - if(analyticsIsRequired()) + if(AnalyticsWizardPage::isRequired()) { setPage(Page::Analytics, new AnalyticsWizardPage(this)); } @@ -189,14 +229,7 @@ SetupWizard::~SetupWizard() { } -bool SetupWizard::languageIsRequired() -{ - auto settings = MMC->settings(); - if (settings->get("Language").toString().isEmpty()) - return true; - return false; -} - +/* bool SetupWizard::javaIsRequired() { QString currentHostName = QHostInfo::localHostName(); @@ -214,25 +247,13 @@ bool SetupWizard::javaIsRequired() } return false; } - -bool SetupWizard::analyticsIsRequired() -{ - auto settings = MMC->settings(); - auto analytics = MMC->analytics(); - if(settings->get("AnalyticsSeen").toInt() < analytics->version()) - { - return true; - } - return false; -} +*/ bool SetupWizard::isRequired() { - if (languageIsRequired()) - return true; - if (javaIsRequired()) + if (LanguageWizardPage::isRequired()) return true; - if (analyticsIsRequired()) + if (AnalyticsWizardPage::isRequired()) return true; return false; } diff --git a/application/setupwizard/SetupWizard.h b/application/setupwizard/SetupWizard.h index e5c8ad77..adf254c7 100644 --- a/application/setupwizard/SetupWizard.h +++ b/application/setupwizard/SetupWizard.h @@ -34,9 +34,6 @@ public: /* con/destructors */ public: /* methods */ static bool isRequired(); - static bool javaIsRequired(); - static bool languageIsRequired(); - static bool analyticsIsRequired(); private: /* methods */ void retranslate(); diff --git a/libraries/ganalytics/CMakeLists.txt b/libraries/ganalytics/CMakeLists.txt index 9d218c6d..26b1b47c 100644 --- a/libraries/ganalytics/CMakeLists.txt +++ b/libraries/ganalytics/CMakeLists.txt @@ -8,26 +8,10 @@ set(ganalytics_SOURCES src/ganalytics.cpp src/ganalytics_worker.cpp src/ganalytics_worker.h -include/sys.h include/ganalytics.h ) -if (WIN32) - list(APPEND ganalytics_SOURCES src/sys_win32.cpp) -elseif (UNIX) - if(APPLE) - list(APPEND ganalytics_SOURCES src/sys_apple.cpp) - else() - list(APPEND ganalytics_SOURCES src/sys_unix.cpp) - endif() -endif() - add_library(ganalytics STATIC ${ganalytics_SOURCES}) qt5_use_modules(ganalytics Core Gui Network) target_include_directories(ganalytics PUBLIC include) - -include (UnitTest) -add_unit_test(sys - SOURCES src/sys_test.cpp - LIBS ganalytics -) +target_link_libraries(ganalytics systeminfo) diff --git a/libraries/ganalytics/include/sys.h b/libraries/ganalytics/include/sys.h deleted file mode 100644 index 36f7d9cd..00000000 --- a/libraries/ganalytics/include/sys.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once -#include - -namespace Sys -{ -struct KernelInfo -{ - QString kernelName; - QString kernelVersion; -}; - -KernelInfo getKernelInfo(); - -uint64_t getSystemRam(); - -bool isSystem64bit(); - -bool isCPU64bit(); -} diff --git a/libraries/ganalytics/src/sys_apple.cpp b/libraries/ganalytics/src/sys_apple.cpp deleted file mode 100644 index 49a61165..00000000 --- a/libraries/ganalytics/src/sys_apple.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "sys.h" - -#include - -Sys::KernelInfo Sys::getKernelInfo() -{ - Sys::KernelInfo out; - struct utsname buf; - uname(&buf); - out.kernelName = buf.sysname; - out.kernelVersion = buf.release; - return out; -} - -#include - -uint64_t Sys::getSystemRam() -{ - uint64_t memsize; - size_t memsizesize = sizeof(memsize); - if(!sysctlbyname("hw.memsize", &memsize, &memsizesize, NULL, 0)) - { - return memsize; - } - else - { - return 0; - } -} - -bool Sys::isCPU64bit() -{ - // not even going to pretend I'm going to support anything else - return true; -} - -bool Sys::isSystem64bit() -{ - // yep. maybe when we have 128bit CPUs on consumer devices. - return true; -} diff --git a/libraries/ganalytics/src/sys_test.cpp b/libraries/ganalytics/src/sys_test.cpp deleted file mode 100644 index 6221da45..00000000 --- a/libraries/ganalytics/src/sys_test.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include "TestUtil.h" - -#include - -class SysTest : public QObject -{ - Q_OBJECT -private -slots: - - void test_kernelNotNull() - { - auto kinfo = Sys::getKernelInfo(); - QVERIFY(!kinfo.kernelName.isEmpty()); - QVERIFY(kinfo.kernelVersion != "0.0"); - } -}; - -QTEST_GUILESS_MAIN(SysTest) - -#include "sys_test.moc" diff --git a/libraries/ganalytics/src/sys_unix.cpp b/libraries/ganalytics/src/sys_unix.cpp deleted file mode 100644 index 866c9fdb..00000000 --- a/libraries/ganalytics/src/sys_unix.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "sys.h" - -#include -#include - -Sys::KernelInfo Sys::getKernelInfo() -{ - Sys::KernelInfo out; - struct utsname buf; - uname(&buf); - out.kernelName = buf.sysname; - out.kernelVersion = buf.release; - return out; -} - -uint64_t Sys::getSystemRam() -{ - std::string token; - std::ifstream file("/proc/meminfo"); - while(file >> token) - { - if(token == "MemTotal:") - { - uint64_t mem; - if(file >> mem) - { - return mem * 1024ull; - } - else - { - return 0; - } - } - // ignore rest of the line - file.ignore(std::numeric_limits::max(), '\n'); - } - return 0; // nothing found -} - -bool Sys::isCPU64bit() -{ - return isSystem64bit(); -} - -bool Sys::isSystem64bit() -{ - // kernel build arch on linux - return QSysInfo::currentCpuArchitecture() == "x86_64"; -} diff --git a/libraries/ganalytics/src/sys_win32.cpp b/libraries/ganalytics/src/sys_win32.cpp deleted file mode 100644 index 502b980d..00000000 --- a/libraries/ganalytics/src/sys_win32.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include "sys.h" - -#include - -Sys::KernelInfo Sys::getKernelInfo() -{ - Sys::KernelInfo out; - out.kernelName = "Windows"; - OSVERSIONINFOW osvi; - ZeroMemory(&osvi, sizeof(OSVERSIONINFOW)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); - GetVersionExW(&osvi); - out.kernelVersion = QString("%1.%2").arg(osvi.dwMajorVersion).arg(osvi.dwMinorVersion); - return out; -} - -uint64_t Sys::getSystemRam() -{ - MEMORYSTATUSEX status; - status.dwLength = sizeof(status); - GlobalMemoryStatusEx( &status ); - // bytes - return (uint64_t)status.ullTotalPhys; -} - -bool Sys::isSystem64bit() -{ -#if defined(_WIN64) - return true; -#elif defined(_WIN32) - BOOL f64 = false; - return IsWow64Process(GetCurrentProcess(), &f64) && f64; -#else - // it's some other kind of system... - return false; -#endif -} - -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; -} diff --git a/libraries/systeminfo/CMakeLists.txt b/libraries/systeminfo/CMakeLists.txt new file mode 100644 index 00000000..77cba173 --- /dev/null +++ b/libraries/systeminfo/CMakeLists.txt @@ -0,0 +1,27 @@ +project(systeminfo) + +find_package(Qt5Core) + +set(systeminfo_SOURCES +include/sys.h +) + +if (WIN32) + list(APPEND systeminfo_SOURCES src/sys_win32.cpp) +elseif (UNIX) + if(APPLE) + list(APPEND systeminfo_SOURCES src/sys_apple.cpp) + else() + list(APPEND systeminfo_SOURCES src/sys_unix.cpp) + endif() +endif() + +add_library(systeminfo STATIC ${systeminfo_SOURCES}) +qt5_use_modules(systeminfo Core Gui Network) +target_include_directories(systeminfo PUBLIC include) + +include (UnitTest) +add_unit_test(sys + SOURCES src/sys_test.cpp + LIBS systeminfo +) diff --git a/libraries/systeminfo/include/sys.h b/libraries/systeminfo/include/sys.h new file mode 100644 index 00000000..36f7d9cd --- /dev/null +++ b/libraries/systeminfo/include/sys.h @@ -0,0 +1,19 @@ +#pragma once +#include + +namespace Sys +{ +struct KernelInfo +{ + QString kernelName; + QString kernelVersion; +}; + +KernelInfo getKernelInfo(); + +uint64_t getSystemRam(); + +bool isSystem64bit(); + +bool isCPU64bit(); +} diff --git a/libraries/systeminfo/src/sys_apple.cpp b/libraries/systeminfo/src/sys_apple.cpp new file mode 100644 index 00000000..49a61165 --- /dev/null +++ b/libraries/systeminfo/src/sys_apple.cpp @@ -0,0 +1,41 @@ +#include "sys.h" + +#include + +Sys::KernelInfo Sys::getKernelInfo() +{ + Sys::KernelInfo out; + struct utsname buf; + uname(&buf); + out.kernelName = buf.sysname; + out.kernelVersion = buf.release; + return out; +} + +#include + +uint64_t Sys::getSystemRam() +{ + uint64_t memsize; + size_t memsizesize = sizeof(memsize); + if(!sysctlbyname("hw.memsize", &memsize, &memsizesize, NULL, 0)) + { + return memsize; + } + else + { + return 0; + } +} + +bool Sys::isCPU64bit() +{ + // not even going to pretend I'm going to support anything else + return true; +} + +bool Sys::isSystem64bit() +{ + // yep. maybe when we have 128bit CPUs on consumer devices. + return true; +} diff --git a/libraries/systeminfo/src/sys_test.cpp b/libraries/systeminfo/src/sys_test.cpp new file mode 100644 index 00000000..6221da45 --- /dev/null +++ b/libraries/systeminfo/src/sys_test.cpp @@ -0,0 +1,22 @@ +#include +#include "TestUtil.h" + +#include + +class SysTest : public QObject +{ + Q_OBJECT +private +slots: + + void test_kernelNotNull() + { + auto kinfo = Sys::getKernelInfo(); + QVERIFY(!kinfo.kernelName.isEmpty()); + QVERIFY(kinfo.kernelVersion != "0.0"); + } +}; + +QTEST_GUILESS_MAIN(SysTest) + +#include "sys_test.moc" diff --git a/libraries/systeminfo/src/sys_unix.cpp b/libraries/systeminfo/src/sys_unix.cpp new file mode 100644 index 00000000..866c9fdb --- /dev/null +++ b/libraries/systeminfo/src/sys_unix.cpp @@ -0,0 +1,49 @@ +#include "sys.h" + +#include +#include + +Sys::KernelInfo Sys::getKernelInfo() +{ + Sys::KernelInfo out; + struct utsname buf; + uname(&buf); + out.kernelName = buf.sysname; + out.kernelVersion = buf.release; + return out; +} + +uint64_t Sys::getSystemRam() +{ + std::string token; + std::ifstream file("/proc/meminfo"); + while(file >> token) + { + if(token == "MemTotal:") + { + uint64_t mem; + if(file >> mem) + { + return mem * 1024ull; + } + else + { + return 0; + } + } + // ignore rest of the line + file.ignore(std::numeric_limits::max(), '\n'); + } + return 0; // nothing found +} + +bool Sys::isCPU64bit() +{ + return isSystem64bit(); +} + +bool Sys::isSystem64bit() +{ + // kernel build arch on linux + return QSysInfo::currentCpuArchitecture() == "x86_64"; +} diff --git a/libraries/systeminfo/src/sys_win32.cpp b/libraries/systeminfo/src/sys_win32.cpp new file mode 100644 index 00000000..502b980d --- /dev/null +++ b/libraries/systeminfo/src/sys_win32.cpp @@ -0,0 +1,46 @@ +#include "sys.h" + +#include + +Sys::KernelInfo Sys::getKernelInfo() +{ + Sys::KernelInfo out; + out.kernelName = "Windows"; + OSVERSIONINFOW osvi; + ZeroMemory(&osvi, sizeof(OSVERSIONINFOW)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); + GetVersionExW(&osvi); + out.kernelVersion = QString("%1.%2").arg(osvi.dwMajorVersion).arg(osvi.dwMinorVersion); + return out; +} + +uint64_t Sys::getSystemRam() +{ + MEMORYSTATUSEX status; + status.dwLength = sizeof(status); + GlobalMemoryStatusEx( &status ); + // bytes + return (uint64_t)status.ullTotalPhys; +} + +bool Sys::isSystem64bit() +{ +#if defined(_WIN64) + return true; +#elif defined(_WIN32) + BOOL f64 = false; + return IsWow64Process(GetCurrentProcess(), &f64) && f64; +#else + // it's some other kind of system... + return false; +#endif +} + +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; +} -- cgit v1.2.3