diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index a895aac..29c621a 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -476,12 +476,29 @@ ContentManager::DownloadInfo ContentManager::updateDownloadInfos(QString bookId, return result; } +namespace +{ + +std::shared_ptr getSharedPointer(RowNode* ptr) +{ + return std::static_pointer_cast(ptr->shared_from_this()); +} + +} // unnamed namespace + void ContentManager::downloadBook(const QString &id, QModelIndex index) { try { downloadBook(id); - emit managerModel->startDownload(index); + auto node = getSharedPointer(static_cast(index.internalPointer())); + const auto newDownload = std::make_shared(); + m_downloads[id] = newDownload; + node->setDownloadState(newDownload); + QTimer *timer = newDownload->getDownloadUpdateTimer(); + connect(timer, &QTimer::timeout, [=]() { + managerModel->updateDownload(id); + }); } catch ( const ContentManagerError& err ) { diff --git a/src/contentmanagermodel.cpp b/src/contentmanagermodel.cpp index 15f655d..846f91e 100644 --- a/src/contentmanagermodel.cpp +++ b/src/contentmanagermodel.cpp @@ -245,24 +245,6 @@ void ContentManagerModel::updateImage(QString bookId, QString url, QByteArray im emit dataChanged(index, index); } -std::shared_ptr getSharedPointer(RowNode* ptr) -{ - return std::static_pointer_cast(ptr->shared_from_this()); -} - -void ContentManagerModel::startDownload(QModelIndex index) -{ - auto node = getSharedPointer(static_cast(index.internalPointer())); - const auto bookId = node->getBookId(); - const auto newDownload = std::make_shared(); - m_downloads[bookId] = newDownload; - node->setDownloadState(newDownload); - QTimer *timer = newDownload->getDownloadUpdateTimer(); - connect(timer, &QTimer::timeout, this, [=]() { - updateDownload(bookId); - }); -} - void ContentManagerModel::updateDownload(QString bookId) { const auto download = m_downloads.value(bookId); diff --git a/src/contentmanagermodel.h b/src/contentmanagermodel.h index b9196af..9d78d4d 100644 --- a/src/contentmanagermodel.h +++ b/src/contentmanagermodel.h @@ -47,18 +47,15 @@ public: // functions public slots: void updateImage(QString bookId, QString url, QByteArray imageData); - void startDownload(QModelIndex index); void pauseDownload(QModelIndex index); void resumeDownload(QModelIndex index); void cancelDownload(QModelIndex index); + void updateDownload(QString bookId); protected: // functions bool canFetchMore(const QModelIndex &parent) const override; void fetchMore(const QModelIndex &parent) override; -private: // functions - void updateDownload(QString bookId); - private: // data BookInfoList m_data; std::shared_ptr rootNode;