From a1c60d8dbe2d66024fcaaf85006384c58cef7bcf Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Fri, 9 Feb 2024 15:54:53 +0400 Subject: [PATCH] Moved ownership of download state to ContentManager ContentManagerModel depends on the current view settings (filters) much more than ContentManager does. Since the download state (the set of active and/or paused downloads and their progress info) is independent of the view settings it is more natural for ContentManager to own it. --- src/contentmanager.cpp | 2 +- src/contentmanager.h | 3 +++ src/contentmanagermodel.cpp | 3 ++- src/contentmanagermodel.h | 7 +++++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 9372087..5a3904f 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -53,7 +53,7 @@ ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, // mp_view will be passed to the tab who will take ownership, // so, we don't need to delete it. mp_view = new ContentManagerView(); - managerModel = new ContentManagerModel(this); + managerModel = new ContentManagerModel(&m_downloads, this); const auto booksList = getBooksList(); managerModel->setBooksData(booksList); auto treeView = mp_view->getView(); diff --git a/src/contentmanager.h b/src/contentmanager.h index c43f76a..762ee01 100644 --- a/src/contentmanager.h +++ b/src/contentmanager.h @@ -44,6 +44,7 @@ private: Library* mp_library; kiwix::LibraryPtr mp_remoteLibrary; kiwix::Downloader* mp_downloader; + ContentManagerModel::Downloads m_downloads; OpdsRequestManager m_remoteLibraryManager; ContentManagerView* mp_view; bool m_local = true; @@ -61,8 +62,10 @@ private: void reallyEraseBook(const QString& id, bool moveToTrash); void eraseBookFilesFromComputer(const QString dirPath, const QString filename, const bool moveToTrash); BookInfoList getBooksList(); + ContentManagerModel *managerModel; QMutex remoteLibraryLocker; + void setCategories(); void setLanguages(); diff --git a/src/contentmanagermodel.cpp b/src/contentmanagermodel.cpp index 9466369..3aaa81c 100644 --- a/src/contentmanagermodel.cpp +++ b/src/contentmanagermodel.cpp @@ -7,8 +7,9 @@ #include "kiwixapp.h" #include -ContentManagerModel::ContentManagerModel(QObject *parent) +ContentManagerModel::ContentManagerModel(Downloads* downloads, QObject *parent) : QAbstractItemModel(parent) + , m_downloads(*downloads) { connect(&td, &ThumbnailDownloader::oneThumbnailDownloaded, this, &ContentManagerModel::updateImage); } diff --git a/src/contentmanagermodel.h b/src/contentmanagermodel.h index 59b6bd0..b9196af 100644 --- a/src/contentmanagermodel.h +++ b/src/contentmanagermodel.h @@ -21,8 +21,11 @@ public: // types typedef QMap BookInfo; typedef QList BookInfoList; + // BookId -> DownloadState map + typedef QMap> Downloads; + public: // functions - explicit ContentManagerModel(QObject *parent = nullptr); + ContentManagerModel(Downloads* downloads, QObject *parent = nullptr); ~ContentManagerModel(); QVariant data(const QModelIndex &index, int role) const override; @@ -63,7 +66,7 @@ private: // data ThumbnailDownloader td; QMap bookIdToRowMap; QMap iconMap; - QMap> m_downloads; + Downloads& m_downloads; }; #endif // CONTENTMANAGERMODEL_H