void Ztamp::LoadConfig() { QFile file(configFileName); if (!file.open(QIODevice::ReadOnly)) { LogError(QString("Cannot open config file for reading : %1").arg(configFileName)); return; } QDataStream in(&file); in.setVersion(QDataStream::Qt_4_3); in >> GlobalSettings >> PluginsSettings >> listOfPlugins; if (in.status() != QDataStream::Ok) { LogWarning(QString("Problem when loading config file for ztamp : %1").arg(QString(id.toHex()))); } // "Load" associated ztamp plugins foreach(QString s, listOfPlugins) { PluginInterface * p = PluginManager::Instance().GetPluginByName(s); if(p) { listOfPluginsPtr.append(p); if(!p->GetEnable()) LogWarning(QString("Ztamp %1 : '%2' is globally disabled !").arg(QString(GetID()), s)); } else LogError(QString("Ztamp %1 has invalid plugin !").arg(QString(GetID()))); }
virtual PluginInterface* LoadPlugin(ImageObserverInterface* imageObserver = 0) { PluginInterface* plugin = 0; if ((plugin = PluginInterface::AcquireInstance())) { if ((imageObserver)) plugin->RegisterImageObserver(imageObserver); } return plugin; }
/** *Returns the javascript's last error for the given plugin if found, an empty QString else. */ QString Filter::getScriptLastError(QString plugin) { for (QVector<PluginInterface *>::iterator i = m_plugins.begin(); i != m_plugins.end(); i++) { PluginInterface *fiP = *i; if (fiP->getName() == plugin) return fiP->getScriptLastError(); } return ""; }
/** * Returns the attribute list for the given plugin if found, an empty list else. */ const QList<QString> Filter::getAttributes(QString plugin) { for (QVector<PluginInterface *>::iterator i = m_plugins.begin(); i != m_plugins.end(); i++) { PluginInterface *fiP = *i; if (fiP->getName() == plugin) return fiP->getAttributeNames(); } return QList<QString>(); }
/** * Return the attribute's tip for the given plugin if found, an empty QString else. */ QString Filter::getAttributeTip(QString plugin, QString name) { for (QVector<PluginInterface *>::iterator i = m_plugins.begin(); i != m_plugins.end(); i++) { PluginInterface *fiP = *i; if (fiP->getName() == plugin) return fiP->getAttributeTip(name); } return ""; }
/** * Sets the javascript for the given plugin if found, an empty QString else. */ void Filter::setScript(QString plugin, QString script) { for (QVector<PluginInterface *>::iterator i = m_plugins.begin(); i != m_plugins.end(); i++) { PluginInterface *fiP = *i; if (fiP->getName() == plugin) { #ifdef _VERBOSE_FILTER qDebug() << "Filter::setScript(" << m_virtualDirectoryPath << ", " << plugin << ", " << script << ")"; #endif fiP->setScript(script); return; } } }
/** * Returns the javascript for the given plugin if found, an empty QString else. */ QString Filter::getScript(QString plugin) { for (QVector<PluginInterface *>::iterator i = m_plugins.begin(); i != m_plugins.end(); i++) { PluginInterface *fiP = *i; if (fiP->getName() == plugin) { #ifdef _VERBOSE_FILTER qDebug() << "Filter::getScript(" << m_virtualDirectoryPath << ", " << plugin << ") -> " << fiP->getScript(); #endif return fiP->getScript(); } } return ""; }
void tst_QPluginLoader::relativePath() { // Windows binaries run from release and debug subdirs, so we can't rely on the current dir. const QString binDir = QFINDTESTDATA("bin"); QVERIFY(!binDir.isEmpty()); QCoreApplication::addLibraryPath(binDir); QPluginLoader loader("theplugin"); loader.load(); // not recommended, instance() should do the job. PluginInterface *instance = qobject_cast<PluginInterface*>(loader.instance()); QVERIFY(instance); QCOMPARE(instance->pluginName(), QLatin1String("Plugin ok")); QVERIFY(loader.unload()); }
void g19daemon::loadPlugins() { PluginInterface *pluginint; QDir pluginsDir(qApp->applicationDirPath()); QString name; name = settings->value("ActivePlugin").toString(); pluginsDir.cd(PLUGINS_DIR); QDirIterator iterator(pluginsDir.absolutePath(), QStringList() << "*.so", QDir::Files, QDirIterator::NoIteratorFlags); while (iterator.hasNext()) { iterator.next(); QString filename = iterator.fileName(); QPluginLoader pluginLoader(iterator.filePath()); pluginLoader.setLoadHints(QLibrary::ResolveAllSymbolsHint); QObject *plugin = pluginLoader.instance(); if (plugin) { pluginint = qobject_cast<PluginInterface *>(plugin); if (pluginint) { QObject *signalsource = pluginint->getQObject(); connect(signalsource, SIGNAL(doAction(gAction, void *)), this, SLOT(doAction(gAction, void *))); if (pluginint->isPopup()) { PopupPlugins.append(pluginint); } else { plugins.append(pluginint); if (pluginint->getName().compare(name) == 0) { activePlugin = plugins.indexOf(pluginint); } } } } else { QErrorMessage err(this); err.showMessage(pluginLoader.errorString()); qDebug() << "\tError: " << pluginLoader.errorString(); } }
void Filter::loadPlugin(QString pluginFilename) { // load the plugin QPluginLoader loader(pluginFilename); if (loader.load()) { #ifdef _VERBOSE_FILTER qDebug() << "Loaded plugin: " << pluginFilename; #endif PluginInterface *pluginP = qobject_cast<PluginInterface *>(loader.instance()); // this singleton instance will be automatically pluginP = pluginP->newInstance(m_virtualDirectoryPath); // unloaded when the server exits m_plugins.append(pluginP); m_pluginFilenames.append(pluginFilename); } else qDebug() << QObject::tr("Failed to load plugin: ") + pluginFilename + QObject::tr(", error: ") + loader.errorString(); }
void BoxWidget::initPluginWidget() { QStringList title; title << tr(""); pluginModel.setTitle(title); // pluginModel.insertRows(0,1,QModelIndex()); // QModelIndex qindex = pluginModel.index(0,0,QModelIndex()); // pluginModel.setData(qindex,tr(" ")); pluginModel.insertRows(0,1,QModelIndex()); QModelIndex qindex = pluginModel.index(0,0,QModelIndex()); //set text pluginModel.setData(qindex, tr("UbuntuKylin Software Center")); //set icon pluginModel.setData(qindex,QIcon(QPixmap("://res/ubuntukylin-software-center.png")),Qt::DecorationRole); //set tooltip pluginModel.setData(qindex, tr("UbuntuKylin Software Center"),Qt::WhatsThisRole); QStringList icon_list; icon_list<<"://res/boot"<<"://res/camera"; QStringList text_list; text_list << tr("Boot Manager") << tr("Camera"); for (int index = 0;index < 2;++index) { pluginModel.insertRows(index + 1,1,QModelIndex()); qindex = pluginModel.index(index + 1,0,QModelIndex()); pluginModel.setData(qindex, text_list.at(index)); //set icon pluginModel.setData(qindex,QIcon(QPixmap(icon_list.at(index))),Qt::DecorationRole); //set tooltip pluginModel.setData(qindex, text_list.at(index),Qt::WhatsThisRole); } int count = PluginManager::Instance()->count(); for (int i = 0;i < count;++i) { PluginInterface* ICommon = PluginManager::Instance()->getInterfaceByindex<PluginInterface>(i); QString picture = ICommon->getPicture(); QString pacture_path = QString(":/model/res/plugin/%1").arg(picture); pluginModel.setGuid(ICommon->getGuid()); // pluginModel.insertRows(i + 1,1,QModelIndex()); // qindex = pluginModel.index(i + 1,0,QModelIndex()); pluginModel.insertRows(i + 3,1,QModelIndex()); qindex = pluginModel.index(i + 3,0,QModelIndex()); pluginModel.setData(qindex,ICommon->getName()); pluginModel.setData(qindex,QIcon(QPixmap(pacture_path)),Qt::DecorationRole); pluginModel.setData(qindex,ICommon->getName(),Qt::WhatsThisRole); } }
void tst_XQPluginLoader::listThePlugins() { QList<XQPluginInfo> plugins; XQPluginLoader loader; loader.listImplementations( tr( "xtheplugin.dll" ), plugins ); QVERIFY( plugins.count() != 0 ); for( int i( 0 ); i < plugins.count(); ++i ) { loader.setUid( plugins[i ].uid() ); QCOMPARE( loader.load(), true ); PluginInterface *instance = qobject_cast<PluginInterface*>(loader.instance()); QCOMPARE(instance->pluginName(), QLatin1String("Plugin ok")); QCOMPARE(loader.unload(), true); } plugins.clear(); }
void PluginModel::setPluginEnabled(bool enabled, int i) { Q_ASSERT(i >= 0 && i < count()); PluginInterface *plugin = m_plugins.at(i); plugin->setEnabled(enabled); auto *pluginObj = dynamic_cast<QObject*>(plugin); if (!pluginObj) { qWarning() << Q_FUNC_INFO << "pluginObj is null" << enabled << i; return; } const QString pluginName = pluginObj->metaObject()->className(); m_kernel->settings()->beginGroup("plugins"); m_kernel->settings()->setValue(pluginName + ".enabled", enabled); m_kernel->settings()->endGroup(); plugin->setEnabled(enabled); emit dataChanged(index(0, 0), index(rowCount()-1, 0)); }
ApiManager::ApiAnswer * ApiManager::ProcessPluginApiCall(Account const& account, QString const& request, HTTPRequest & hRequest) { QStringList list = QString(request).split('/', QString::SkipEmptyParts); if(list.size() != 2) return new ApiManager::ApiError(QString("Malformed Plugin Api Call : %1").arg(hRequest.toString())); QString const& pluginName = list.at(0); QString const& functionName = list.at(1); PluginInterface * plugin = PluginManager::Instance().GetPluginByName(pluginName); if(!plugin) return new ApiManager::ApiError(QString("Unknown Plugin : %1<br />Request was : %2").arg(pluginName,hRequest.toString())); if(!plugin->GetEnable()) return new ApiManager::ApiError("This plugin is disabled"); return plugin->ProcessApiCall(account, functionName, hRequest); }
void BoxWidget::OnClickListView(const QModelIndex & index) { if(index.row() == 0) { sessionProxy->runApp("ubuntu-kylin-software-center"); } else if(index.row() == 1) { emit this->sendSubIndex(0); } else if(index.row() == 2) { emit this->sendSubIndex(1); } else { // QString guid = pluginModel.getGuid(index.row() - 1); QString guid = pluginModel.getGuid(index.row() - 3); PluginInterface* interface = PluginManager::Instance()->getInterfaceByGuid<PluginInterface>(guid); interface->doAction(); } }
bool Filter::checkAndSaveFile(QString path) { bool saved = false; // does the file rely under the watched directory? if (!path.startsWith(m_dir)) return saved; // if any plugin accepts the file, then save its ref // in the db for (int i = 0; !saved && i < m_plugins.count(); i++) { m_plugins[i]->loadAttributes(path); saved |= m_plugins[i]->checkFile(path); } // save file if retained if (saved) { QString fileId = m_db.addFile(m_filterId, path); // add file to db // signal newFile(m_virtualDirectoryPath, path); // save file attributes for (int i = 0; i < m_plugins.count(); i++) { PluginInterface *fP = m_plugins[i]; fP->loadAttributes(path); // attributes are loaded only if not done in the above checkFile iteration, we don't reload attrs if same file... QList<QString>attributes = fP->getAttributeNames(); for (QList<QString>::iterator j = attributes.begin(); j != attributes.end(); j++) { QString attrName = (*j); QVariant attrObjValue = fP->getAttributeValue(attrName); QString attrValue = attrObjValue.isValid() ? attrObjValue.toString() : "<null>"; m_db.addFileAttribute(fileId, attrName, attrValue); } } } return saved; }
void tst_QPluginLoader::reloadPlugin() { QPluginLoader loader; loader.setFileName( sys_qualifiedLibraryName("theplugin")); //a plugin loader.load(); // not recommended, instance() should do the job. PluginInterface *instance = qobject_cast<PluginInterface*>(loader.instance()); QVERIFY(instance); QCOMPARE(instance->pluginName(), QLatin1String("Plugin ok")); QSignalSpy spy(loader.instance(), SIGNAL(destroyed())); QVERIFY(spy.isValid()); QVERIFY(loader.unload()); // refcount reached 0, did really unload QCOMPARE(spy.count(), 1); // reload plugin QVERIFY(loader.load()); QVERIFY(loader.isLoaded()); PluginInterface *instance2 = qobject_cast<PluginInterface*>(loader.instance()); QVERIFY(instance2); QCOMPARE(instance2->pluginName(), QLatin1String("Plugin ok")); QVERIFY(loader.unload()); }
ApiManager::ApiAnswer * ApiManager::ProcessBunnyApiCall(Account const& account, QString const& request, HTTPRequest const& hRequest) { QStringList list = QString(request).split('/', QString::SkipEmptyParts); if(list.size() < 2) return new ApiManager::ApiError(QString("Malformed Bunny Api Call : %1").arg(hRequest.toString())); QByteArray const& bunnyID = list.at(0).toAscii(); if(!account.HasBunnyAccess(bunnyID)) return new ApiManager::ApiError("Access denied to this bunny"); Bunny * b = BunnyManager::GetBunny(bunnyID); if(list.size() == 2) { QByteArray const& functionName = list.at(1).toAscii(); return b->ProcessApiCall(account, functionName, hRequest); } else if(list.size() == 3) { PluginInterface * plugin = PluginManager::Instance().GetPluginByName(list.at(1).toAscii()); if(!plugin) return new ApiManager::ApiError(QString("Unknown Plugin : '%1'").arg(list.at(1))); if(b->HasPlugin(plugin) || ( (plugin->GetType() == PluginInterface::SystemPlugin || plugin->GetType() == PluginInterface::RequiredPlugin ) && plugin->GetEnable())) { QByteArray const& functionName = list.at(2).toAscii(); return plugin->ProcessBunnyApiCall(b, account, functionName, hRequest); } else return new ApiManager::ApiError("This plugin is not enabled for this bunny"); } else return new ApiManager::ApiError(QString("Malformed Plugin Api Call : %1").arg(hRequest.toString())); }
ApiManager::ApiAnswer * ApiManager::ProcessZtampApiCall(Account const& account, QString const& request, HTTPRequest const& hRequest) { QStringList list = QString(request).split('/', QString::SkipEmptyParts); if(list.size() < 2) return new ApiManager::ApiError(QString("Malformed Ztamp Api Call : %1").arg(hRequest.toString())); QByteArray const& ztampID = list.at(0).toAscii(); if(!account.HasZtampAccess(ztampID)) return new ApiManager::ApiError("Access denied to this ztamp"); Ztamp * z = ZtampManager::GetZtamp(ztampID); if(list.size() == 2) { QByteArray const& functionName = list.at(1).toAscii(); return z->ProcessApiCall(account, functionName, hRequest); } else if(list.size() == 3) { PluginInterface * plugin = PluginManager::Instance().GetPluginByName(list.at(1).toAscii()); if(!plugin) return new ApiManager::ApiError(QString("Unknown Plugin : '%1'").arg(list.at(1))); if(z->HasPlugin(plugin)) { QByteArray const& functionName = list.at(2).toAscii(); return plugin->ProcessZtampApiCall(z, account, functionName, hRequest); } else return new ApiManager::ApiError("This plugin is not enabled for this ztamp"); } else return new ApiManager::ApiError(QString("Malformed Plugin Api Call : %1").arg(hRequest.toString())); }
QVariant PluginModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_plugins.count()) { return QVariant(); } PluginInterface *plugin = m_plugins[index.row()]; switch (role) { case TextRole: return plugin->text(); case EnabledRole: return plugin->enabled(); case HelpTextRole: return plugin->helpText(); case ObjectRole: return QVariant::fromValue<QObject*>(plugin->controller()); case ConfigItemRole: return QVariant::fromValue<QObject*>(plugin->configureItem()); } return QVariant(); }
void tst_QPluginLoader::errorString() { #if defined(Q_OS_WINCE) // On WinCE we need an QCoreApplication object for current dir int argc = 0; QCoreApplication app(argc,0); #endif const QString unknown(QLatin1String("Unknown error")); { QPluginLoader loader; // default constructed bool loaded = loader.load(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(loaded, false); QCOMPARE(loader.errorString(), unknown); QObject *obj = loader.instance(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(obj, static_cast<QObject*>(0)); QCOMPARE(loader.errorString(), unknown); bool unloaded = loader.unload(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(unloaded, false); QCOMPARE(loader.errorString(), unknown); } { QPluginLoader loader( sys_qualifiedLibraryName("tst_qpluginloaderlib")); //not a plugin bool loaded = loader.load(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(loaded, false); QVERIFY(loader.errorString() != unknown); QObject *obj = loader.instance(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(obj, static_cast<QObject*>(0)); QVERIFY(loader.errorString() != unknown); bool unloaded = loader.unload(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(unloaded, false); QVERIFY(loader.errorString() != unknown); } { QPluginLoader loader( sys_qualifiedLibraryName("nosuchfile")); //not a file bool loaded = loader.load(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(loaded, false); QVERIFY(loader.errorString() != unknown); QObject *obj = loader.instance(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(obj, static_cast<QObject*>(0)); QVERIFY(loader.errorString() != unknown); bool unloaded = loader.unload(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QCOMPARE(unloaded, false); QVERIFY(loader.errorString() != unknown); } #if !defined Q_OS_WIN && !defined Q_OS_MAC && !defined Q_OS_HPUX && !defined Q_OS_SYMBIAN && !defined Q_OS_QNX { QPluginLoader loader( sys_qualifiedLibraryName("almostplugin")); //a plugin with unresolved symbols loader.setLoadHints(QLibrary::ResolveAllSymbolsHint); QCOMPARE(loader.load(), false); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QVERIFY(loader.errorString() != unknown); QCOMPARE(loader.instance(), static_cast<QObject*>(0)); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QVERIFY(loader.errorString() != unknown); QCOMPARE(loader.unload(), false); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); #endif QVERIFY(loader.errorString() != unknown); } #endif { QPluginLoader loader( sys_qualifiedLibraryName("theplugin")); //a plugin QCOMPARE(loader.load(), true); QCOMPARE(loader.errorString(), unknown); QVERIFY(loader.instance() != static_cast<QObject*>(0)); QCOMPARE(loader.errorString(), unknown); // Make sure that plugin really works PluginInterface* theplugin = qobject_cast<PluginInterface*>(loader.instance()); QString pluginName = theplugin->pluginName(); QCOMPARE(pluginName, QLatin1String("Plugin ok")); QCOMPARE(loader.unload(), true); QCOMPARE(loader.errorString(), unknown); } }