From 4faedb08b8f064ba7f335ea00a6ed2759e20c3ed Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Fri, 30 Dec 2022 16:21:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=8D=8F=E5=90=8C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=B4=A9=E6=BA=83=E5=90=8E=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=B8=8D=E6=B8=85=E7=A9=BA=E5=92=8C=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=8D=E6=94=B9=E5=8F=98=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加dbus服务watcher,当后台服务崩溃后,清空设备列表。 Log: Bug: https://pms.uniontech.com/bug-view-179595.html Influence: 协同服务崩溃后,设备列表显示及设备状态。 Change-Id: I8464aaac631eb2379475fbfb65eaba3ab063448e --- plugins/display/collaborationdevmodel.cpp | 24 ++++++++++++++++++----- plugins/display/collaborationdevmodel.h | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/plugins/display/collaborationdevmodel.cpp b/plugins/display/collaborationdevmodel.cpp index 89cadfe65..26b016c04 100644 --- a/plugins/display/collaborationdevmodel.cpp +++ b/plugins/display/collaborationdevmodel.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -56,16 +57,19 @@ CollaborationDevModel::CollaborationDevModel(QObject *parent) m_colDbusInter->connection().connect(CollaborationService, CollaborationPath, ColPropertiesInterface, "PropertiesChanged", "sa{sv}as", this, SLOT(onPropertyChanged(QDBusMessage))); + + auto *dbusWatcher = new QDBusServiceWatcher(CollaborationService, m_colDbusInter->connection(), + QDBusServiceWatcher::WatchForUnregistration, this); + connect(dbusWatcher, &QDBusServiceWatcher::serviceUnregistered, this, [this](){ + qWarning() << CollaborationService << "unregistered"; + clear(); + }); } void CollaborationDevModel::checkServiceValid() { if (!m_colDbusInter->isValid()) { - for (CollaborationDevice *device : m_devices) { - device->deleteLater(); - } - m_devices.clear(); - Q_EMIT devicesChanged(); + clear(); } } @@ -126,6 +130,16 @@ void CollaborationDevModel::updateDevice(const QStringList &devPaths) emit devicesChanged(); } +void CollaborationDevModel::clear() +{ + for (CollaborationDevice *device : m_devices) { + device->deleteLater(); + } + m_devices.clear(); + + Q_EMIT devicesChanged(); +} + CollaborationDevice *CollaborationDevModel::getDevice(const QString &machinePath) { return m_devices.value(machinePath, nullptr); diff --git a/plugins/display/collaborationdevmodel.h b/plugins/display/collaborationdevmodel.h index 6313d04dc..a48a02732 100644 --- a/plugins/display/collaborationdevmodel.h +++ b/plugins/display/collaborationdevmodel.h @@ -53,6 +53,7 @@ private slots: private: void updateDevice(const QStringList &devPaths); + void clear(); private: QDBusInterface *m_colDbusInter;