4
0
mirror of https://github.com/QuasarApp/QtDeployer.git synced 2025-04-28 14:34:35 +00:00
QtDeployer/source/CPP/pluginmanager.cpp
2018-08-16 19:20:04 +03:00

105 lines
2.5 KiB
C++
Executable File

#include "pluginmanager.h"
void PluginManager::setNeededPlugins(const QStringList &neededPlugins)
{
if (m_neededPlugins == neededPlugins) return;
m_neededPlugins = neededPlugins;
emit neededPluginsChanged(m_neededPlugins);
}
void PluginManager::start()
{
m_neededPlugins.clear();
m_neededPlugins << "xcbglintegrations"
<< "platforms"
<< "imageformats"
<< "iconengines";
m_neededPlugins << findPluginsFromModules();
emit neededPluginsChanged(m_neededPlugins);
}
QStringList PluginManager::getAllSoFiles()
{
QStringList sofiles;
for (const QString &plugindir : m_neededPlugins)
sofiles << findFilesInsideDir("*.so",
m_qtdir + "/plugins/" + plugindir);
return sofiles;
}
QStringList PluginManager::findPluginsFromModules()
{
QStringList plugins;
QStringList modules = extractModules();
if (modules.contains("sql")) plugins << "sqldrivers";
if (modules.contains("gamepad")) plugins << "gamepads";
if (modules.contains("printsupport")) plugins << "printsupport";
if (modules.contains("sensors"))
plugins << "sensors"
<< "sensorgestures";
if (modules.contains("positioning"))
plugins << "geoservices"
<< "position"
<< "geometryloaders";
if (modules.contains("multimedia"))
plugins << "audio"
<< "mediaservice"
<< "playlistformats";
return plugins;
}
QStringList PluginManager::extractModules()
{
QStringList proandprifiles =
findFilesInsideDir("*.pro", QFileInfo(m_projectfile).absoluteDir().path());
proandprifiles << findFilesInsideDir("*.pri",
QFileInfo(m_projectfile).absoluteDir().path());
QStringList modules;
for (const QString &file : proandprifiles)
modules << extractMudoulesFromFile(file);
modules.removeDuplicates();
return modules;
}
QStringList PluginManager::extractMudoulesFromFile(const QString &filepath)
{
QStringList modules;
QFile F(filepath);
if (!F.open(QIODevice::ReadOnly)) return QStringList();
QString temp;
QTextStream S(&F);
while (S.readLineInto(&temp))
{
temp = temp.simplified();
if (temp.startsWith("#")) continue;
if (!temp.startsWith("QT")) continue;
QStringList list = temp.split("+=", QString::SkipEmptyParts);
if (list.count() != 2) list = temp.split("=", QString::SkipEmptyParts);
if (list.count() != 2) continue;
modules << list[1].split(" ", QString::SkipEmptyParts);
}
return modules;
}
PluginManager::PluginManager(QObject *parent) : BaseClass(parent) {}
QStringList PluginManager::neededPlugins() const { return m_neededPlugins; }