aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Input/flac/flacmetadatamodel.cpp26
-rw-r--r--src/plugins/Input/flac/flacmetadatamodel.h6
-rw-r--r--src/plugins/Input/opus/opusmetadatamodel.cpp22
-rw-r--r--src/plugins/Input/opus/opusmetadatamodel.h6
-rw-r--r--src/plugins/Input/vorbis/vorbismetadatamodel.cpp34
-rw-r--r--src/plugins/Input/vorbis/vorbismetadatamodel.h6
6 files changed, 88 insertions, 12 deletions
diff --git a/src/plugins/Input/flac/flacmetadatamodel.cpp b/src/plugins/Input/flac/flacmetadatamodel.cpp
index 622e8a661..54c15b006 100644
--- a/src/plugins/Input/flac/flacmetadatamodel.cpp
+++ b/src/plugins/Input/flac/flacmetadatamodel.cpp
@@ -25,11 +25,18 @@
#include <taglib/tmap.h>
#include <taglib/id3v2framefactory.h>
#include <taglib/flacpicture.h>
+#ifndef IS_COVER_EDITABLE
+#include <FLAC/all.h>
+#endif
#include <qmmp/metadatamanager.h>
#include "flacmetadatamodel.h"
FLACMetaDataModel::FLACMetaDataModel(const QString &path, bool readOnly)
+#ifdef IS_COVER_EDITABLE
: MetaDataModel(true, MetaDataModel::IS_COVER_EDITABLE)
+#else
+ : MetaDataModel(true)
+#endif
{
m_file = 0;
m_stream = 0;
@@ -87,6 +94,7 @@ QList<TagModel* > FLACMetaDataModel::tags() const
QPixmap FLACMetaDataModel::cover() const
{
+#ifdef IS_COVER_EDITABLE
if(!m_tag || m_tag->isEmpty())
return QPixmap();
@@ -101,6 +109,22 @@ QPixmap FLACMetaDataModel::cover() const
}
}
return QPixmap();
+#else
+ //embedded cover
+ QPixmap cover;
+ FLAC__StreamMetadata *metadata;
+ FLAC__metadata_get_picture (qPrintable(m_path),
+ &metadata,
+ FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER,
+ 0,0, -1,-1,-1,-1);
+ if(metadata)
+ {
+ FLAC__StreamMetadata_Picture *pict = &metadata->data.picture;
+ cover.loadFromData(QByteArray((char *)pict->data, (int) pict->data_length));
+ FLAC__metadata_object_delete(metadata);
+ }
+ return cover;
+#endif
}
QString FLACMetaDataModel::coverPath() const
@@ -108,6 +132,7 @@ QString FLACMetaDataModel::coverPath() const
return MetaDataManager::instance()->findCoverFile(m_path);
}
+#ifdef IS_COVER_EDITABLE
void FLACMetaDataModel::setCover(const QPixmap &pix)
{
removeCover();
@@ -147,6 +172,7 @@ void FLACMetaDataModel::removeCover()
}
}
}
+#endif
VorbisCommentModel::VorbisCommentModel(TagLib::Ogg::XiphComment *tag, TagLib::File *file) : TagModel(TagModel::Save)
{
diff --git a/src/plugins/Input/flac/flacmetadatamodel.h b/src/plugins/Input/flac/flacmetadatamodel.h
index a9d47cf8b..09270d436 100644
--- a/src/plugins/Input/flac/flacmetadatamodel.h
+++ b/src/plugins/Input/flac/flacmetadatamodel.h
@@ -27,6 +27,10 @@
#include <taglib/tfilestream.h>
#include <qmmp/metadatamodel.h>
+#if (TAGLIB_MAJOR_VERSION > 1) || ((TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION >= 11))
+#define IS_COVER_EDITABLE
+#endif
+
class FLACMetaDataModel : public MetaDataModel
{
public:
@@ -35,8 +39,10 @@ public:
QList<TagModel* > tags() const;
QPixmap cover() const;
QString coverPath() const;
+#ifdef IS_COVER_EDITABLE
void setCover(const QPixmap &pix);
void removeCover();
+#endif
private:
diff --git a/src/plugins/Input/opus/opusmetadatamodel.cpp b/src/plugins/Input/opus/opusmetadatamodel.cpp
index cc6bd4dfd..56edfb9da 100644
--- a/src/plugins/Input/opus/opusmetadatamodel.cpp
+++ b/src/plugins/Input/opus/opusmetadatamodel.cpp
@@ -29,7 +29,11 @@
#include "opusmetadatamodel.h"
OpusMetaDataModel::OpusMetaDataModel(const QString &path, bool readOnly)
+#ifdef IS_COVER_EDITABLE
: MetaDataModel(readOnly, MetaDataModel::IS_COVER_EDITABLE)
+#else
+ : MetaDataModel(readOnly)
+#endif
{
m_path = path;
m_stream = new TagLib::FileStream(QStringToFileName(path), readOnly);
@@ -71,6 +75,7 @@ QPixmap OpusMetaDataModel::cover() const
if(!tag || tag->isEmpty())
return QPixmap();
+#ifdef IS_COVER_EDITABLE
TagLib::List<TagLib::FLAC::Picture *> list = tag->pictureList();
for(uint i = 0; i < list.size(); ++i)
{
@@ -81,9 +86,25 @@ QPixmap OpusMetaDataModel::cover() const
return cover;
}
}
+#else
+ TagLib::StringList list = tag->fieldListMap()["METADATA_BLOCK_PICTURE"];
+ if(list.isEmpty())
+ return QPixmap();
+ for(uint i = 0; i < list.size(); ++i)
+ {
+ TagLib::FLAC::Picture pict;
+ TagLib::String value = list[i];
+ QByteArray block = QByteArray::fromBase64(TStringToQString(value).toLatin1());
+ pict.parse(TagLib::ByteVector(block.constData(), block.size()));
+ QPixmap cover;
+ cover.loadFromData(QByteArray(pict.data().data(), pict.data().size())); //read binary picture data
+ return cover;
+ }
+#endif
return QPixmap();
}
+#ifdef IS_COVER_EDITABLE
void OpusMetaDataModel::setCover(const QPixmap &pix)
{
removeCover();
@@ -125,6 +146,7 @@ void OpusMetaDataModel::removeCover()
}
}
}
+#endif
VorbisCommentModel::VorbisCommentModel(TagLib::Ogg::Opus::File *file) : TagModel(TagModel::Save)
{
diff --git a/src/plugins/Input/opus/opusmetadatamodel.h b/src/plugins/Input/opus/opusmetadatamodel.h
index ea96abad0..fc0cfa705 100644
--- a/src/plugins/Input/opus/opusmetadatamodel.h
+++ b/src/plugins/Input/opus/opusmetadatamodel.h
@@ -26,6 +26,10 @@
#include <taglib/tfilestream.h>
#include <qmmp/metadatamodel.h>
+#if (TAGLIB_MAJOR_VERSION > 1) || ((TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION >= 11))
+#define IS_COVER_EDITABLE
+#endif
+
class OpusMetaDataModel : public MetaDataModel
{
Q_DECLARE_TR_FUNCTIONS(OpusMetaDataModel)
@@ -35,8 +39,10 @@ public:
QList<MetaDataItem> extraProperties() const;
QList<TagModel* > tags() const;
QPixmap cover() const;
+#ifdef IS_COVER_EDITABLE
void setCover(const QPixmap &pix);
void removeCover();
+#endif
private:
QString m_path;
diff --git a/src/plugins/Input/vorbis/vorbismetadatamodel.cpp b/src/plugins/Input/vorbis/vorbismetadatamodel.cpp
index 8c9305beb..79334d157 100644
--- a/src/plugins/Input/vorbis/vorbismetadatamodel.cpp
+++ b/src/plugins/Input/vorbis/vorbismetadatamodel.cpp
@@ -29,7 +29,11 @@
#include "vorbismetadatamodel.h"
VorbisMetaDataModel::VorbisMetaDataModel(const QString &path, bool readOnly)
+#ifdef IS_COVER_EDITABLE
: MetaDataModel(readOnly, MetaDataModel::IS_COVER_EDITABLE)
+#else
+ : MetaDataModel(readOnly)
+#endif
{
m_path = path;
m_stream = new TagLib::FileStream(QStringToFileName(path), readOnly);
@@ -57,6 +61,7 @@ QPixmap VorbisMetaDataModel::cover() const
if(!m_tag || m_tag->isEmpty())
return QPixmap();
+#ifdef IS_COVER_EDITABLE
TagLib::List<TagLib::FLAC::Picture *> list = m_tag->pictureList();
for(uint i = 0; i < list.size(); ++i)
{
@@ -67,10 +72,26 @@ QPixmap VorbisMetaDataModel::cover() const
return cover;
}
}
+#else
+ TagLib::StringList list = m_tag->fieldListMap()["METADATA_BLOCK_PICTURE"];
+ if(list.isEmpty())
+ return QPixmap();
+ for(uint i = 0; i < list.size(); ++i)
+ {
+ TagLib::FLAC::Picture pict;
+ TagLib::String value = list[i];
+ QByteArray block = QByteArray::fromBase64(TStringToQString(value).toLatin1());
+ pict.parse(TagLib::ByteVector(block.constData(), block.size()));
+ QPixmap cover;
+ cover.loadFromData(QByteArray(pict.data().data(), pict.data().size())); //read binary picture data
+ return cover;
+ }
+#endif
return QPixmap();
}
+#ifdef IS_COVER_EDITABLE
void VorbisMetaDataModel::setCover(const QPixmap &pix)
{
removeCover();
@@ -87,12 +108,6 @@ void VorbisMetaDataModel::setCover(const QPixmap &pix)
picture->setData(TagLib::ByteVector(data.constData(), data.size()));
m_tag->addPicture(picture);
m_file->save();
-#if ((TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION <= 10))
- //taglib bug workarround
- delete m_file;
- m_file = new TagLib::Ogg::Vorbis::File(QStringToFileName(m_path));
- m_tag = m_file->tag();
-#endif
}
}
@@ -113,15 +128,10 @@ void VorbisMetaDataModel::removeCover()
if(save)
{
m_file->save();
-#if ((TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION <= 10))
- //taglib bug workarround
- delete m_file;
- m_file = new TagLib::Ogg::Vorbis::File(QStringToFileName(m_path));
- m_tag = m_file->tag();
-#endif
}
}
}
+#endif
VorbisCommentModel::VorbisCommentModel(VorbisMetaDataModel *model) : TagModel(TagModel::Save)
{
diff --git a/src/plugins/Input/vorbis/vorbismetadatamodel.h b/src/plugins/Input/vorbis/vorbismetadatamodel.h
index a2a6a3a59..e2636a514 100644
--- a/src/plugins/Input/vorbis/vorbismetadatamodel.h
+++ b/src/plugins/Input/vorbis/vorbismetadatamodel.h
@@ -27,6 +27,10 @@
#include <taglib/tfilestream.h>
#include <taglib/tfilestream.h>
+#if (TAGLIB_MAJOR_VERSION > 1) || ((TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION >= 11))
+#define IS_COVER_EDITABLE
+#endif
+
class VorbisCommentModel;
class VorbisMetaDataModel : public MetaDataModel
@@ -38,8 +42,10 @@ public:
QList<TagModel* > tags() const;
QPixmap cover() const;
+#ifdef IS_COVER_EDITABLE
void setCover(const QPixmap &pix);
void removeCover();
+#endif
private:
QString m_path;