diff --git a/src/blackmisc/worker.h b/src/blackmisc/worker.h index ac2ac212d..0c1b89a8b 100644 --- a/src/blackmisc/worker.h +++ b/src/blackmisc/worker.h @@ -41,10 +41,6 @@ namespace BlackMisc { - - template - class CWorkerPointer; - /*! * Starts a single-shot timer which will call a task in the thread of the given object when it times out. * @@ -341,9 +337,6 @@ namespace BlackMisc //! Called after cleanup(). void finish(); - template - friend class CWorkerPointer; - using CWorkerBase::hasStarted; using CWorkerBase::setStarted; using CWorkerBase::setFinished; @@ -352,87 +345,6 @@ namespace BlackMisc QString m_name; //!< worker's name std::atomic m_enabled { true }; //!< marker it is enabled }; - - /*! - * RAII smart pointer to manage a CContinuousWorker instance. - * - * Not required if the worker is immediately started after construction. - * Before the worker starts, it is owned by the pointer. - * After the worker starts, becomes a non-owning pointer, as ownership is tied to the lifetime of the thread. - */ - template - class CWorkerPointer - { - public: - static_assert(std::is_base_of::value, "T must be a CContinuousWorker subclass"); - - //! Constructor. Takes ownership. - explicit CWorkerPointer(T *ptr) : m_weak(ptr) - { - if (!ptr || static_cast(ptr)->hasStarted()) { return; } - m_strong.reset(ptr); - connect(); - } - - //! Construct a null pointer. - //! @{ - CWorkerPointer() = default; - CWorkerPointer(std::nullptr_t) {} - //! @} - - //! Move constructor. - CWorkerPointer(CWorkerPointer &&other) : m_strong(std::move(other.m_strong)), m_weak(other.m_weak), m_guard() - { - connect(); - } - - //! Move assignment operator. - CWorkerPointer &operator =(CWorkerPointer &&other) - { - m_strong = std::move(other.m_strong); - m_weak = other.m_weak; - connect(); - return *this; - } - - //! Not copyable. - //! @{ - CWorkerPointer(const CWorkerPointer &) = delete; - CWorkerPointer &operator =(const CWorkerPointer &) = delete; - //! @} - - //! Factory method. - //! Arguments are forwarded to the constructor of T. Strictly more exception-safe than calling the constructor with new. - template - static CWorkerPointer create(Ts &&... args) { return CWorkerPointer(new T(std::forward(args)...)); } - - //! Access the raw pointer. - //! @{ - T *data() const { return m_weak.data(); } - T &operator *() const { return *data(); } - T *operator ->() const { return &*data(); } - //! @} - - //! True if it points to a valid worker. - //! @{ - explicit operator bool() const { return m_weak; } - bool isValid() const { return m_weak; } - //! @} - - //! True if it owns the worker it points to (i.e. worker has not yet started). - bool isOwner() const { return m_strong; } - - private: - void connect() - { - if (!m_strong) { return; } - m_guard = QObject::connect(m_strong.get(), &CWorkerBase::aboutToStart, [this] { m_strong.release(); }); - } - - std::unique_ptr m_strong; - QPointer m_weak; - CConnectionGuard m_guard; - }; } #endif diff --git a/src/swiftdata/swiftdata.cpp b/src/swiftdata/swiftdata.cpp index 1f77e2788..3e2c3bcf8 100644 --- a/src/swiftdata/swiftdata.cpp +++ b/src/swiftdata/swiftdata.cpp @@ -162,7 +162,7 @@ void CSwiftData::consolidationSettingChanged() if (m_updater) { ui->comp_MainInfoArea->getDataSettingsComponent()->setBackgroundUpdater(nullptr); - disconnect(m_updater.data()); + disconnect(m_updater); m_updater->abandonAndWait(); m_updater = nullptr; } @@ -171,10 +171,10 @@ void CSwiftData::consolidationSettingChanged() { if (!m_updater) { - m_updater = m_updater.create(this); - connect(m_updater.data(), &CBackgroundDataUpdater::consolidating, ui->comp_InfoBar, &CInfoBarWebReadersStatusComponent::consolidationRunning, Qt::QueuedConnection); + m_updater = new CBackgroundDataUpdater(this); + connect(m_updater, &CBackgroundDataUpdater::consolidating, ui->comp_InfoBar, &CInfoBarWebReadersStatusComponent::consolidationRunning, Qt::QueuedConnection); m_updater->start(QThread::LowestPriority); - ui->comp_MainInfoArea->getDataSettingsComponent()->setBackgroundUpdater(m_updater.data()); + ui->comp_MainInfoArea->getDataSettingsComponent()->setBackgroundUpdater(m_updater); } m_updater->startUpdating(consolidationSecs); } diff --git a/src/swiftdata/swiftdata.h b/src/swiftdata/swiftdata.h index 90af9ee80..020791949 100644 --- a/src/swiftdata/swiftdata.h +++ b/src/swiftdata/swiftdata.h @@ -78,9 +78,9 @@ private: void displayLog(); void checkMinimumVersion(); - BlackGui::CManagedStatusBar m_statusBar; QScopedPointer ui; - BlackMisc::CWorkerPointer m_updater; + BlackGui::CManagedStatusBar m_statusBar; + BlackCore::Db::CBackgroundDataUpdater *m_updater = nullptr; //!< consolidate with DB data BlackMisc::CSettingReadOnly m_consolidationSettings { this, &CSwiftData::consolidationSettingChanged }; //!< consolidation time };