ContentManager::refreshIcons() works off RowNode data

This enables the following changes (to be done next):

1. move the thumbnail download initiation into the data access operation.
2. get rid of ContentManagerModel::refreshIcons()
3. get rid of ContentManagerModel::m_data
This commit is contained in:
Veloman Yunkan 2024-02-20 17:27:10 +04:00
parent f68ae6d2f8
commit 6a1fc8a78e
2 changed files with 11 additions and 6 deletions

View File

@ -175,12 +175,12 @@ void ContentManagerModel::refreshIcons()
return; return;
td.clearQueue(); td.clearQueue();
for (auto i = 0; i < rowCount() && i < m_data.size(); i++) { for (auto i = 0; i < rowCount() && i < m_data.size(); i++) {
const auto& bookItem = m_data[i]; auto& rowNode = *getRowNode(i);
const QVariant favicon = bookItem["favicon"]; const QVariant favicon = rowNode.data(0);
if ( favicon.type() == QVariant::String ) { if ( favicon.type() == QVariant::String ) {
const auto faviconUrl = favicon.toString(); const auto faviconUrl = favicon.toString();
if (faviconUrl != "" && !m_iconMap.contains(faviconUrl)) { if (faviconUrl != "" && !m_iconMap.contains(faviconUrl)) {
td.addDownload(faviconUrl, bookItem["id"].toString()); td.addDownload(faviconUrl, rowNode.getBookId());
} }
} }
} }
@ -235,6 +235,11 @@ void ContentManagerModel::sort(int column, Qt::SortOrder order)
KiwixApp::instance()->getContentManager()->setSortBy(sortBy, order == Qt::AscendingOrder); KiwixApp::instance()->getContentManager()->setSortBy(sortBy, order == Qt::AscendingOrder);
} }
RowNode* ContentManagerModel::getRowNode(size_t row)
{
return static_cast<RowNode*>(rootNode->child(row).get());
}
void ContentManagerModel::updateImage(QString bookId, QString url, QByteArray imageData) void ContentManagerModel::updateImage(QString bookId, QString url, QByteArray imageData)
{ {
const auto it = bookIdToRowMap.constFind(bookId); const auto it = bookIdToRowMap.constFind(bookId);
@ -242,7 +247,7 @@ void ContentManagerModel::updateImage(QString bookId, QString url, QByteArray im
return; return;
const size_t row = it.value(); const size_t row = it.value();
const auto item = static_cast<RowNode*>(rootNode->child(row).get()); const auto item = getRowNode(row);
item->setIconData(imageData); item->setIconData(imageData);
m_iconMap[url] = imageData; m_iconMap[url] = imageData;
const QModelIndex index = this->index(row, 0); const QModelIndex index = this->index(row, 0);
@ -278,8 +283,7 @@ void ContentManagerModel::removeDownload(QString bookId)
return; return;
const size_t row = it.value(); const size_t row = it.value();
auto& node = static_cast<RowNode&>(*rootNode->child(row)); getRowNode(row)->setDownloadState(nullptr);
node.setDownloadState(nullptr);
const QModelIndex index = this->index(row, 5); const QModelIndex index = this->index(row, 5);
emit dataChanged(index, index); emit dataChanged(index, index);
} }

View File

@ -60,6 +60,7 @@ private: // functions
// Returns either data of the thumbnail (as a QByteArray) or a URL (as a // Returns either data of the thumbnail (as a QByteArray) or a URL (as a
// QString) from where the actual data can be obtained. // QString) from where the actual data can be obtained.
QVariant getThumbnail(const BookInfo& bookItem) const; QVariant getThumbnail(const BookInfo& bookItem) const;
RowNode* getRowNode(size_t row);
private: // data private: // data
BookInfoList m_data; BookInfoList m_data;