diff --git a/include/PluginManager/PluginManager.h b/include/PluginManager/PluginManager.h index 025e42b..06466ab 100644 --- a/include/PluginManager/PluginManager.h +++ b/include/PluginManager/PluginManager.h @@ -17,6 +17,7 @@ Q_DECLARE_LOGGING_CATEGORY(LOG_PluginManager) class SCIQLOP_CORE_EXPORT PluginManager { public: explicit PluginManager(); + ~PluginManager(); /** * Loads plugins into SciQlop. The loaded plugins are those located in the directory passed in diff --git a/meson.build b/meson.build index 7799e98..5392a08 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ catalogicpp_dep = dependency('catalogicpp', required : true, fallback:['catalogicpp','catalogicpp_dep']) pybind11_dep = dependency('pybind11', required : true, fallback:['pybind11','pybind11_dep']) - +timeseries_dep = dependency('TimeSeries', required : true, fallback:['TimeSeries','time_series_dep']) core_moc_headers = [ './include/Common/containers.h', @@ -16,24 +16,15 @@ core_moc_headers = [ './include/Common/MetaTypes.h', './include/Common/cpp_utils.h', './include/Common/SortUtils.h', - './include/Data/DataSeries.h', - './include/Data/DataSeriesIterator.h', './include/Data/DateTimeRangeHelper.h', - './include/Data/SpectrogramSeries.h', + './include/Data/ScalarTimeSerie.h', './include/Data/DateTimeRange.h', - './include/Data/VectorSeries.h', './include/Data/DataProviderParameters.h', - './include/Data/ArrayData.h', - './include/Data/Unit.h', - './include/Data/ScalarSeries.h', + './include/Data/VectorTimeSerie.h', './include/Data/SqpIterator.h', './include/Data/IDataProvider.h', - './include/Data/DataSeriesUtils.h', - './include/Data/OptionalAxis.h', - './include/Data/IDataSeries.h', + './include/Data/SpectrogramTimeSerie.h', './include/Data/DataSeriesType.h', - './include/Data/ArrayDataIterator.h', - './include/Data/DataSeriesMergeHelper.h', './include/CoreGlobal.h', './include/Network/NetworkController.h', './include/Network/Response.h', @@ -50,16 +41,11 @@ core_moc_headers = [ './include/Catalogue/CatalogueController.h', './include/Plugin/IPlugin.h', './include/Variable/VariableModel2.h', - './include/Variable/Variable.h', - './include/Variable/VariableCacheStrategy.h', './include/Variable/VariableController2.h', - './include/Variable/VariableCacheStrategyFactory.h', + './include/Variable/Variable2.h', './include/Variable/VariableSynchronizationGroup2.h', - './include/Variable/ProportionalCacheStrategy.h', './include/Variable/private/VCTransaction.h', - './include/Variable/SingleThresholdCacheStrategy.h', - './include/Visualization/VisualizationController.h' - ] + './include/Visualization/VisualizationController.h'] core_moc_sources = ['src/Network/Downloader.cpp'] @@ -72,13 +58,6 @@ core_sources = [ './src/Common/SignalWaiter.cpp', './src/Common/DateUtils.cpp', './src/Common/StringUtils.cpp', - './src/Data/VectorSeries.cpp', - './src/Data/ScalarSeries.cpp', - './src/Data/OptionalAxis.cpp', - './src/Data/DataSeriesIterator.cpp', - './src/Data/SpectrogramSeries.cpp', - './src/Data/ArrayDataIterator.cpp', - './src/Data/DataSeriesUtils.cpp', './src/Network/Downloader.cpp', './src/Network/NetworkController.cpp', './src/Settings/SqpSettingsDefs.cpp', @@ -88,13 +67,10 @@ core_sources = [ './src/DataSource/DataSourceController.cpp', './src/Time/TimeController.cpp', './src/PluginManager/PluginManager.cpp', - './src/pybind11_wrappers/CatalogWrappers.cpp', - #'./src/pybind11_wrappers/QtWrappers.cpp', - #'./src/pybind11_wrappers/CoreWrappers.cpp', './src/Version.cpp', './src/Catalogue/CatalogueController.cpp', - './src/Variable/Variable.cpp', './src/Variable/VariableSynchronizationGroup2.cpp', + './src/Variable/Variable2.cpp', './src/Variable/VariableController2.cpp', './src/Variable/VariableModel2.cpp', './src/Visualization/VisualizationController.cpp'] @@ -107,16 +83,22 @@ sciqlop_core_lib = library('sciqlopcore', core_moc_files, cpp_args : '-DCORE_LIB', include_directories : core_inc, - dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep], + dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep, timeseries_dep], install : true ) sciqlop_core = declare_dependency(link_with : sciqlop_core_lib, include_directories : core_inc, - dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep]) + dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep, timeseries_dep]) +[ + './src/pybind11_wrappers/CatalogWrappers.cpp', + './src/pybind11_wrappers/QtWrappers.cpp', + './src/pybind11_wrappers/CoreWrappers.cpp' +] + subdir('tests') diff --git a/src/PluginManager/PluginManager.cpp b/src/PluginManager/PluginManager.cpp index 1a116f5..b035b1e 100644 --- a/src/PluginManager/PluginManager.cpp +++ b/src/PluginManager/PluginManager.cpp @@ -78,9 +78,10 @@ struct PluginManager::PluginManagerPrivate { loadState.setError(QObject::tr("name '%1' already registered").arg(pluginName)); } else { - if (auto pluginInstance = qobject_cast(pluginLoader.instance())) { - pluginInstance->initialize(); + if (auto plugin = pluginLoader.instance()) { + qobject_cast(plugin)->initialize(); m_RegisteredPlugins.insert(pluginName, pluginPath); + m_LoadedPlugins.insert(pluginName, plugin); } else { loadState.setError(QObject::tr("the file is not a Sciqlop plugin")); @@ -100,17 +101,33 @@ struct PluginManager::PluginManagerPrivate { for (QObject *plugin : QPluginLoader::staticInstances()) { qobject_cast(plugin)->initialize(); m_RegisteredPlugins.insert(plugin->metaObject()->className(), "StaticPlugin"); + m_LoadedPlugins.insert(plugin->metaObject()->className(), plugin); } } + void clearAllPlugins() + { + for(auto plugin:m_LoadedPlugins) + { + delete plugin; + } + m_LoadedPlugins.clear(); + m_RegisteredPlugins.clear(); + } /// Registered plugins (key: plugin name, value: plugin path) QHash m_RegisteredPlugins; + QHash m_LoadedPlugins; }; PluginManager::PluginManager() : impl{spimpl::make_unique_impl()} { } +PluginManager::~PluginManager() +{ + impl->clearAllPlugins(); +} + void PluginManager::loadPlugins(const QDir &pluginDir) { // Load plugins diff --git a/tests/meson.build b/tests/meson.build index 6678fc0..62619a4 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -7,17 +7,6 @@ TestUtils_dep = declare_dependency(link_with : TestUtils, dependencies : [sciqlop_core, qt5test]) -DataSeriesTestsUtils = library('DataSeriesTestsUtils', 'Data/DataSeriesBuilders.h', 'Data/DataSeriesBuilders.cpp', - 'Data/DataSeriesTestsUtils.h', - 'Data/DataSeriesTestsUtils.cpp', - dependencies : [sciqlop_core, qt5test] - ) - - -DataSeriesTestsUtils_dep = declare_dependency(link_with : DataSeriesTestsUtils, - dependencies : [sciqlop_core, qt5test]) - - tests = [ { @@ -41,47 +30,6 @@ tests = [ 'deps': [sciqlop_core, qt5test] }, { - 'name':'TestDataSeriesUtils', - 'sources': ['Data/TestDataSeriesUtils.cpp'], - 'deps': [sciqlop_core, qt5test] - }, - { - 'name':'TestOptionalAxis', - 'sources': ['Data/TestOptionalAxis.cpp'], - 'deps': [sciqlop_core, qt5test] - }, - { - 'name':'TestSpectrogramSeries', - 'sources': [ - 'Data/TestSpectrogramSeries.cpp', - ], - 'deps': [sciqlop_core, qt5test, DataSeriesTestsUtils_dep] - }, - { - 'name':'TestOneDimArrayData', - 'sources': ['Data/TestOneDimArrayData.cpp'], - 'deps': [sciqlop_core, qt5test] - }, - { - 'name':'TestScalarSeries', - 'sources': [ - 'Data/TestScalarSeries.cpp', - ], - 'deps': [sciqlop_core, qt5test, DataSeriesTestsUtils_dep] - }, - { - 'name':'TestTwoDimArrayData', - 'sources': ['Data/TestTwoDimArrayData.cpp'], - 'deps': [sciqlop_core, qt5test] - }, - { - 'name':'TestVectorSeries', - 'sources': [ - 'Data/TestVectorSeries.cpp', - ], - 'deps': [sciqlop_core, qt5test, DataSeriesTestsUtils_dep] - }, - { 'name':'TestDataSourceController', 'sources': [ 'DataSource/TestDataSourceController.cpp',