Only keep the last 20 cover images
This commit is contained in:
parent
66a45f7578
commit
94c77deb40
|
@ -24,7 +24,8 @@ SongDescription::SongDescription(const QString &songId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
map<QString, QByteArray> QueryResultsModel::m_coverData = map<QString, QByteArray>();
|
std::list<QString> QueryResultsModel::s_coverNames = std::list<QString>();
|
||||||
|
map<QString, QByteArray> QueryResultsModel::s_coverData = map<QString, QByteArray>();
|
||||||
|
|
||||||
QueryResultsModel::QueryResultsModel(QObject *parent)
|
QueryResultsModel::QueryResultsModel(QObject *parent)
|
||||||
: QAbstractTableModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
|
@ -369,7 +370,23 @@ void HttpResultsModel::parseCoverResults(const QString &albumId, int row, const
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!data.isEmpty()) {
|
if (!data.isEmpty()) {
|
||||||
m_coverData[albumId] = data;
|
// cache the fetched cover
|
||||||
|
const auto currentCachedCoverCount = s_coverData.size();
|
||||||
|
s_coverData[albumId] = data;
|
||||||
|
if (s_coverData.size() > currentCachedCoverCount) {
|
||||||
|
s_coverNames.emplace_back(albumId);
|
||||||
|
|
||||||
|
// keep only the last 20 cover images around
|
||||||
|
while (s_coverNames.size() > 20) {
|
||||||
|
s_coverData.erase(s_coverNames.front());
|
||||||
|
s_coverNames.pop_front();
|
||||||
|
}
|
||||||
|
} else if (s_coverNames.back() != albumId) {
|
||||||
|
s_coverNames.remove(albumId);
|
||||||
|
s_coverNames.emplace_back(albumId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the cover to the results
|
||||||
m_results[row].cover = data;
|
m_results[row].cover = data;
|
||||||
emit coverAvailable(index(row, 0));
|
emit coverAvailable(index(row, 0));
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,8 @@ protected:
|
||||||
QStringList m_errorList;
|
QStringList m_errorList;
|
||||||
bool m_resultsAvailable;
|
bool m_resultsAvailable;
|
||||||
bool m_fetchingCover;
|
bool m_fetchingCover;
|
||||||
static std::map<QString, QByteArray> m_coverData;
|
static std::list<QString> s_coverNames;
|
||||||
|
static std::map<QString, QByteArray> s_coverData;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline const QList<SongDescription> &QueryResultsModel::results() const
|
inline const QList<SongDescription> &QueryResultsModel::results() const
|
||||||
|
|
|
@ -54,8 +54,8 @@ bool LyricsWikiaResultsModel::fetchCover(const QModelIndex &index)
|
||||||
}
|
}
|
||||||
|
|
||||||
// skip if the item belongs to an album which cover has already been fetched
|
// skip if the item belongs to an album which cover has already been fetched
|
||||||
const auto coverData = m_coverData.find(desc.albumId);
|
const auto coverData = s_coverData.find(desc.albumId);
|
||||||
if (coverData != m_coverData.end()) {
|
if (coverData != s_coverData.end()) {
|
||||||
desc.cover = coverData->second;
|
desc.cover = coverData->second;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,8 +59,8 @@ bool MusicBrainzResultsModel::fetchCover(const QModelIndex &index)
|
||||||
}
|
}
|
||||||
|
|
||||||
// skip if the item belongs to an album which cover has already been fetched
|
// skip if the item belongs to an album which cover has already been fetched
|
||||||
const auto coverData = m_coverData.find(desc.albumId);
|
const auto coverData = s_coverData.find(desc.albumId);
|
||||||
if (coverData != m_coverData.end()) {
|
if (coverData != s_coverData.end()) {
|
||||||
desc.cover = coverData->second;
|
desc.cover = coverData->second;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue