From c042532a8cf3a481f1a4348de035f7e7c9bcdb45 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Fri, 1 Mar 2024 19:36:03 +0400 Subject: [PATCH] ContentManagerModel::Downloads became a class ... only one small step away from being thread-safe --- src/contentmanager.cpp | 2 +- src/contentmanagermodel.h | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 2a9ed7b..18f2c01 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -543,7 +543,7 @@ void ContentManager::downloadBook(const QString &id, QModelIndex index) downloadBook(id); auto node = getSharedPointer(static_cast(index.internalPointer())); const auto newDownload = std::make_shared(); - m_downloads[id] = newDownload; + m_downloads.set(id, newDownload); node->setDownloadState(newDownload); } catch ( const ContentManagerError& err ) diff --git a/src/contentmanagermodel.h b/src/contentmanagermodel.h index b1ed927..49b7630 100644 --- a/src/contentmanagermodel.h +++ b/src/contentmanagermodel.h @@ -22,7 +22,33 @@ public: // types typedef QList BookInfoList; // BookId -> DownloadState map - typedef QMap> Downloads; + class Downloads + { + private: + typedef std::shared_ptr DownloadStatePtr; + typedef QMap ImplType; + + public: + void set(const QString& id, DownloadStatePtr d) { + impl[id] = d; + } + + DownloadStatePtr value(const QString& id) const { + return impl.value(id); + } + + QList keys() const { + return impl.keys(); + } + + void remove(const QString& id) { + impl.remove(id); + } + + private: + ImplType impl; + }; + public: // functions explicit ContentManagerModel(QObject *parent = nullptr);