refactoring, add tooltip for HWID checkbox

This commit is contained in:
0-Kutya-0 2025-09-21 18:07:33 +03:00
parent 8111b7fe72
commit 6f8f817a74
5 changed files with 68 additions and 45 deletions

View File

@ -553,6 +553,9 @@
</item> </item>
<item row="5" column="1"> <item row="5" column="1">
<widget class="QCheckBox" name="sub_send_hwid"> <widget class="QCheckBox" name="sub_send_hwid">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;HWID=%1&lt;/p&gt;&lt;p&gt;OS=%2&lt;/p&gt;&lt;p&gt;OS Version=%3&lt;/p&gt;&lt;p&gt;Model=%4&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Enable sending HWID, device model, and OS version when updating subscription</string> <string>Enable sending HWID, device model, and OS version when updating subscription</string>
</property> </property>

View File

@ -94,6 +94,10 @@
<message> <message>
<source>Enable sending HWID, device model, and OS version when updating subscription</source> <source>Enable sending HWID, device model, and OS version when updating subscription</source>
<translation>Включить отправку HWID, модели устройства и версии ОС при обновлении подписки</translation> <translation>Включить отправку HWID, модели устройства и версии ОС при обновлении подписки</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;HWID=%1&lt;/p&gt;&lt;p&gt;OS=%2&lt;/p&gt;&lt;p&gt;OS Version=%3&lt;/p&gt;&lt;p&gt;Model=%4&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;HWID=%1&lt;/p&gt;&lt;p&gt;ОС=%2&lt;/p&gt;&lt;p&gt;Версия ОС=%3&lt;/p&gt;&lt;p&gt;Модель=%4&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<source>Core</source> <source>Core</source>

View File

@ -14,7 +14,6 @@
#pragma comment(lib, "wbemuuid.lib") #pragma comment(lib, "wbemuuid.lib")
#endif #endif
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
static QString queryWmiProperty(const QString& wmiClass, const QString& property) { static QString queryWmiProperty(const QString& wmiClass, const QString& property) {
HRESULT hres; HRESULT hres;
@ -116,7 +115,6 @@ static QString queryWmiProperty(const QString& wmiClass, const QString& property
pSvc->Release(); pSvc->Release();
pLoc->Release(); pLoc->Release();
CoUninitialize(); CoUninitialize();
return result; return result;
} }
@ -130,50 +128,56 @@ static QString winModel() {
#endif #endif
DeviceDetails GetDeviceDetails() { DeviceDetails GetDeviceDetails() {
DeviceDetails details; static const DeviceDetails details = []() {
DeviceDetails d;
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
details.hwid = QSysInfo::machineUniqueId(); d.hwid = QSysInfo::machineUniqueId();
if (details.hwid.isEmpty()) { if (d.hwid.isEmpty()) {
auto productType = QSysInfo::productType().toUtf8(); auto productType = QSysInfo::productType().toUtf8();
details.hwid = QString("%1-%2").arg(QSysInfo::machineHostName(), QString::fromUtf8(productType)); d.hwid = QString("%1-%2").arg(QSysInfo::machineHostName(), QString::fromUtf8(productType));
}
details.os = QStringLiteral("Windows");
VersionInfo info;
WinVersion::GetVersion(info);
details.osVersion = QString("%1.%2.%3").arg(info.Major).arg(info.Minor).arg(info.BuildNum);
auto wm = winModel();
auto wbb = winBaseBoard();
details.model = (wm == wbb) ? wm : wm + "/" + wbb;
#elif defined(Q_OS_LINUX)
QString mid;
QFile f1("/etc/machine-id");
if (f1.exists() && f1.open(QIODevice::ReadOnly | QIODevice::Text)) {
mid = QString::fromUtf8(f1.readAll()).trimmed();
f1.close();
}
else {
QFile f2("/var/lib/dbus/machine-id");
if (f2.exists() && f2.open(QIODevice::ReadOnly | QIODevice::Text)) {
mid = QString::fromUtf8(f2.readAll()).trimmed();
f2.close();
} }
}
details.hwid = mid; d.os = QStringLiteral("Windows ") + QSysInfo::productVersion();
details.os = QStringLiteral("Linux");
details.osVersion = QSysInfo::kernelVersion(); VersionInfo info;
details.model = QSysInfo::prettyProductName(); WinVersion::GetVersion(info);
#elif defined(Q_OS_MACOS) d.osVersion = QString("%1.%2.%3").arg(info.Major).arg(info.Minor).arg(info.BuildNum);
details.hwid = QSysInfo::machineUniqueId();
details.os = QStringLiteral("macOS"); auto wm = winModel();
details.osVersion = QSysInfo::productVersion(); auto wbb = winBaseBoard();
details.model = QSysInfo::prettyProductName(); d.model = (wm == wbb) ? wm : wm + "/" + wbb;
#else if (d.hwid.isEmpty()) d.model = QSysInfo::prettyProductName();
details.hwid = QSysInfo::machineUniqueId(); #elif defined(Q_OS_LINUX)
details.os = QSysInfo::productType(); QString mid;
details.osVersion = QSysInfo::productVersion(); QFile f1("/etc/machine-id");
details.model = QSysInfo::prettyProductName(); if (f1.exists() && f1.open(QIODevice::ReadOnly | QIODevice::Text)) {
#endif mid = QString::fromUtf8(f1.readAll()).trimmed();
f1.close();
}
else {
QFile f2("/var/lib/dbus/machine-id");
if (f2.exists() && f2.open(QIODevice::ReadOnly | QIODevice::Text)) {
mid = QString::fromUtf8(f2.readAll()).trimmed();
f2.close();
}
}
d.hwid = mid;
d.os = QStringLiteral("Linux");
d.osVersion = QSysInfo::kernelVersion();
d.model = QSysInfo::prettyProductName();
#elif defined(Q_OS_MACOS)
d.hwid = QSysInfo::machineUniqueId();
d.os = QStringLiteral("macOS");
d.osVersion = QSysInfo::productVersion();
d.model = QSysInfo::prettyProductName();
#else
d.hwid = QSysInfo::machineUniqueId();
d.os = QSysInfo::productType();
d.osVersion = QSysInfo::productVersion();
d.model = QSysInfo::prettyProductName();
#endif
return d;
}();
return details; return details;
} }

View File

@ -54,6 +54,7 @@
#include <3rdparty/QHotkey/qhotkey.h> #include <3rdparty/QHotkey/qhotkey.h>
#include <3rdparty/qv2ray/v2/proxy/QvProxyConfigurator.hpp> #include <3rdparty/qv2ray/v2/proxy/QvProxyConfigurator.hpp>
#include <include/global/HTTPRequestHelper.hpp> #include <include/global/HTTPRequestHelper.hpp>
#include "include/global/DeviceDetailsHelper.hpp"
#include "include/sys/macos/MacOS.h" #include "include/sys/macos/MacOS.h"
@ -133,6 +134,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
Configs::dataStore->inbound_socks_port = MkPort(); Configs::dataStore->inbound_socks_port = MkPort();
} }
//init HWID data
runOnNewThread([=, this] {GetDeviceDetails(); });
// Prepare core // Prepare core
Configs::dataStore->core_port = MkPort(); Configs::dataStore->core_port = MkPort();
if (Configs::dataStore->core_port <= 0) Configs::dataStore->core_port = 19810; if (Configs::dataStore->core_port <= 0) Configs::dataStore->core_port = 19810;

View File

@ -7,6 +7,7 @@
#include "include/global/GuiUtils.hpp" #include "include/global/GuiUtils.hpp"
#include "include/global/Configs.hpp" #include "include/global/Configs.hpp"
#include "include/global/HTTPRequestHelper.hpp" #include "include/global/HTTPRequestHelper.hpp"
#include "include/global/DeviceDetailsHelper.hpp"
#include <QStyleFactory> #include <QStyleFactory>
#include <QFileDialog> #include <QFileDialog>
@ -118,6 +119,13 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
D_LOAD_BOOL(sub_insecure) D_LOAD_BOOL(sub_insecure)
D_LOAD_BOOL(sub_send_hwid) D_LOAD_BOOL(sub_send_hwid)
D_LOAD_INT_ENABLE(sub_auto_update, sub_auto_update_enable) D_LOAD_INT_ENABLE(sub_auto_update, sub_auto_update_enable)
auto details = GetDeviceDetails();
ui->sub_send_hwid->setToolTip(
ui->sub_send_hwid->toolTip()
.arg(details.hwid.isEmpty() ? "N/A" : details.hwid,
details.os.isEmpty() ? "N/A" : details.os,
details.osVersion.isEmpty() ? "N/A" : details.osVersion,
details.model.isEmpty() ? "N/A" : details.model));
// Core // Core
ui->groupBox_core->setTitle(software_core_name); ui->groupBox_core->setTitle(software_core_name);