FilterPlugin::FilterPlugin(const KPluginInfo &pluginInfo, KTp::AbstractMessageFilter *instance_): name(pluginInfo.pluginName()), instance(instance_) { bool ok; weight = pluginInfo.service()->property(QLatin1String("X-KDE-PluginInfo-Weight"), QVariant::Int).toInt(&ok); if (!ok) { weight = 100; } }
RecordItNowPlugin *RecordItNowPluginManager::loadPlugin(const QString &name) { QHashIterator<KPluginInfo, RecordItNowPlugin*> it(m_plugins); KPluginInfo info; while (it.hasNext()) { it.next(); if (it.key().name().toLower() == name.toLower()) { if (it.value()) { // already loaded? return it.value(); } else { // get info and load info = it.key(); break; } } } if (!info.isValid()) { return 0; } kDebug() << "load plugin:" << name; KService::Ptr service = info.service(); KPluginLoader loader(service->library()); KPluginFactory *factory = loader.factory(); if (!factory) { kWarning() << "KPluginFactory could not load the plugin:" << service->library() << "Reason:" << loader.errorString(); return 0; } RecordItNowPlugin *plugin = factory->create<RecordItNowPlugin>(this); delete factory; if (!plugin) { kWarning() << "factory::create<>() failed " << service->library(); return 0; } return (m_plugins[info] = plugin); }
void MessageProcessor::Private::loadFilter(const KPluginInfo &pluginInfo) { KService::Ptr service = pluginInfo.service(); KPluginFactory *factory = KPluginLoader(service->library()).factory(); if (factory) { qCDebug(KTP_COMMONINTERNALS) << "loaded factory :" << factory; AbstractMessageFilter *filter = factory->create<AbstractMessageFilter>(q); if (filter) { qCDebug(KTP_COMMONINTERNALS) << "loaded message filter : " << filter; filters << FilterPlugin(pluginInfo, filter); } } else { qCWarning(KTP_COMMONINTERNALS) << "error loading plugin :" << service->library(); } // Re-sort filters by weight qSort(filters); }