Changeset View
Changeset View
Standalone View
Standalone View
src/kexiutils/KexiJsonTrader.cpp
Show First 20 Lines • Show All 78 Lines • ▼ Show 20 Line(s) | |||||
79 | { | 79 | { | ||
80 | QJsonObject json = metaDataObjectForPluginLoader(pluginLoader); | 80 | QJsonObject json = metaDataObjectForPluginLoader(pluginLoader); | ||
81 | if (json.isEmpty()) { | 81 | if (json.isEmpty()) { | ||
82 | return QJsonObject(); | 82 | return QJsonObject(); | ||
83 | } | 83 | } | ||
84 | return json.value(QLatin1String("KPlugin")).toObject(); | 84 | return json.value(QLatin1String("KPlugin")).toObject(); | ||
85 | } | 85 | } | ||
86 | 86 | | |||
87 | static QList<QPluginLoader *> findPlugins(const QString &path, const QStringList &servicetypes, | 87 | //! Checks loader @a loader | ||
88 | static bool checkLoader(QPluginLoader *loader, const QStringList &servicetypes, | ||||
88 | const QString &mimetype) | 89 | const QString &mimetype) | ||
89 | { | 90 | { | ||
90 | QList<QPluginLoader*> list; | | |||
91 | QDirIterator dirIter(path, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); | | |||
92 | while (dirIter.hasNext()) { | | |||
93 | dirIter.next(); | | |||
94 | if (dirIter.fileInfo().isFile()) { | | |||
95 | QPluginLoader *loader = new QPluginLoader(dirIter.filePath()); | | |||
96 | const QJsonObject pluginData = KexiJsonTrader::rootObjectForPluginLoader(*loader); | 91 | const QJsonObject pluginData = KexiJsonTrader::rootObjectForPluginLoader(*loader); | ||
97 | if (pluginData.isEmpty()) { | 92 | if (pluginData.isEmpty()) { | ||
98 | //qDebug() << dirIter.filePath() << "has no json!"; | 93 | //qDebug() << dirIter.filePath() << "has no json!"; | ||
99 | continue; | 94 | return false; | ||
100 | } | 95 | } | ||
101 | const QJsonArray foundServiceTypesAray = pluginData.value(QLatin1String("ServiceTypes")).toArray(); | 96 | const QJsonArray foundServiceTypesAray = pluginData.value(QLatin1String("ServiceTypes")).toArray(); | ||
102 | if (foundServiceTypesAray.isEmpty()) { | 97 | if (foundServiceTypesAray.isEmpty()) { | ||
103 | qWarning() << "No ServiceTypes defined for plugin" << loader->fileName() << "-- skipping!"; | 98 | qWarning() << "No ServiceTypes defined for plugin" << loader->fileName() << "-- skipping!"; | ||
104 | continue; | 99 | return false; | ||
105 | } | 100 | } | ||
106 | QStringList foundServiceTypes = KexiUtils::convertTypesUsingMethod<QVariant, QString, &QVariant::toString>(foundServiceTypesAray.toVariantList()); | 101 | QStringList foundServiceTypes = KexiUtils::convertTypesUsingMethod<QVariant, QString, &QVariant::toString>(foundServiceTypesAray.toVariantList()); | ||
107 | if (!supportsAtLeastServiceType(foundServiceTypes, servicetypes)) { | 102 | if (!supportsAtLeastServiceType(foundServiceTypes, servicetypes)) { | ||
108 | continue; | 103 | return false; | ||
109 | } | 104 | } | ||
110 | 105 | | |||
111 | if (!mimetype.isEmpty()) { | 106 | if (!mimetype.isEmpty()) { | ||
112 | QJsonObject json = metaDataObjectForPluginLoader(*loader); | 107 | QJsonObject json = metaDataObjectForPluginLoader(*loader); | ||
113 | QStringList mimeTypes = json.value(QLatin1String("X-KDE-ExtraNativeMimeTypes")) | 108 | QStringList mimeTypes = json.value(QLatin1String("X-KDE-ExtraNativeMimeTypes")) | ||
114 | .toString().split(QLatin1Char(',')); | 109 | .toString().split(QLatin1Char(',')); | ||
115 | mimeTypes += json.value(QLatin1String("MimeType")).toString().split(QLatin1Char(';')); | 110 | mimeTypes += json.value(QLatin1String("MimeType")).toString().split(QLatin1Char(';')); | ||
116 | mimeTypes += json.value(QLatin1String("X-KDE-NativeMimeType")).toString(); | 111 | mimeTypes += json.value(QLatin1String("X-KDE-NativeMimeType")).toString(); | ||
117 | if (! mimeTypes.contains(mimetype)) { | 112 | if (! mimeTypes.contains(mimetype)) { | ||
118 | continue; | 113 | return false; | ||
114 | } | ||||
119 | } | 115 | } | ||
116 | return true; | ||||
120 | } | 117 | } | ||
118 | | ||||
119 | static QList<QPluginLoader *> findPlugins(const QString &path, const QStringList &servicetypes, | ||||
120 | const QString &mimetype) | ||||
121 | { | ||||
122 | QList<QPluginLoader*> list; | ||||
123 | QDirIterator dirIter(path, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); | ||||
124 | while (dirIter.hasNext()) { | ||||
125 | dirIter.next(); | ||||
126 | if (dirIter.fileInfo().isFile()) { | ||||
127 | QPluginLoader *loader = new QPluginLoader(dirIter.filePath()); | ||||
128 | if (checkLoader(loader, servicetypes, mimetype)) { | ||||
121 | list.append(loader); | 129 | list.append(loader); | ||
130 | } else { | ||||
131 | delete loader; | ||||
132 | } | ||||
122 | } | 133 | } | ||
123 | } | 134 | } | ||
124 | return list; | 135 | return list; | ||
125 | } | 136 | } | ||
126 | 137 | | |||
127 | QList<QPluginLoader *> KexiJsonTrader::query(const QStringList &servicetypes, | 138 | QList<QPluginLoader *> KexiJsonTrader::query(const QStringList &servicetypes, | ||
128 | const QString &mimetype) | 139 | const QString &mimetype) | ||
129 | { | 140 | { | ||
Show All 26 Lines |