diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-04-28 06:28:45 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-04-28 06:28:45 +0000 |
| commit | 4190ca4efebe1bce32400cadbaf728c98178b00a (patch) | |
| tree | de9fe4609551edad818773f798ee9d33362dc0de /src | |
| parent | 7ce39a16d12257b74dc205112901b24bda585185 (diff) | |
| download | qmmp-4190ca4efebe1bce32400cadbaf728c98178b00a.tar.gz qmmp-4190ca4efebe1bce32400cadbaf728c98178b00a.tar.bz2 qmmp-4190ca4efebe1bce32400cadbaf728c98178b00a.zip | |
opus: improved metadata model
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6275 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/opus/opusmetadatamodel.cpp | 62 | ||||
| -rw-r--r-- | src/plugins/Input/opus/opusmetadatamodel.h | 5 |
2 files changed, 31 insertions, 36 deletions
diff --git a/src/plugins/Input/opus/opusmetadatamodel.cpp b/src/plugins/Input/opus/opusmetadatamodel.cpp index 9e1f82a12..74fdd4a1d 100644 --- a/src/plugins/Input/opus/opusmetadatamodel.cpp +++ b/src/plugins/Input/opus/opusmetadatamodel.cpp @@ -19,9 +19,6 @@ ***************************************************************************/ #include <taglib/tag.h> -#include <taglib/fileref.h> -#include "opusfile.h" -#include <taglib/xiphcomment.h> #include <taglib/tmap.h> #include "opusmetadatamodel.h" @@ -31,28 +28,34 @@ OpusMetaDataModel::OpusMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) { m_path = path; - m_tags << new VorbisCommentModel(path); + m_file = new TagLib::Ogg::Opus::File(QStringToFileName(m_path)); + m_tags << new VorbisCommentModel(m_file); } OpusMetaDataModel::~OpusMetaDataModel() { while(!m_tags.isEmpty()) delete m_tags.takeFirst(); + if(m_file) + { + delete m_file; + m_file = 0; + } } QHash<QString, QString> OpusMetaDataModel::audioProperties() { QHash<QString, QString> ap; TagLib::Ogg::Opus::File f (QStringToFileName(m_path)); - if(f.audioProperties()) + if(m_file && m_file->isValid()) { - QString text = QString("%1").arg(f.audioProperties()->length()/60); - text +=":"+QString("%1").arg(f.audioProperties()->length()%60,2,10,QChar('0')); + QString text = QString("%1").arg(m_file->audioProperties()->length()/60); + text +=":"+QString("%1").arg(m_file->audioProperties()->length()%60,2,10,QChar('0')); ap.insert(tr("Length"), text); - ap.insert(tr("Sample rate"), QString("%1 " + tr("Hz")).arg(f.audioProperties()->sampleRate())); - ap.insert(tr("Channels"), QString("%1").arg(f.audioProperties()->channels())); - ap.insert(tr("Bitrate"), QString("%1 " + tr("kbps")).arg(f.audioProperties()->bitrate())); - ap.insert(tr("File size"), QString("%1 "+tr("KB")).arg(f.length()/1024)); + ap.insert(tr("Sample rate"), QString("%1 " + tr("Hz")).arg(m_file->audioProperties()->sampleRate())); + ap.insert(tr("Channels"), QString("%1").arg(m_file->audioProperties()->channels())); + ap.insert(tr("Bitrate"), QString("%1 " + tr("kbps")).arg(m_file->audioProperties()->bitrate())); + ap.insert(tr("File size"), QString("%1 "+tr("KB")).arg(m_file->length()/1024)); } return ap; } @@ -64,8 +67,10 @@ QList<TagModel* > OpusMetaDataModel::tags() QPixmap OpusMetaDataModel::cover() { - TagLib::Ogg::Opus::File file(QStringToFileName(m_path)); - TagLib::Ogg::XiphComment *tag = file.tag(); + if(!m_file || !m_file->isValid()) + return QPixmap(); + + TagLib::Ogg::XiphComment *tag = m_file->tag(); if(!tag) return QPixmap(); TagLib::StringList list = tag->fieldListMap()["METADATA_BLOCK_PICTURE"]; @@ -109,16 +114,14 @@ ulong OpusMetaDataModel::readPictureBlockField(QByteArray data, int offset) } -VorbisCommentModel::VorbisCommentModel(const QString &path) : TagModel(TagModel::Save) +VorbisCommentModel::VorbisCommentModel(TagLib::Ogg::Opus::File *file) : TagModel(TagModel::Save) { - m_file = new TagLib::Ogg::Opus::File (QStringToFileName(path)); - m_tag = m_file->tag(); + m_file = file; + m_tag = file->tag(); } VorbisCommentModel::~VorbisCommentModel() -{ - delete m_file; -} +{} const QString VorbisCommentModel::name() { @@ -135,13 +138,13 @@ const QString VorbisCommentModel::value(Qmmp::MetaData key) return TStringToQString_qt4(m_tag->title()); case Qmmp::ARTIST: return TStringToQString_qt4(m_tag->artist()); - case Qmmp::ALBUM: - return TStringToQString_qt4(m_tag->album()); case Qmmp::ALBUMARTIST: if(m_tag->fieldListMap()["ALBUMARTIST"].isEmpty()) return QString(); else return TStringToQString_qt4(m_tag->fieldListMap()["ALBUMARTIST"].front()); + case Qmmp::ALBUM: + return TStringToQString_qt4(m_tag->album()); case Qmmp::COMMENT: return TStringToQString_qt4(m_tag->comment()); case Qmmp::GENRE: @@ -179,12 +182,12 @@ void VorbisCommentModel::setValue(Qmmp::MetaData key, const QString &value) case Qmmp::ARTIST: m_tag->setArtist(str); return; - case Qmmp::ALBUM: - m_tag->setAlbum(str); - return; case Qmmp::ALBUMARTIST: m_tag->addField("ALBUMARTIST", str, true); return; + case Qmmp::ALBUM: + m_tag->setAlbum(str); + return; case Qmmp::COMMENT: m_tag->setComment(str); return; @@ -209,15 +212,6 @@ void VorbisCommentModel::setValue(Qmmp::MetaData key, const QString &value) void VorbisCommentModel::save() { - if(m_tag) + if(m_file) m_file->save(); - //taglib bug workarround -#ifdef Q_OS_WIN - QString path = QString::fromStdWString(m_file->name().wstr()); -#else - QString path = QString::fromLocal8Bit(m_file->name()); -#endif - delete m_file; - m_file = new TagLib::Ogg::Opus::File(QStringToFileName(path)); - m_tag = m_file->tag(); } diff --git a/src/plugins/Input/opus/opusmetadatamodel.h b/src/plugins/Input/opus/opusmetadatamodel.h index e6253122f..a557e1ce6 100644 --- a/src/plugins/Input/opus/opusmetadatamodel.h +++ b/src/plugins/Input/opus/opusmetadatamodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013 by Ilya Kotov * + * Copyright (C) 2013-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -38,13 +38,14 @@ public: private: QString m_path; QList<TagModel* > m_tags; + TagLib::Ogg::Opus::File *m_file; ulong readPictureBlockField(QByteArray data, int offset); }; class VorbisCommentModel : public TagModel { public: - VorbisCommentModel(const QString &path); + VorbisCommentModel(TagLib::Ogg::Opus::File *file); ~VorbisCommentModel(); const QString name(); const QString value(Qmmp::MetaData key); |
