Рефакторинг
This commit is contained in:
parent
4324eff688
commit
a605b7bf74
|
@ -10,8 +10,7 @@ IPlugin::IPlugin(const QString& depInterfaces)
|
|||
if (!depPlugin.isEmpty())
|
||||
pluginManager->nextLoadPlugins(depPlugin);
|
||||
}
|
||||
if (pluginManager->settings())
|
||||
setSettings(pluginManager->settings());
|
||||
setSettings(pluginManager->settings());
|
||||
}
|
||||
|
||||
IPlugin::~IPlugin()
|
||||
|
|
|
@ -13,7 +13,6 @@ PluginManager::PluginManager(QObject *parent) :
|
|||
{
|
||||
m_instance = this;
|
||||
m_settings = nullptr;
|
||||
m_lockFiles = nullptr;
|
||||
|
||||
m_pluginsDir = QDir(qApp->applicationDirPath() + "/plugins/");
|
||||
}
|
||||
|
@ -42,7 +41,6 @@ PluginManager::~PluginManager()
|
|||
delete plug;
|
||||
plug = interfaceObject("IPlugin");
|
||||
}
|
||||
delete [] m_lockFiles;
|
||||
}
|
||||
|
||||
QSettings *PluginManager::settings() const
|
||||
|
@ -69,11 +67,11 @@ QList<IPlugin *> PluginManager::dependentPlugins(IPlugin *plugin)
|
|||
QHash<QString, IPlugin *> pluginList;
|
||||
|
||||
for (QObject *objPlug : m_interfaces.values("IPlugin")) {
|
||||
IPlugin *plug = qobject_cast<IPlugin *>(objPlug);
|
||||
if (plug && plug!=plugin)
|
||||
for (IPlugin *interfacePlugin : dependPlugins(plug))
|
||||
if (plugin == interfacePlugin)
|
||||
pluginList[objPlug->objectName()] = plug;
|
||||
IPlugin *dependPlugin = qobject_cast<IPlugin *>(objPlug);
|
||||
if (dependPlugin != nullptr && dependPlugin != plugin) {
|
||||
if (dependPlugins(dependPlugin).contains(plugin))
|
||||
pluginList[objPlug->objectName()] = dependPlugin;
|
||||
}
|
||||
}
|
||||
return pluginList.values();
|
||||
}
|
||||
|
@ -86,11 +84,9 @@ bool PluginManager::loadPlugins()
|
|||
+ m_pluginsDir.absolutePath();
|
||||
return false;
|
||||
}
|
||||
m_fileList = m_pluginsDir.entryList(QDir::Files);
|
||||
|
||||
qint32 count = m_fileList.count();
|
||||
m_lockFiles = new bool[count];
|
||||
for (qint32 i = 0; i < count; ++i) m_lockFiles[i] = false;
|
||||
for (const QString &filename : m_pluginsDir.entryList(QDir::Files))
|
||||
m_fileList.append({filename, false});
|
||||
|
||||
nextLoadPlugins();
|
||||
emit endLoadingPlugins();
|
||||
|
@ -101,16 +97,14 @@ bool PluginManager::loadPlugins()
|
|||
bool PluginManager::nextLoadPlugins(QString iid)
|
||||
{
|
||||
bool result = false;
|
||||
for (qint32 fileNum = m_fileList.count()-1; fileNum >= 0 ; --fileNum)
|
||||
{
|
||||
if (!m_lockFiles[fileNum]) {
|
||||
m_lockFiles[fileNum] = true;
|
||||
bool isLoad = loadPlugin(m_fileList.at(fileNum), iid);
|
||||
if (!isLoad)
|
||||
m_lockFiles[fileNum] = false;
|
||||
result = result || isLoad;
|
||||
for (FileList &file : m_fileList) {
|
||||
if (!file.lock) {
|
||||
file.lock = true;
|
||||
file.lock = loadPlugin(file.filename, iid);
|
||||
result = result || file.lock;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ public:
|
|||
QList<IPlugin*> dependentPlugins(IPlugin *plugin);
|
||||
|
||||
//! Получить от каких плагинов зависит
|
||||
/*! Позволяет получить список плагинов от которых зависит указанный плвгин
|
||||
/*! Позволяет получить список плагинов от которых зависит указанный плагин
|
||||
*/
|
||||
QList<IPlugin *> dependPlugins(IPlugin *plugin);
|
||||
|
||||
|
@ -109,6 +109,11 @@ private slots:
|
|||
|
||||
private:
|
||||
|
||||
struct FileList {
|
||||
QString filename;
|
||||
bool lock;
|
||||
};
|
||||
|
||||
//! Экземпляр менеджера плагинов
|
||||
static PluginManager *m_instance;
|
||||
|
||||
|
@ -125,10 +130,7 @@ private:
|
|||
QDir m_pluginsDir;
|
||||
|
||||
//! Список файлов в каталоге плагина
|
||||
QStringList m_fileList;
|
||||
|
||||
//! Множество заблокированных файлов
|
||||
bool *m_lockFiles;
|
||||
QList<FileList> m_fileList;
|
||||
};
|
||||
|
||||
}}
|
||||
|
|
|
@ -211,12 +211,15 @@ void tst_PluginManager::loadPlugins()
|
|||
QVERIFY(plugins.at(0) == "tst_plugin3");
|
||||
|
||||
QVERIFY(
|
||||
(plugins.at(1) == "tst_plugin2"
|
||||
&& (plugins.at(2) == "tst_plugin1" || plugins.at(3) == "tst_plugin1"))
|
||||
|| (plugins.at(2) == "tst_plugin2" && plugins.at(3) == "tst_plugin1")
|
||||
( plugins.at(1) == "tst_plugin2" &&
|
||||
plugins.at(2) == "tst_plugin4" &&
|
||||
plugins.at(3) == "tst_plugin1"
|
||||
) ||
|
||||
( plugins.at(1) == "tst_plugin4" && (
|
||||
( plugins.at(2) == "tst_plugin1" && plugins.at(3) == "tst_plugin2") ||
|
||||
( plugins.at(2) == "tst_plugin2" && plugins.at(3) == "tst_plugin1"))
|
||||
)
|
||||
);
|
||||
|
||||
QVERIFY(plugins.at(3) == "tst_plugin1" || plugins.at(3) == "tst_plugin4");
|
||||
}
|
||||
|
||||
void tst_PluginManager::settings()
|
||||
|
|
Reference in New Issue