diff --git a/core/include/Data/DataProviderParameters.h b/core/include/Data/DataProviderParameters.h index 07df203..6e68dda 100644 --- a/core/include/Data/DataProviderParameters.h +++ b/core/include/Data/DataProviderParameters.h @@ -9,7 +9,7 @@ * @sa IDataProvider */ struct DataProviderParameters { - SqpDateTime m_Time; + QVector m_Times; }; #endif // SCIQLOP_DATAPROVIDERPARAMETERS_H diff --git a/core/include/Data/IDataProvider.h b/core/include/Data/IDataProvider.h index 2b4cc75..0f16848 100644 --- a/core/include/Data/IDataProvider.h +++ b/core/include/Data/IDataProvider.h @@ -30,10 +30,9 @@ public: virtual ~IDataProvider() noexcept = default; /** - * @brief requestDataLoading provide datas for the data identified by identifier for all - * SqpDateTime of dateTimeList + * @brief requestDataLoading provide datas for the data identified by identifier and parameters */ - virtual void requestDataLoading(QUuid identifier, const QVector &dateTimeList) = 0; + virtual void requestDataLoading(QUuid identifier, const DataProviderParameters ¶meters) = 0; signals: /** diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index 8611fb4..8b698be 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -186,7 +186,7 @@ void VariableController::onRequestDataLoading(std::shared_ptr variable // Ask the provider for each data on the dateTimeListNotInCache auto identifier = impl->m_VariableToIdentifier.at(variable); impl->m_VariableToProviderMap.at(variable)->requestDataLoading( - identifier, std::move(dateTimeListNotInCache)); + identifier, DataProviderParameters{std::move(dateTimeListNotInCache)}); } else { emit variable->updated(); diff --git a/plugins/amda/include/AmdaProvider.h b/plugins/amda/include/AmdaProvider.h index d6c0c59..7999f62 100644 --- a/plugins/amda/include/AmdaProvider.h +++ b/plugins/amda/include/AmdaProvider.h @@ -21,10 +21,10 @@ class SCIQLOP_AMDA_EXPORT AmdaProvider : public IDataProvider { public: explicit AmdaProvider(); - void requestDataLoading(QUuid token, const QVector &dateTimeList) override; + void requestDataLoading(QUuid token, const DataProviderParameters ¶meters) override; private: - void retrieveData(QUuid token, const DataProviderParameters ¶meters); + void retrieveData(QUuid token, const SqpDateTime &dateTime); class AmdaProviderPrivate; spimpl::unique_impl_ptr impl; diff --git a/plugins/amda/src/AmdaProvider.cpp b/plugins/amda/src/AmdaProvider.cpp index a7a6911..415df87 100644 --- a/plugins/amda/src/AmdaProvider.cpp +++ b/plugins/amda/src/AmdaProvider.cpp @@ -38,7 +38,7 @@ QString dateFormat(double sqpDateTime) noexcept } // namespace struct AmdaProvider::AmdaProviderPrivate { - DataProviderParameters m_Params{}; + SqpDateTime m_DateTime{}; std::unique_ptr m_AccessManager{nullptr}; QNetworkReply *m_Reply{nullptr}; // std::unique_ptr m_File{nullptr}; @@ -56,22 +56,23 @@ AmdaProvider::AmdaProvider() : impl{spimpl::make_unique_impl &dateTimeList) +void AmdaProvider::requestDataLoading(QUuid token, const DataProviderParameters ¶meters) { // NOTE: Try to use multithread if possible - for (const auto &dateTime : dateTimeList) { - retrieveData(token, DataProviderParameters{dateTime}); + const auto times = parameters.m_Times; + for (const auto &dateTime : qAsConst(times)) { + retrieveData(token, dateTime); } } -void AmdaProvider::retrieveData(QUuid token, const DataProviderParameters ¶meters) +void AmdaProvider::retrieveData(QUuid token, const SqpDateTime &dateTime) { // /////////// // // Creates URL // // /////////// // - auto startDate = dateFormat(parameters.m_Time.m_TStart); - auto endDate = dateFormat(parameters.m_Time.m_TEnd); + auto startDate = dateFormat(dateTime.m_TStart); + auto endDate = dateFormat(dateTime.m_TEnd); auto productId = QStringLiteral("imf(0)"); auto url = QUrl{QString{AMDA_URL_FORMAT}.arg(startDate, endDate, productId)}; @@ -91,7 +92,7 @@ void AmdaProvider::retrieveData(QUuid token, const DataProviderParameters ¶m // Parse results file if (auto dataSeries = AmdaResultParser::readTxt(tempFile->fileName())) { - emit dataProvided(impl->m_Token, dataSeries, impl->m_Params.m_Time); + emit dataProvided(impl->m_Token, dataSeries, impl->m_DateTime); } else { /// @todo ALX : debug @@ -123,6 +124,6 @@ void AmdaProvider::retrieveData(QUuid token, const DataProviderParameters ¶m // //////////////// // impl->m_Token = token; - impl->m_Params = parameters; + impl->m_DateTime = dateTime; emit requestConstructed(QNetworkRequest{url}, token, httpFinishedLambda); } diff --git a/plugins/mockplugin/include/CosinusProvider.h b/plugins/mockplugin/include/CosinusProvider.h index 41e7db4..1f04e38 100644 --- a/plugins/mockplugin/include/CosinusProvider.h +++ b/plugins/mockplugin/include/CosinusProvider.h @@ -14,13 +14,12 @@ Q_DECLARE_LOGGING_CATEGORY(LOG_CosinusProvider) */ class SCIQLOP_MOCKPLUGIN_EXPORT CosinusProvider : public IDataProvider { public: - void requestDataLoading(QUuid token, const QVector &dateTimeList) override; + void requestDataLoading(QUuid token, const DataProviderParameters ¶meters) override; private: /// @sa IDataProvider::retrieveData() - std::shared_ptr retrieveData(const DataProviderParameters ¶meters) const; - std::shared_ptr retrieveDataSeries(const SqpDateTime &dateTime); + std::shared_ptr retrieveData(const SqpDateTime &dateTime) const; }; #endif // SCIQLOP_COSINUSPROVIDER_H diff --git a/plugins/mockplugin/src/CosinusProvider.cpp b/plugins/mockplugin/src/CosinusProvider.cpp index f3fab7d..0fd5537 100644 --- a/plugins/mockplugin/src/CosinusProvider.cpp +++ b/plugins/mockplugin/src/CosinusProvider.cpp @@ -10,11 +10,8 @@ Q_LOGGING_CATEGORY(LOG_CosinusProvider, "CosinusProvider") -std::shared_ptr -CosinusProvider::retrieveData(const DataProviderParameters ¶meters) const +std::shared_ptr CosinusProvider::retrieveData(const SqpDateTime &dateTime) const { - auto dateTime = parameters.m_Time; - auto dataIndex = 0; // Gets the timerange from the parameters @@ -38,13 +35,14 @@ CosinusProvider::retrieveData(const DataProviderParameters ¶meters) const return scalarSeries; } -void CosinusProvider::requestDataLoading(QUuid token, const QVector &dateTimeList) +void CosinusProvider::requestDataLoading(QUuid token, const DataProviderParameters ¶meters) { qCDebug(LOG_CosinusProvider()) << "CosinusProvider::requestDataLoading" << QThread::currentThread()->objectName(); // NOTE: Try to use multithread if possible - for (const auto &dateTime : dateTimeList) { - auto scalarSeries = this->retrieveData(DataProviderParameters{dateTime}); + const auto times = parameters.m_Times; + for (const auto &dateTime : qAsConst(times)) { + auto scalarSeries = this->retrieveData(dateTime); emit dataProvided(token, scalarSeries, dateTime); } }