aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2014-01-11 11:39:35 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2014-01-11 11:39:35 +0000
commited1bb5623896afba84efd0d402ce88a76fae6355 (patch)
tree766043c2f7ec2cb3733bcc9e3f1bef6dc700d798
parentabd3ecb5901119fcb52cf716cd93fe1e3223ec42 (diff)
downloadqmmp-ed1bb5623896afba84efd0d402ce88a76fae6355.tar.gz
qmmp-ed1bb5623896afba84efd0d402ce88a76fae6355.tar.bz2
qmmp-ed1bb5623896afba84efd0d402ce88a76fae6355.zip
added cover cache
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4019 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/qmmp/metadatamanager.cpp21
-rw-r--r--src/qmmp/metadatamanager.h7
2 files changed, 20 insertions, 8 deletions
diff --git a/src/qmmp/metadatamanager.cpp b/src/qmmp/metadatamanager.cpp
index c1a0acf66..4d4309dcc 100644
--- a/src/qmmp/metadatamanager.cpp
+++ b/src/qmmp/metadatamanager.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009-2013 by Ilya Kotov *
+ * Copyright (C) 2009-2014 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -179,7 +179,16 @@ QPixmap MetaDataManager::getCover(const QString &url)
{
QString p = getCoverPath(url);
if(!p.isEmpty())
- return QPixmap(p);
+ {
+ if(m_cached_path == p)
+ return m_cached_cover;
+ QPixmap pix(p);
+ if(pix.width() > 1024 || pix.height() > 1024)
+ pix = pix.scaled(1024, 1024, Qt::KeepAspectRatio);
+ m_cached_path = p;
+ m_cached_cover = pix;
+ return pix;
+ }
}
MetaDataModel *model = createMetaDataModel(url);
if(model)
@@ -208,11 +217,11 @@ QString MetaDataManager::getCoverPath(const QString &url)
else //local file
{
QString p = QFileInfo(url).absolutePath();
- if(m_cover_cache.keys().contains(p))
- return m_cover_cache.value(p);
+ 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_cache.insert (p, cover_path);
+ m_cover_path_cache.insert (p, cover_path);
return cover_path;
}
return QString();
@@ -249,7 +258,7 @@ QFileInfoList MetaDataManager::findCoverFiles(QDir dir, int depth) const
void MetaDataManager::clearCoverChache()
{
- m_cover_cache.clear();
+ m_cover_path_cache.clear();
}
void MetaDataManager::prepareForAnotherThread()
diff --git a/src/qmmp/metadatamanager.h b/src/qmmp/metadatamanager.h
index 2620b1d4e..8fc872793 100644
--- a/src/qmmp/metadatamanager.h
+++ b/src/qmmp/metadatamanager.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009-2012 by Ilya Kotov *
+ * Copyright (C) 2009-2014 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -109,9 +109,12 @@ public:
private:
QFileInfoList findCoverFiles(QDir dir, int depth) const;
- QMap <QString, QString> m_cover_cache;
+ QMap <QString, QString> m_cover_path_cache;
+ QPixmap m_cached_cover;
+ QString m_cached_path;
QmmpSettings *m_settings;
mutable QMutex m_mutex;
+
static MetaDataManager* m_instance;
};