int PluginCollection::loadPlugin(const QString& xmlfile) { if (!_installedPlugins.contains(xmlfile)) { // Try to find it if (_parser->parseFile(xmlfile) != 0) { return -1; // can't parse } _installedPlugins[xmlfile] = _parser->data(); _installedPluginNames[_parser->data()._name] = xmlfile; } QString name = _installedPlugins[xmlfile]._name; if (_plugins.contains(name)) { return 0; // already loaded } QString sofile = xmlfile; Plugin *p = PluginLoader::self()->loadPlugin(xmlfile, sofile.replace(QRegExp(".xml$"), ".so")); if (p) { _plugins[name] = KstSharedPtr<Plugin>(p); emit pluginLoaded(name); return 0; } return -2; }
void SchedulerPluginLoader::loadAllPlugins() { debugPlan << "Load all plugins"; const QList<QPluginLoader *> offers = KoPluginLoader::pluginLoaders(QStringLiteral("calligraplan/schedulers")); foreach(QPluginLoader *pluginLoader, offers) { KPluginFactory *factory = qobject_cast<KPluginFactory*>(pluginLoader->instance()); if (!factory) { errorPlan << "KPluginFactory could not load the plugin:" << pluginLoader->fileName(); continue; } SchedulerPlugin *plugin = factory->create<SchedulerPlugin>(this); if (plugin) { QJsonObject json = pluginLoader->metaData().value("MetaData").toObject(); json = json.value("KPlugin").toObject(); const QString name = readLocalValue(json, QLatin1String("Name")).toString(); const QString comment = readLocalValue(json, QLatin1String("Description")).toString(); debugPlan << "Load plugin:" << name << ", " << comment; plugin->setName( name ); plugin->setComment( comment ); emit pluginLoaded( pluginLoader->fileName(), plugin); } else { debugPlan << "KPluginFactory could not create SchedulerPlugin:" << pluginLoader->fileName(); } }
Plugin *PluginManager::loadPluginInternal( const QString &pluginId ) { //kDebug( 14010 ) << pluginId; KPluginInfo info = infoForPluginId( pluginId ); if ( !info.isValid() ) { kWarning( 14010 ) << "Unable to find a plugin named '" << pluginId << "'!"; return 0L; } if ( _kpmp->loadedPlugins.contains( info ) ) return _kpmp->loadedPlugins[ info ]; QString error; Plugin *plugin = KServiceTypeTrader::createInstanceFromQuery<Plugin>( QString::fromLatin1( "Kopete/Plugin" ), QString::fromLatin1( "[X-KDE-PluginInfo-Name]=='%1'" ).arg( pluginId ), this, QVariantList(), &error ); if ( plugin ) { _kpmp->loadedPlugins.insert( info, plugin ); info.setPluginEnabled( true ); connect( plugin, SIGNAL(destroyed(QObject*)), this, SLOT(slotPluginDestroyed(QObject*)) ); connect( plugin, SIGNAL(readyForUnload()), this, SLOT(slotPluginReadyForUnload()) ); kDebug( 14010 ) << "Successfully loaded plugin '" << pluginId << "'"; emit pluginLoaded( plugin ); Protocol* protocol = dynamic_cast<Protocol*>( plugin ); if ( protocol ) emit protocolLoaded( protocol ); } else {
// }}} // {{{ Flow helper bool XzeroDaemon::import(const std::string& name, const std::string& path, std::vector<FlowVM::NativeCallback*>* builtins) { if (pluginLoaded(name)) return true; std::string filename = path; if (!filename.empty() && filename[filename.size() - 1] != '/') filename += "/"; filename += name; std::error_code ec; XzeroPlugin* plugin = loadPlugin(filename, ec); if (ec) { log(Severity::error, "Error loading plugin: %s: %s", filename.c_str(), ec.message().c_str()); return false; } TRACE(1, "import(\"%s\", \"%s\", @%p)", name.c_str(), path.c_str(), builtins); if (builtins) { for (x0::FlowVM::NativeCallback* native: plugin->natives_) { TRACE(2, " native name: %s", native->signature().to_s().c_str()); builtins->push_back(native); } } return true; }
void FakePluginWidget::load (bool loadAll) { QWebView *view = webViewFrom(parentWidget()); if (!view) return; // WORKAROUND: For some reason, when we load on demand plugins the scroll // position gets utterly screwed up and reset to the beginning of the // document. This is an effort to workaround that issue. connect(view->page(), SIGNAL(scrollRequested(int,int,QRect)), this, SLOT(updateScrollPoisition(int,int,QRect)), Qt::QueuedConnection); hide(); m_swapping = true; QList<QWebFrame*> frames; frames.append(view->page()->mainFrame()); QString selector (QLatin1String("applet:not([type]),embed:not([type]),object:not([type]),applet[type=\"")); selector += m_mimeType; selector += QLatin1String("\"],embed[type=\""); selector += m_mimeType; selector += QLatin1String("\"],object[type=\""); selector += m_mimeType; selector += QLatin1String("\"]"); while (!frames.isEmpty()) { bool loaded = false; QWebFrame *frame = frames.takeFirst(); QWebElement docElement = frame->documentElement(); QWebElementCollection elements = docElement.findAll(selector); Q_FOREACH (QWebElement element, elements) { if (loadAll || element.evaluateJavaScript(QLatin1String("this.swapping")).toBool()) { QWebElement substitute = element.clone(); emit pluginLoaded(m_id); m_updateScrollPosition = true; element.replace(substitute); deleteLater(); if (!loadAll) { loaded = true; break; // Found the one plugin we wanted to start so exit loop. } } } if (loaded && !loadAll) { break; // Loading only one item, exit the outer loop as well... } frames += frame->childFrames(); } m_swapping = false; }
void IOPluginCache::load(const QDir& dir) { qDebug() << Q_FUNC_INFO << dir.path(); /* Check that we can access the directory */ if (dir.exists() == false || dir.isReadable() == false) return; /* Loop thru all files in the directory */ QStringListIterator it(dir.entryList()); while (it.hasNext() == true) { /* Attempt to load a plugin from the path */ QString fileName(it.next()); QString path = dir.absoluteFilePath(fileName); QPluginLoader loader(path, this); QLCIOPlugin* ptr = qobject_cast<QLCIOPlugin*> (loader.instance()); if (ptr != NULL) { /* Check for duplicates */ if (plugin(ptr->name()) == NULL) { /* New plugin. Append and init. */ qDebug() << "Loaded I/O plugin" << ptr->name() << "from" << fileName; emit pluginLoaded(ptr->name()); ptr->init(); m_plugins << ptr; connect(ptr, SIGNAL(configurationChanged()), this, SLOT(slotConfigurationChanged())); #if !defined(Q_OS_ANDROID) HotPlugMonitor::connectListener(ptr); #endif // QLCi18n::loadTranslation(p->name().replace(" ", "_")); } else { /* Duplicate plugin. Unload it. */ qWarning() << Q_FUNC_INFO << "Discarded duplicate I/O plugin" << ptr->name() << "in" << path; loader.unload(); } } else { qWarning() << Q_FUNC_INFO << fileName << "doesn't contain an I/O plugin:" << loader.errorString(); loader.unload(); } } }
InstanceAdaptor::InstanceAdaptor(AbstractPlugin *p_plgn) : Adaptor(Core::instance ()) { if (p_plgn == NULL){ emit pluginCantLoad (Core::arguments ()->value ("plugin").toString ()); QApplication::quit (); } else { connect(QApplication::instance (),SIGNAL(aboutToQuit()),this,SIGNAL(aboutToQuit())); QDBusConnection::sessionBus ().connect ("org.thesii.Wintermute","/Factory", "org.thesii.Wintermute.Factory","pluginCantLoad", this,SIGNAL(pluginCantLoad(QString))); QDBusConnection::sessionBus ().connect ("org.thesii.Wintermute","/Factory", "org.thesii.Wintermute.Factory","pluginLoaded", this,SIGNAL(pluginLoaded(QString))); QDBusConnection::sessionBus ().connect ("org.thesii.Wintermute","/Factory", "org.thesii.Wintermute.Factory","pluginUnloaded", this,SIGNAL(pluginUnloaded(QString))); QDBusConnection::sessionBus ().connect ("org.thesii.Wintermute","/Factory", "org.thesii.Wintermute.Factory","aboutToQuit", this,SLOT(aboutToQuit())); setParent(p_plgn); //setAutoRelaySignals (true); } }
QObject* WebPluginFactory::create (const QString& _mimeType, const QUrl& url, const QStringList& argumentNames, const QStringList& argumentValues) const { //kDebug() << _mimeType << url << argumentNames; QString mimeType (_mimeType.trimmed()); if (mimeType.isEmpty()) { extractGuessedMimeType (url, &mimeType); } const bool noPluginHandling = WebKitSettings::self()->isInternalPluginHandlingDisabled(); if (!noPluginHandling && WebKitSettings::self()->isLoadPluginsOnDemandEnabled()) { const uint id = pluginId(url, argumentNames, argumentValues); if (!mPluginsLoadedOnDemand.contains(id)) { FakePluginWidget* widget = new FakePluginWidget(id, url, mimeType); connect(widget, SIGNAL(pluginLoaded(uint)), this, SLOT(loadedPlugin(uint))); return widget; } } Q_ASSERT(mPart); // should never happen!! KParts::ReadOnlyPart* part = 0; QWebView* view = (mPart ? mPart->view() : 0); if (noPluginHandling || !excludedMimeType(mimeType)) { QWebFrame* frame = (view ? view->page()->currentFrame() : 0); if (frame) { part = createPartInstanceFrom(mimeType, argumentNames, argumentValues, view, frame); } } kDebug() << "Asked for" << mimeType << "plugin, got" << part; if (part) { connect (part->browserExtension(), SIGNAL (openUrlNotify()), mPart->browserExtension(), SIGNAL (openUrlNotify())); connect (part->browserExtension(), SIGNAL (openUrlRequest (KUrl, KParts::OpenUrlArguments, KParts::BrowserArguments)), mPart->browserExtension(), SIGNAL (openUrlRequest (KUrl, KParts::OpenUrlArguments, KParts::BrowserArguments))); // Check if this part is scriptable KParts::ScriptableExtension* scriptExt = KParts::ScriptableExtension::childObject(part); if (!scriptExt) { // Try to fall back to LiveConnectExtension compat KParts::LiveConnectExtension* lc = KParts::LiveConnectExtension::childObject(part); if (lc) { scriptExt = KParts::ScriptableExtension::adapterFromLiveConnect(part, lc); } } if (scriptExt) { scriptExt->setHost(KParts::ScriptableExtension::childObject(mPart)); } QMap<QString, QString> metaData = part->arguments().metaData(); QString urlStr = url.toString (QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); metaData.insert ("PropagateHttpHeader", "true"); metaData.insert ("referrer", urlStr); metaData.insert ("cross-domain", urlStr); metaData.insert ("main_frame_request", "TRUE"); metaData.insert ("ssl_activate_warnings", "TRUE"); KWebPage *page = (view ? qobject_cast<KWebPage*>(view->page()) : 0); if (page) { const QString scheme = page->currentFrame()->url().scheme(); if (page && (QString::compare (scheme, QL1S ("https"), Qt::CaseInsensitive) == 0 || QString::compare (scheme, QL1S ("webdavs"), Qt::CaseInsensitive) == 0)) metaData.insert ("ssl_was_in_use", "TRUE"); else metaData.insert ("ssl_was_in_use", "FALSE"); } KParts::OpenUrlArguments openUrlArgs = part->arguments(); openUrlArgs.metaData() = metaData; openUrlArgs.setMimeType(mimeType); part->setArguments(openUrlArgs); QMetaObject::invokeMethod(part, "openUrl", Qt::QueuedConnection, Q_ARG(KUrl, KUrl(url))); return part->widget(); } return 0; }