From 997de852100372a2d1b1f1fb9219f5a70a8d98c0 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 24 Sep 2018 18:19:12 +0000 Subject: fixed taglib 1.10 support git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8374 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/flac/flacmetadatamodel.cpp | 26 ++++++++++++++++++ src/plugins/Input/flac/flacmetadatamodel.h | 6 +++++ src/plugins/Input/opus/opusmetadatamodel.cpp | 22 +++++++++++++++ src/plugins/Input/opus/opusmetadatamodel.h | 6 +++++ src/plugins/Input/vorbis/vorbismetadatamodel.cpp | 34 +++++++++++++++--------- src/plugins/Input/vorbis/vorbismetadatamodel.h | 6 +++++ 6 files changed, 88 insertions(+), 12 deletions(-) (limited to 'src') 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 #include #include +#ifndef IS_COVER_EDITABLE +#include +#endif #include #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 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 #include +#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 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 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 #include +#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 extraProperties() const; QList 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 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 #include +#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 tags() const; QPixmap cover() const; +#ifdef IS_COVER_EDITABLE void setCover(const QPixmap &pix); void removeCover(); +#endif private: QString m_path; -- cgit v1.2.3-13-gbd6f