set device type

This commit is contained in:
2026-05-26 15:38:52 +08:00
parent acade5c35b
commit 6de6664aa0
4 changed files with 87 additions and 2 deletions

View File

@@ -141,6 +141,25 @@ void AppController::setQuickSave(bool enabled)
} }
} }
QString AppController::deviceType() const
{
return LocalSend::deviceTypeToString(m_settings->deviceType());
}
void AppController::setDeviceType(const QString& type)
{
LocalSend::DeviceType newType = LocalSend::deviceTypeFromString(type);
if (m_settings->deviceType() != newType) {
m_settings->setDeviceType(newType);
emit deviceTypeChanged();
LocalSend::InfoDto info = buildInfoDto();
m_server->setLocalInfo(info, m_security->fingerprint());
m_discovery->setLocalInfo(info, m_security->fingerprint(), m_settings->port(),
m_settings->https() ? LocalSend::ProtocolType::Https : LocalSend::ProtocolType::Http);
}
}
QVariantList AppController::devices() const QVariantList AppController::devices() const
{ {
QVariantList result; QVariantList result;

View File

@@ -33,6 +33,7 @@ class AppController : public QObject
Q_PROPERTY(int currentReceiveFileIndex READ currentReceiveFileIndex NOTIFY receiveProgressChanged) Q_PROPERTY(int currentReceiveFileIndex READ currentReceiveFileIndex NOTIFY receiveProgressChanged)
Q_PROPERTY(int totalReceiveFiles READ totalReceiveFiles NOTIFY receivingChanged) Q_PROPERTY(int totalReceiveFiles READ totalReceiveFiles NOTIFY receivingChanged)
Q_PROPERTY(QString currentReceiveSenderAlias READ currentReceiveSenderAlias NOTIFY receivingChanged) Q_PROPERTY(QString currentReceiveSenderAlias READ currentReceiveSenderAlias NOTIFY receivingChanged)
Q_PROPERTY(QString deviceType READ deviceType WRITE setDeviceType NOTIFY deviceTypeChanged)
public: public:
explicit AppController(QObject* parent = nullptr); explicit AppController(QObject* parent = nullptr);
@@ -72,6 +73,9 @@ public:
int totalReceiveFiles() const; int totalReceiveFiles() const;
QString currentReceiveSenderAlias() const; QString currentReceiveSenderAlias() const;
QString deviceType() const;
void setDeviceType(const QString& type);
Q_INVOKABLE void startDiscovery(); Q_INVOKABLE void startDiscovery();
Q_INVOKABLE void stopDiscovery(); Q_INVOKABLE void stopDiscovery();
Q_INVOKABLE void refreshDevices(); Q_INVOKABLE void refreshDevices();
@@ -110,6 +114,7 @@ signals:
void receivePinChanged(); void receivePinChanged();
void receivingChanged(); void receivingChanged();
void receiveProgressChanged(); void receiveProgressChanged();
void deviceTypeChanged();
private slots: private slots:
void onDeviceDiscovered(const LocalSend::Device& device); void onDeviceDiscovered(const LocalSend::Device& device);

View File

@@ -15,6 +15,17 @@ ApplicationWindow {
property string currentSenderAlias: "" property string currentSenderAlias: ""
property string currentSenderIp: "" property string currentSenderIp: ""
function getDeviceTypeIcon(deviceType) {
switch (deviceType) {
case "mobile": return "\u{1F4F1}"
case "desktop": return "\u{1F4BB}"
case "web": return "\u{1F310}"
case "headless": return "\u{1F5A5}"
case "server": return "\u{1F4E1}"
default: return "\u{1F4BB}"
}
}
DropArea { DropArea {
id: dropArea id: dropArea
anchors.fill: parent anchors.fill: parent
@@ -587,6 +598,13 @@ ApplicationWindow {
RowLayout { RowLayout {
anchors.fill: parent anchors.fill: parent
spacing: 12
Label {
text: getDeviceTypeIcon(modelData.deviceType)
font.pixelSize: 32
Layout.alignment: Qt.AlignVCenter
}
Column { Column {
Layout.fillWidth: true Layout.fillWidth: true
@@ -728,6 +746,33 @@ ApplicationWindow {
onClicked: appController.receivePin = "" onClicked: appController.receivePin = ""
} }
} }
Label { text: qsTr("Device Type:") }
ComboBox {
id: deviceTypeCombo
Layout.fillWidth: true
model: [
{ text: qsTr("Mobile"), value: "mobile" },
{ text: qsTr("Desktop"), value: "desktop" },
{ text: qsTr("Web"), value: "web" },
{ text: qsTr("Headless"), value: "headless" },
{ text: qsTr("Server"), value: "server" }
]
textRole: "text"
Component.onCompleted: {
for (var i = 0; i < model.length; i++) {
if (model[i].value === appController.deviceType) {
currentIndex = i
break
}
}
}
onCurrentIndexChanged: {
if (currentIndex >= 0 && currentIndex < model.length) {
appController.deviceType = model[currentIndex].value
}
}
}
} }
FolderDialog { FolderDialog {

View File

@@ -1,6 +1,7 @@
#include "LocalSendCore/Settings.h" #include "LocalSendCore/Settings.h"
#include "LocalSendCore/Constants.h" #include "LocalSendCore/Constants.h"
#include <QStandardPaths> #include <QStandardPaths>
#include <QSysInfo>
namespace LocalSend { namespace LocalSend {
@@ -11,6 +12,18 @@ Settings::Settings(QObject* parent)
{ {
} }
namespace {
DeviceType detectDeviceType() {
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
return DeviceType::Mobile;
#elif defined(Q_OS_LINUX) || defined(Q_OS_MACOS) || defined(Q_OS_WINDOWS)
return DeviceType::Desktop;
#else
return DeviceType::Headless;
#endif
}
}
QString Settings::alias() const QString Settings::alias() const
{ {
return m_settings.value(QStringLiteral("alias"), return m_settings.value(QStringLiteral("alias"),
@@ -108,8 +121,11 @@ void Settings::setDeviceModel(const QString& model)
DeviceType Settings::deviceType() const DeviceType Settings::deviceType() const
{ {
return deviceTypeFromString(m_settings.value(QStringLiteral("deviceType"), QVariant stored = m_settings.value(QStringLiteral("deviceType"));
QStringLiteral("desktop")).toString()); if (stored.isValid()) {
return deviceTypeFromString(stored.toString());
}
return detectDeviceType();
} }
void Settings::setDeviceType(DeviceType type) void Settings::setDeviceType(DeviceType type)