##// END OF EJS Templates
Fixes data loss in some cases of data recovery from the CosiunusProvider
Fixes data loss in some cases of data recovery from the CosiunusProvider

File last commit:

r750:f189aafd213c
r764:6fa5f5facdaa
Show More
CosinusProvider.cpp
115 lines | 4.1 KiB | text/x-c | CppLexer
Alexandre Leroux
Creates a default provider that will be returned by the mock plugin
r128 #include "CosinusProvider.h"
#include <Data/DataProviderParameters.h>
#include <Data/ScalarSeries.h>
Add cmath header missing
r135 #include <cmath>
Add DownloadProgress emission for mock plugin
r428 #include <QFuture>
Add current progression for thread fix
r364 #include <QThread>
Add DownloadProgress emission for mock plugin
r428 #include <QtConcurrent/QtConcurrent>
Fix the cosinus bug....
r298
The cosinus provider can now handle data request
r231 Q_LOGGING_CATEGORY(LOG_CosinusProvider, "CosinusProvider")
Alexandre Leroux
Generates and registers clone provider
r712 std::shared_ptr<IDataProvider> CosinusProvider::clone() const
{
// No copy is made in clone
return std::make_shared<CosinusProvider>();
}
Implementation of V5 acquisition
r539 std::shared_ptr<IDataSeries> CosinusProvider::retrieveData(QUuid acqIdentifier,
const SqpRange &dataRangeRequested)
Alexandre Leroux
Creates a default provider that will be returned by the mock plugin
r128 {
Add DownloadProgress emission for mock plugin
r428 // TODO: Add Mutex
Fix the cosinus bug....
r298 auto dataIndex = 0;
The cosinus provider can now handle data request
r231
// Gets the timerange from the parameters
Alexandre Leroux
Uses std::vector instead of QVector in ArrayData (1)...
r694 double freq = 100.0;
Implementation of V5 acquisition
r539 double start = std::ceil(dataRangeRequested.m_TStart * freq); // 100 htz
double end = std::floor(dataRangeRequested.m_TEnd * freq); // 100 htz
The cosinus provider can now handle data request
r231
// We assure that timerange is valid
if (end < start) {
std::swap(start, end);
}
Alexandre Leroux
Implements unit test (3)...
r745 // Generates scalar series containing cosinus values (one value per second, end value is
// included)
auto dataCount = end - start + 1;
The cosinus provider can now handle data request
r231
Alexandre Leroux
Uses std::vector instead of QVector in ArrayData (1)...
r694 auto xAxisData = std::vector<double>{};
Alexandre Leroux
Updates cosinus provider...
r452 xAxisData.resize(dataCount);
Alexandre Leroux
Uses std::vector instead of QVector in ArrayData (1)...
r694 auto valuesData = std::vector<double>{};
Alexandre Leroux
Updates cosinus provider...
r452 valuesData.resize(dataCount);
Add DownloadProgress emission for mock plugin
r428
int progress = 0;
Alexandre Leroux
Updates cosinus provider...
r452 auto progressEnd = dataCount;
Alexandre Leroux
Implements unit test (3)...
r745 for (auto time = start; time <= end; ++time, ++dataIndex) {
Implementation of V5 acquisition
r539 auto it = m_VariableToEnableProvider.find(acqIdentifier);
Add DownloadProgress emission for mock plugin
r428 if (it != m_VariableToEnableProvider.end() && it.value()) {
const auto timeOnFreq = time / freq;
Alexandre Leroux
Updates cosinus provider...
r452
Alexandre Leroux
Uses std::vector instead of QVector in ArrayData (1)...
r694 xAxisData[dataIndex] = timeOnFreq;
valuesData[dataIndex] = std::cos(timeOnFreq);
Add DownloadProgress emission for mock plugin
r428
// progression
int currentProgress = (time - start) * 100.0 / progressEnd;
if (currentProgress != progress) {
progress = currentProgress;
Implementation of V5 acquisition
r539 emit dataProvidedProgress(acqIdentifier, progress);
Implementation of progression
r750 qCInfo(LOG_CosinusProvider()) << "TORM: CosinusProvider::retrieveData"
<< QThread::currentThread()->objectName() << progress;
// NOTE: Try to use multithread if possible
Add DownloadProgress emission for mock plugin
r428 }
}
else {
if (!it.value()) {
qCDebug(LOG_CosinusProvider())
<< "CosinusProvider::retrieveData: ARRET De l'acquisition detecté"
<< end - time;
}
}
The cosinus provider can now handle data request
r231 }
Implementation of progression
r750 if (progress != 100) {
// We can close progression beacause all data has been retrieved
emit dataProvidedProgress(acqIdentifier, 100);
}
Alexandre Leroux
Updates cosinus provider...
r452 return std::make_shared<ScalarSeries>(std::move(xAxisData), std::move(valuesData),
Unit{QStringLiteral("t"), true}, Unit{});
Alexandre Leroux
Creates a default provider that will be returned by the mock plugin
r128 }
Alexandre Leroux
Use std::shared_ptr in CosinusProvider
r310
Implementation of V5 acquisition
r539 void CosinusProvider::requestDataLoading(QUuid acqIdentifier,
const DataProviderParameters &parameters)
Alexandre Leroux
Use std::shared_ptr in CosinusProvider
r310 {
Add DownloadProgress emission for mock plugin
r428 // TODO: Add Mutex
Implementation of V5 acquisition
r539 m_VariableToEnableProvider[acqIdentifier] = true;
Initialisation of the graph range at creation in a new graphe, or inside...
r548 qCDebug(LOG_CosinusProvider()) << "TORM: CosinusProvider::requestDataLoading"
Change info to debug on thread display log
r367 << QThread::currentThread()->objectName();
Alexandre Leroux
Use std::shared_ptr in CosinusProvider
r310 // NOTE: Try to use multithread if possible
Alexandre Leroux
Updates IDataProvider::requestDataLoading() method's signature...
r408 const auto times = parameters.m_Times;
Add DownloadProgress emission for mock plugin
r428
Alexandre Leroux
Updates IDataProvider::requestDataLoading() method's signature...
r408 for (const auto &dateTime : qAsConst(times)) {
Implementation of V5 acquisition
r539 if (m_VariableToEnableProvider[acqIdentifier]) {
auto scalarSeries = this->retrieveData(acqIdentifier, dateTime);
Initialisation of the graph range at creation in a new graphe, or inside...
r548 qCDebug(LOG_CosinusProvider()) << "TORM: CosinusProvider::dataProvided";
Implementation of V5 acquisition
r539 emit dataProvided(acqIdentifier, scalarSeries, dateTime);
Add DownloadProgress emission for mock plugin
r428 }
Alexandre Leroux
Use std::shared_ptr in CosinusProvider
r310 }
}
Implement of the abort download process
r422
Implementation of V5 acquisition
r539 void CosinusProvider::requestDataAborting(QUuid acqIdentifier)
Implement of the abort download process
r422 {
Add DownloadProgress emission for mock plugin
r428 // TODO: Add Mutex
Implementation of V5 acquisition
r539 qCDebug(LOG_CosinusProvider()) << "CosinusProvider::requestDataAborting" << acqIdentifier
Remove abort button validity when the progress is finished (eg. == 0)
r432 << QThread::currentThread()->objectName();
Implementation of V5 acquisition
r539 auto it = m_VariableToEnableProvider.find(acqIdentifier);
Add DownloadProgress emission for mock plugin
r428 if (it != m_VariableToEnableProvider.end()) {
it.value() = false;
}
else {
qCWarning(LOG_CosinusProvider())
<< tr("Aborting progression of inexistant identifier detected !!!");
}
Implement of the abort download process
r422 }