aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmp/metadatamanager.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/qmmp/metadatamanager.cpp b/src/qmmp/metadatamanager.cpp
index 91b5bc3b0..e86fb3db4 100644
--- a/src/qmmp/metadatamanager.cpp
+++ b/src/qmmp/metadatamanager.cpp
@@ -176,6 +176,15 @@ bool MetaDataManager::supports(const QString &fileName) const
QPixmap MetaDataManager::getCover(const QString &url)
{
+ MetaDataModel *model = createMetaDataModel(url);
+ if(model)
+ {
+ QPixmap pix = model->cover();
+ model->deleteLater();
+ if(!pix.isNull())
+ return pix;
+ }
+
if(!url.contains("://") && m_settings->useCoverFiles())
{
QString p = getCoverPath(url);
@@ -191,13 +200,7 @@ QPixmap MetaDataManager::getCover(const QString &url)
return pix;
}
}
- MetaDataModel *model = createMetaDataModel(url);
- if(model)
- {
- QPixmap pix = model->cover();
- model->deleteLater();
- return pix;
- }
+
return QPixmap();
}
@@ -217,12 +220,16 @@ QString MetaDataManager::getCoverPath(const QString &url)
}
else //local file
{
- QString p = QFileInfo(url).absolutePath();
- if(m_cover_path_cache.keys().contains(p))
- return m_cover_path_cache.value(p);
- QFileInfoList l = findCoverFiles(p, m_settings->coverSearchDepth());
- QString cover_path = l.isEmpty() ? QString() : l.at(0).filePath();
- m_cover_path_cache.insert (p, cover_path);
+ QString key = QFileInfo(url).absolutePath();
+ QString cover_path = m_cover_path_cache.value(key);
+
+ if(!cover_path.isEmpty() && QFile::exists(cover_path))
+ return cover_path;
+
+ m_cover_path_cache.remove(key); //remove invalid key
+ QFileInfoList l = findCoverFiles(key, m_settings->coverSearchDepth());
+ cover_path = l.isEmpty() ? QString() : l.at(0).filePath();
+ m_cover_path_cache.insert (key, cover_path);
return cover_path;
}
return QString();
@@ -260,6 +267,7 @@ QFileInfoList MetaDataManager::findCoverFiles(QDir dir, int depth) const
void MetaDataManager::clearCoverChache()
{
m_cover_path_cache.clear();
+ m_cached_cover = QPixmap();
}
void MetaDataManager::prepareForAnotherThread()