1
0
mirror of https://invent.kde.org/network/krfb synced 2024-07-01 07:24:29 +00:00

Clean up plugin loading code

- We do not need to manually check for duplicates
- Improve the error message while at it
- Remove the internal utility-method since the code is super small now
This commit is contained in:
Alexander Lohnau 2022-04-18 16:51:53 +02:00
parent fcebbfb2d4
commit d7c559b017
5 changed files with 21 additions and 78 deletions

View File

@ -42,50 +42,25 @@ Q_GLOBAL_STATIC(EventsManagerStatic, eventsManagerStatic)
EventsManager::EventsManager() EventsManager::EventsManager()
{ {
//qDebug();
loadPlugins();
}
EventsManager::~EventsManager()
{
//qDebug();
}
EventsManager *EventsManager::instance()
{
//qDebug();
return &eventsManagerStatic->instance;
}
void EventsManager::loadPlugins()
{
//qDebug();
const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/events")); const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/events"));
for (const KPluginMetaData &data : plugins) {
QVectorIterator<KPluginMetaData> i(plugins);
i.toBack();
QSet<QString> unique;
while (i.hasPrevious()) {
KPluginMetaData data = i.previous();
// only load plugins once, even if found multiple times!
if (unique.contains(data.name())) {
continue;
}
const KPluginFactory::Result<EventsPlugin> result = KPluginFactory::instantiatePlugin<EventsPlugin>(data); const KPluginFactory::Result<EventsPlugin> result = KPluginFactory::instantiatePlugin<EventsPlugin>(data);
if (result.plugin) { if (result.plugin) {
m_plugins.insert(data.pluginId(), result.plugin); m_plugins.insert(data.pluginId(), result.plugin);
qCDebug(KRFB) << "Loaded plugin with name " << data.pluginId(); qCDebug(KRFB) << "Loaded plugin with name " << data.pluginId();
} else { } else {
qCDebug(KRFB) << "unable to load plugin for " << data.fileName(); qCDebug(KRFB) << "unable to load plugin for " << data.fileName() << result.errorString;
} }
unique.insert (data.name());
} }
} }
EventsManager::~EventsManager() = default;
EventsManager *EventsManager::instance()
{
return &eventsManagerStatic->instance;
}
QSharedPointer<EventHandler> EventsManager::eventHandler() QSharedPointer<EventHandler> EventsManager::eventHandler()
{ {
QMap<QString, EventsPlugin *>::const_iterator iter = m_plugins.constBegin(); QMap<QString, EventsPlugin *>::const_iterator iter = m_plugins.constBegin();

View File

@ -52,8 +52,6 @@ private:
EventsManager(); EventsManager();
void loadPlugins();
QMap<QString, EventsPlugin *> m_plugins; QMap<QString, EventsPlugin *> m_plugins;
QList<QWeakPointer<EventHandler> > m_eventHandlers; QList<QWeakPointer<EventHandler> > m_eventHandlers;
}; };

View File

@ -40,52 +40,30 @@ public:
Q_GLOBAL_STATIC(FrameBufferManagerStatic, frameBufferManagerStatic) Q_GLOBAL_STATIC(FrameBufferManagerStatic, frameBufferManagerStatic)
FrameBufferManager::FrameBufferManager() FrameBufferManager::FrameBufferManager()
{
//qDebug();
loadPlugins();
}
FrameBufferManager::~FrameBufferManager()
{
//qDebug();
}
FrameBufferManager *FrameBufferManager::instance()
{
//qDebug();
return &frameBufferManagerStatic->instance;
}
void FrameBufferManager::loadPlugins()
{ {
const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/framebuffer")); const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/framebuffer"));
for (const KPluginMetaData &data : plugins) {
QVectorIterator<KPluginMetaData> i(plugins);
i.toBack();
QSet<QString> unique;
while (i.hasPrevious()) {
const KPluginMetaData &data = i.previous();
// only load plugins once, even if found multiple times!
if (unique.contains(data.name()))
continue;
const KPluginFactory::Result<FrameBufferPlugin> result = KPluginFactory::instantiatePlugin<FrameBufferPlugin>(data); const KPluginFactory::Result<FrameBufferPlugin> result = KPluginFactory::instantiatePlugin<FrameBufferPlugin>(data);
if (result.plugin) { if (result.plugin) {
m_plugins.insert(data.pluginId(), result.plugin); m_plugins.insert(data.pluginId(), result.plugin);
qCDebug(KRFB) << "Loaded plugin with name " << data.pluginId(); qCDebug(KRFB) << "Loaded plugin with name " << data.pluginId();
} else { } else {
qCDebug(KRFB) << "unable to load plugin for " << data.fileName(); qCDebug(KRFB) << "unable to load plugin for " << data.fileName() << result.errorString;
} }
unique.insert (data.name());
} }
} }
FrameBufferManager::~FrameBufferManager()
{
}
FrameBufferManager *FrameBufferManager::instance()
{
return &frameBufferManagerStatic->instance;
}
QSharedPointer<FrameBuffer> FrameBufferManager::frameBuffer(WId id, const QVariantMap &args) QSharedPointer<FrameBuffer> FrameBufferManager::frameBuffer(WId id, const QVariantMap &args)
{ {
//qDebug();
// See if there is still an existing framebuffer to this WId. // See if there is still an existing framebuffer to this WId.
if (m_frameBuffers.contains(id)) { if (m_frameBuffers.contains(id)) {
QWeakPointer<FrameBuffer> weakFrameBuffer = m_frameBuffers.value(id); QWeakPointer<FrameBuffer> weakFrameBuffer = m_frameBuffers.value(id);

View File

@ -52,8 +52,6 @@ private:
FrameBufferManager(); FrameBufferManager();
void loadPlugins();
QMap<QString, FrameBufferPlugin *> m_plugins; QMap<QString, FrameBufferPlugin *> m_plugins;
QMap<WId, QWeakPointer<FrameBuffer> > m_frameBuffers; QMap<WId, QWeakPointer<FrameBuffer> > m_frameBuffers;
}; };

View File

@ -83,14 +83,8 @@ public:
void fillFrameBuffersCombo() { void fillFrameBuffersCombo() {
const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/framebuffer")); const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/framebuffer"));
QSet<QString> unique; for (const KPluginMetaData &metadata : plugins) {
QVectorIterator<KPluginMetaData> i(plugins);
i.toBack();
while (i.hasPrevious()) {
const KPluginMetaData &metadata = i.previous();
if (unique.contains(metadata.pluginId())) continue;
cb_preferredFrameBufferPlugin->addItem(metadata.pluginId()); cb_preferredFrameBufferPlugin->addItem(metadata.pluginId());
unique.insert(metadata.pluginId());
} }
} }
}; };