diff --git a/Libs/Core/ctkAbstractWorker.cpp b/Libs/Core/ctkAbstractWorker.cpp index c15f2ee090..154fb11207 100644 --- a/Libs/Core/ctkAbstractWorker.cpp +++ b/Libs/Core/ctkAbstractWorker.cpp @@ -21,6 +21,11 @@ =========================================================================*/ +// Qt includes +#include +#include + +// CTK includes #include "ctkAbstractJob.h" #include "ctkAbstractScheduler.h" #include "ctkAbstractWorker.h" @@ -28,8 +33,6 @@ // -------------------------------------------------------------------------- ctkAbstractWorker::ctkAbstractWorker() { - this->Job = nullptr; - this->Scheduler = nullptr; this->setAutoDelete(false); } @@ -91,3 +94,47 @@ void ctkAbstractWorker::setScheduler(QSharedPointer schedu { this->Scheduler = scheduler; } + +//---------------------------------------------------------------------------- +void ctkAbstractWorker::startNextJob() +{ + if (!this->Scheduler || !this->Job) + { + return; + } + + ctkAbstractJob* newJob = this->Job->clone(); + newJob->setRetryCounter(newJob->retryCounter() + 1); + this->Scheduler->addJob(newJob); +} + +//---------------------------------------------------------------------------- +void ctkAbstractWorker::onJobCanceled() +{ + if (!this->Job) + { + return; + } + + if (this->Job->retryCounter() < this->Job->maximumNumberOfRetry() && + this->Job->status() != ctkAbstractJob::JobStatus::Stopped) + { + QTimer timer; + timer.setSingleShot(true); + QEventLoop loop; + connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); + timer.start(this->Job->retryDelay()); + + this->startNextJob(); + + emit this->Job->finished(); + } + else if (this->Job->status() != ctkAbstractJob::JobStatus::Stopped) + { + emit this->Job->failed(); + } + else + { + emit this->Job->finished(); + } +} diff --git a/Libs/Core/ctkAbstractWorker.h b/Libs/Core/ctkAbstractWorker.h index 1e26a87936..ef36281b2f 100644 --- a/Libs/Core/ctkAbstractWorker.h +++ b/Libs/Core/ctkAbstractWorker.h @@ -66,6 +66,10 @@ class CTK_CORE_EXPORT ctkAbstractWorker : public QObject, public QRunnable void setScheduler(QSharedPointer scheduler); ///@} +public slots: + virtual void startNextJob(); + virtual void onJobCanceled(); + protected: QSharedPointer Job; QSharedPointer Scheduler; diff --git a/Libs/DICOM/Core/ctkDICOMWorker.cpp b/Libs/DICOM/Core/ctkDICOMWorker.cpp index 72338540a1..a9d0388c37 100644 --- a/Libs/DICOM/Core/ctkDICOMWorker.cpp +++ b/Libs/DICOM/Core/ctkDICOMWorker.cpp @@ -21,8 +21,6 @@ =========================================================================*/ -#include "ctkDICOMJob.h" -#include "ctkDICOMScheduler.h" #include "ctkDICOMWorker.h" //------------------------------------------------------------------------------ @@ -30,58 +28,3 @@ ctkDICOMWorker::ctkDICOMWorker() = default; //------------------------------------------------------------------------------ ctkDICOMWorker::~ctkDICOMWorker() = default; - -//---------------------------------------------------------------------------- -void ctkDICOMWorker::startNextJob() -{ - QSharedPointer scheduler = - qobject_cast>(this->Scheduler); - if (!scheduler) - { - return; - } - - QSharedPointer job = - qobject_cast>(this->Job); - if (!job) - { - return; - } - - ctkDICOMJob* newJob = job->clone(); - newJob->setRetryCounter(newJob->retryCounter() + 1); - scheduler->addJob(newJob); -} - -//---------------------------------------------------------------------------- -void ctkDICOMWorker::onJobCanceled() -{ - QSharedPointer job = - qobject_cast>(this->Job); - if (!job) - { - return; - } - - if (job->retryCounter() < job->maximumNumberOfRetry() && - job->status() != ctkAbstractJob::JobStatus::Stopped) - { - QTimer timer; - timer.setSingleShot(true); - QEventLoop loop; - connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); - timer.start(job->retryDelay()); - - this->startNextJob(); - - emit job->finished(); - } - else if (job->status() != ctkAbstractJob::JobStatus::Stopped) - { - emit job->failed(); - } - else - { - emit job->finished(); - } -} diff --git a/Libs/DICOM/Core/ctkDICOMWorker.h b/Libs/DICOM/Core/ctkDICOMWorker.h index 1839bbe813..4db110f38b 100644 --- a/Libs/DICOM/Core/ctkDICOMWorker.h +++ b/Libs/DICOM/Core/ctkDICOMWorker.h @@ -45,10 +45,6 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMWorker : public ctkAbstractWorker explicit ctkDICOMWorker(); virtual ~ctkDICOMWorker(); -public slots: - void startNextJob(); - void onJobCanceled(); - private: Q_DISABLE_COPY(ctkDICOMWorker) };