aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/General/notifier/popupwidget.cpp4
-rw-r--r--src/plugins/Input/mad/mpegmetadatamodel.cpp23
-rw-r--r--src/plugins/Input/mad/mpegmetadatamodel.h1
-rw-r--r--src/qmmp/decoder.cpp17
-rw-r--r--src/qmmp/decoder.h4
-rw-r--r--src/qmmp/metadatamanager.cpp41
-rw-r--r--src/qmmp/metadatamanager.h18
-rw-r--r--src/qmmp/metadatamodel.cpp5
-rw-r--r--src/qmmp/metadatamodel.h2
9 files changed, 86 insertions, 29 deletions
diff --git a/src/plugins/General/notifier/popupwidget.cpp b/src/plugins/General/notifier/popupwidget.cpp
index f2136aaf9..8bb493df0 100644
--- a/src/plugins/General/notifier/popupwidget.cpp
+++ b/src/plugins/General/notifier/popupwidget.cpp
@@ -29,7 +29,7 @@
#include <QApplication>
#include <QFont>
#include <qmmp/soundcore.h>
-#include <qmmp/decoder.h>
+#include <qmmp/metadatamanager.h>
#include "popupwidget.h"
@@ -107,7 +107,7 @@ void PopupWidget::showMetaData()
}
m_label1->setText(title);
- QPixmap pix = Decoder::findCover(core->metaData(Qmmp::URL));
+ QPixmap pix = MetaDataManager::instance()->getCover(core->metaData(Qmmp::URL));
if(!pix.isNull())
{
m_pixlabel->setFixedSize(m_coverSize,m_coverSize);
diff --git a/src/plugins/Input/mad/mpegmetadatamodel.cpp b/src/plugins/Input/mad/mpegmetadatamodel.cpp
index cdf54774c..b1ae5a130 100644
--- a/src/plugins/Input/mad/mpegmetadatamodel.cpp
+++ b/src/plugins/Input/mad/mpegmetadatamodel.cpp
@@ -31,6 +31,7 @@
#include <taglib/mpegheader.h>
#include <taglib/mpegproperties.h>
#include <taglib/textidentificationframe.h>
+#include <taglib/attachedpictureframe.h>
#include "mpegmetadatamodel.h"
@@ -108,6 +109,28 @@ QList<TagModel* > MPEGMetaDataModel::tags()
return m_tags;
}
+QPixmap MPEGMetaDataModel::cover()
+{
+ if(!m_file->ID3v2Tag())
+ return QPixmap();
+ TagLib::ID3v2::FrameList frames = m_file->ID3v2Tag()->frameListMap()["APIC"];
+ if(frames.isEmpty())
+ return QPixmap();
+
+ for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it)
+ {
+ TagLib::ID3v2::AttachedPictureFrame *frame = static_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it);
+ if(frame && frame->type() == TagLib::ID3v2::AttachedPictureFrame::FrontCover)
+ {
+ QPixmap cover;
+ cover.loadFromData((const uchar *)frame->picture().data(),
+ frame->picture().size());
+ return cover;
+ }
+ }
+ return QPixmap();
+}
+
MpegFileTagModel::MpegFileTagModel(TagLib::MPEG::File *file, TagLib::MPEG::File::TagTypes tagType)
: TagModel()
{
diff --git a/src/plugins/Input/mad/mpegmetadatamodel.h b/src/plugins/Input/mad/mpegmetadatamodel.h
index 2ed2a86f9..76d93d7f0 100644
--- a/src/plugins/Input/mad/mpegmetadatamodel.h
+++ b/src/plugins/Input/mad/mpegmetadatamodel.h
@@ -34,6 +34,7 @@ public:
~MPEGMetaDataModel();
QHash<QString, QString> audioProperties();
QList<TagModel* > tags();
+ QPixmap cover();
private:
QList<TagModel* > m_tags;
diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp
index dd0235ca8..4d9cad319 100644
--- a/src/qmmp/decoder.cpp
+++ b/src/qmmp/decoder.cpp
@@ -207,20 +207,3 @@ QList<DecoderFactory*> *Decoder::factories()
checkFactories();
return m_factories;
}
-
-QPixmap Decoder::findCover(const QString &path)
-{
- QString p = QFileInfo(path).absolutePath();
- QDir dir(p);
- dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
- dir.setSorting(QDir::Name);
- QStringList filters;
- filters << "*.jpg" << "*.png";
- QFileInfoList file_list = dir.entryInfoList(filters);
- foreach(QFileInfo i, file_list)
- {
- if(!i.absoluteFilePath().contains("back", Qt::CaseInsensitive))
- return QPixmap (i.absoluteFilePath());
- }
- return QPixmap();
-}
diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h
index af4c2d81b..e5cb647d9 100644
--- a/src/qmmp/decoder.h
+++ b/src/qmmp/decoder.h
@@ -101,10 +101,6 @@ public:
* @param factory Decoder plugin factory.
*/
static bool isEnabled(DecoderFactory* factory);
- /*!
- * Returns cover pixmap for file path \b path if cover exists, otherwise returns empty pixmap.
- */
- static QPixmap findCover(const QString &path);
protected:
/*!
diff --git a/src/qmmp/metadatamanager.cpp b/src/qmmp/metadatamanager.cpp
index 9fed9a193..1c65b817f 100644
--- a/src/qmmp/metadatamanager.cpp
+++ b/src/qmmp/metadatamanager.cpp
@@ -19,6 +19,8 @@
***************************************************************************/
#include <QFile>
+#include <QDir>
+#include <QFileInfo>
#include "decoder.h"
#include "decoderfactory.h"
#include "abstractengine.h"
@@ -77,7 +79,7 @@ MetaDataModel* MetaDataManager::createMetaDataModel(const QString &path, QObject
}
-const QStringList MetaDataManager::filters() const
+QStringList MetaDataManager::filters() const
{
QStringList filters;
foreach(DecoderFactory *fact, *m_decoderFactories)
@@ -93,7 +95,7 @@ const QStringList MetaDataManager::filters() const
return filters;
}
-const QStringList MetaDataManager::nameFilters() const
+QStringList MetaDataManager::nameFilters() const
{
QStringList filters;
foreach(DecoderFactory *fact, *m_decoderFactories)
@@ -109,7 +111,7 @@ const QStringList MetaDataManager::nameFilters() const
return filters;
}
-const QStringList MetaDataManager::protocols() const
+QStringList MetaDataManager::protocols() const
{
QStringList p;
foreach(InputSourceFactory *f, *m_inputSourceFactories)
@@ -141,6 +143,38 @@ bool MetaDataManager::supports(const QString &fileName) const
return FALSE;
}
+QPixmap MetaDataManager::getCover(const QString &fileName) const
+{
+ QString p = getCoverPath(fileName);
+ if(!p.isEmpty())
+ return QPixmap(p);
+ MetaDataModel *model = createMetaDataModel(fileName);
+ if(model)
+ {
+ QPixmap pix = model->cover();
+ model->deleteLater();
+ return pix;
+ }
+ return QPixmap();
+}
+
+QString MetaDataManager::getCoverPath(const QString &fileName) const
+{
+ QString p = QFileInfo(fileName).absolutePath();
+ QDir dir(p);
+ dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
+ dir.setSorting(QDir::Name);
+ QStringList filters;
+ filters << "*.jpg" << "*.png";
+ QFileInfoList file_list = dir.entryInfoList(filters);
+ foreach(QFileInfo i, file_list)
+ {
+ if(!i.absoluteFilePath().contains("back", Qt::CaseInsensitive))
+ return i.absoluteFilePath();
+ }
+ return QString();
+}
+
MetaDataManager *MetaDataManager::instance()
{
if(!m_instance)
@@ -153,3 +187,4 @@ void MetaDataManager::destroy()
if(m_instance)
delete m_instance;
}
+
diff --git a/src/qmmp/metadatamanager.h b/src/qmmp/metadatamanager.h
index ee0be9912..4bdca20a7 100644
--- a/src/qmmp/metadatamanager.h
+++ b/src/qmmp/metadatamanager.h
@@ -23,6 +23,7 @@
#include <QList>
#include <QStringList>
+#include <QPixmap>
#include "fileinfo.h"
#include "metadatamodel.h"
@@ -54,20 +55,31 @@ public:
/*!
* Returns a list of file name filters with description, i.e. "MPEG Files (*.mp3 *.mpg)"
*/
- const QStringList filters() const;
+ QStringList filters() const;
/*!
* Returns a list of file name filters, i.e. "*.mp3 *.mpg"
*/
- const QStringList nameFilters() const;
+ QStringList nameFilters() const;
/*!
* Returns a list of the suported protocols
*/
- const QStringList protocols() const;
+ QStringList protocols() const;
/*!
* Returns \b true if \b file is supported and exists, otherwise returns \b false
*/
bool supports(const QString &file) const;
/*!
+ * Returns cover pixmap for the given file \b fileName,
+ * or returns an empty pixmap if cover is not available.
+ */
+ QPixmap getCover(const QString &fileName) const;
+ /*!
+ * Returns cover file path for the given file \b fileName, or returns
+ * an empty string if cover file is not available. This function does not work
+ * with embedded covers.
+ */
+ QString getCoverPath(const QString &fileName) const;
+ /*!
* Returns a pointer to the MetaDataManager instance.
*/
static MetaDataManager* instance();
diff --git a/src/qmmp/metadatamodel.cpp b/src/qmmp/metadatamodel.cpp
index 42d8fdd4a..d33ca59d5 100644
--- a/src/qmmp/metadatamodel.cpp
+++ b/src/qmmp/metadatamodel.cpp
@@ -43,3 +43,8 @@ QList<TagModel* > MetaDataModel::tags()
{
return QList<TagModel* > ();
}
+
+QPixmap MetaDataModel::cover()
+{
+ return QPixmap();
+}
diff --git a/src/qmmp/metadatamodel.h b/src/qmmp/metadatamodel.h
index 09b6d8998..c07375f55 100644
--- a/src/qmmp/metadatamodel.h
+++ b/src/qmmp/metadatamodel.h
@@ -25,6 +25,7 @@
#include <QList>
#include <QString>
#include <QObject>
+#include <QPixmap>
#include "tagmodel.h"
class MetaDataModel : public QObject
@@ -36,6 +37,7 @@ public:
virtual QHash<QString, QString> audioProperties();
virtual QHash<QString, QString> descriptions();
virtual QList<TagModel* > tags();
+ virtual QPixmap cover();
};
#endif // METADATAMODEL_H