[plasma/discover] libdiscover/resources: Ensure that discover stays operational when backends are invalidated after being added
Tobias Fella <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 17cf40e1bf789a61c5c34c3adb3d14d54b7b42ce by Tobias Fella.
Committed on 10/08/2026 at 09:10.
Pushed by tfella into branch 'master'.
Ensure that discover stays operational when backends are invalidated after being added
This happens e.g. with the fwupd backend, which only finished initializing after it has been added to the list of backends.
When initialization fails, it would already get invalidated, but the list of backends in the resourcesmodel did not get updated.
M +9 -17 libdiscover/resources/ResourcesModel.cpp
M +0 -1 libdiscover/resources/ResourcesModel.h
https://invent.kde.org/plasma/discover/-/commit/17cf40e1bf789a61c5c34c3adb3d14d54b7b42ce
diff --git a/libdiscover/resources/ResourcesModel.cpp b/libdiscover/resources/ResourcesModel.cpp
index 543e7e41b..e3c04ccc8 100644
--- a/libdiscover/resources/ResourcesModel.cpp
+++ b/libdiscover/resources/ResourcesModel.cpp
@@ -147,10 +147,18 @@ bool ResourcesModel::addResourcesBackend(AbstractResourcesBackend *backend)
return false;
}
+ connect(backend, &AbstractResourcesBackend::invalidated, this, [backend, this]() {
+ CategoryModel::global()->blacklistPlugin(backend->name());
+ m_backends.removeAll(backend);
+ backend->deleteLater();
+ m_updatesCount.reevaluate();
+ qCWarning(LIBDISCOVER_LOG) << "Discarding invalid backend" << backend->name();
+ Q_EMIT backendsChanged();
+ });
+
m_backends += backend;
m_updatesCount.reevaluate();
- connect(backend, &AbstractResourcesBackend::contentsChanged, this, &ResourcesModel::callerContentsChanged);
connect(backend, &AbstractResourcesBackend::allDataChanged, this, &ResourcesModel::updateCaller);
connect(backend, &AbstractResourcesBackend::resourcesChanged, this, &ResourcesModel::resourceDataChanged);
connect(backend, &AbstractResourcesBackend::updatesCountChanged, &m_updatesCount, &EmitWhenChanged<int>::reevaluate);
@@ -164,22 +172,6 @@ bool ResourcesModel::addResourcesBackend(AbstractResourcesBackend *backend)
return true;
}
-void ResourcesModel::callerContentsChanged()
-{
- AbstractResourcesBackend *backend = qobject_cast<AbstractResourcesBackend *>(sender());
-
- if (!backend->isValid()) {
- qCWarning(LIBDISCOVER_LOG) << "Discarding invalid backend" << backend->name();
- int idx = m_backends.indexOf(backend);
- Q_ASSERT(idx >= 0);
- m_backends.removeAt(idx);
- Q_EMIT backendsChanged();
- CategoryModel::global()->blacklistPlugin(backend->name());
- backend->deleteLater();
- return;
- }
-}
-
void ResourcesModel::updateCaller(const QVector<QByteArray> &properties)
{
AbstractResourcesBackend *backend = qobject_cast<AbstractResourcesBackend *>(sender());
diff --git a/libdiscover/resources/ResourcesModel.h b/libdiscover/resources/ResourcesModel.h
index 0958b6425..28db3bdc4 100644
--- a/libdiscover/resources/ResourcesModel.h
+++ b/libdiscover/resources/ResourcesModel.h
@@ -121,7 +121,6 @@ Q_SIGNALS:
void switchToUpdates();
private Q_SLOTS:
- void callerContentsChanged();
void updateCaller(const QVector<QByteArray> &properties);
void registerAllBackends();