diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-08-08 10:13:21 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-08-08 10:13:21 +0000 |
| commit | 12746dbfb28759b831aaf02e5b542cfa55be3fb5 (patch) | |
| tree | dac95f36328f136b09cf64d87eadd2b336dcbafb /src | |
| parent | 31b71619fe8e73ad571c710a3b0b874540fccef0 (diff) | |
| download | qmmp-12746dbfb28759b831aaf02e5b542cfa55be3fb5.tar.gz qmmp-12746dbfb28759b831aaf02e5b542cfa55be3fb5.tar.bz2 qmmp-12746dbfb28759b831aaf02e5b542cfa55be3fb5.zip | |
mpeg plugin: added support for comment and disc number tags
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1120 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/mad/decodermadfactory.cpp | 17 | ||||
| -rw-r--r-- | src/plugins/Input/mad/detailsdialog.cpp | 54 | ||||
| -rw-r--r-- | src/plugins/Input/mad/tagextractor.cpp | 11 |
3 files changed, 77 insertions, 5 deletions
diff --git a/src/plugins/Input/mad/decodermadfactory.cpp b/src/plugins/Input/mad/decodermadfactory.cpp index 2574cd028..fd45987c7 100644 --- a/src/plugins/Input/mad/decodermadfactory.cpp +++ b/src/plugins/Input/mad/decodermadfactory.cpp @@ -99,7 +99,6 @@ Decoder *DecoderMADFactory::create(QObject *parent, QIODevice *input, Output *ou return new DecoderMAD(parent, this, input, output); } -//FileInfo *DecoderMADFactory::createFileInfo(const QString &source) QList<FileInfo *> DecoderMADFactory::createPlayList(const QString &fileName, bool useMetaData) { FileInfo *info = new FileInfo(fileName); @@ -183,6 +182,22 @@ QList<FileInfo *> DecoderMADFactory::createPlayList(const QString &fileName, boo tag->year()); info->setMetaData(Qmmp::TRACK, tag->track()); + + if(tag == fileRef.ID3v2Tag()) + { + if(!fileRef.ID3v2Tag()->frameListMap()["TCOM"].isEmpty()) + { + TagLib::String composer; + composer = fileRef.ID3v2Tag()->frameListMap()["TCOM"].front()->toString(); + info->setMetaData(Qmmp::COMPOSER, + codec->toUnicode(composer.toCString(utf)).trimmed()); + } + if(!fileRef.ID3v2Tag()->frameListMap()["TPOS"].isEmpty()) + { + TagLib::String disc = fileRef.ID3v2Tag()->frameListMap()["TPOS"].front()->toString(); + info->setMetaData(Qmmp::DISCNUMBER, QString(disc.toCString()).trimmed()); + } + } } } if (fileRef.audioProperties()) diff --git a/src/plugins/Input/mad/detailsdialog.cpp b/src/plugins/Input/mad/detailsdialog.cpp index d215969ce..add050bed 100644 --- a/src/plugins/Input/mad/detailsdialog.cpp +++ b/src/plugins/Input/mad/detailsdialog.cpp @@ -32,6 +32,7 @@ #include <taglib/mpegfile.h> #include <taglib/mpegheader.h> #include <taglib/mpegproperties.h> +#include <taglib/textidentificationframe.h> #include <qmmp/qmmp.h> @@ -52,10 +53,10 @@ DetailsDialog::DetailsDialog(QWidget *parent, const QString &path) QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("MAD"); m_codec_v1 = - QTextCodec::codecForName(settings.value("ID3v1_encoding", "ISO-8859-1" ) + QTextCodec::codecForName(settings.value("ID3v1_encoding", "ISO-8859-1") .toByteArray ()); m_codec_v2 = - QTextCodec::codecForName(settings.value("ID3v2_encoding","UTF-8" ) + QTextCodec::codecForName(settings.value("ID3v2_encoding","UTF-8") .toByteArray ()); if (!m_codec_v1) m_codec_v1 = QTextCodec::codecForName ("ISO-8859-1"); @@ -152,6 +153,7 @@ void DetailsDialog::loadTag() TagLib::MPEG::File f (m_path.toLocal8Bit().constData()); QTextCodec *codec = QTextCodec::codecForName ("UTF-8"); TagLib::Tag *tag = 0; + TagLib::ID3v2::FrameListMap flm; if (selectedTag() == TagLib::MPEG::File::ID3v1) { @@ -164,6 +166,8 @@ void DetailsDialog::loadTag() tag = f.ID3v2Tag(); codec = m_codec_v2; ui.tagGroupBox->setTitle(tr("ID3v2 Tag")); + if(tag) + flm = f.ID3v2Tag()->frameListMap(); } else if (selectedTag() == TagLib::MPEG::File::APE) { @@ -180,8 +184,10 @@ void DetailsDialog::loadTag() ui.albumLineEdit->clear(); ui.commentBrowser->clear(); ui.yearSpinBox->clear(); - ui.trackSpinBox->clear(); + ui.trackSpinBox->setValue(0); ui.genreLineEdit->clear(); + ui.composerLineEdit->clear(); + ui.discSpinBox->setValue(0); if (tag) { @@ -205,6 +211,19 @@ void DetailsDialog::loadTag() ui.trackSpinBox->setValue(tag->track()); string = codec->toUnicode(genre.toCString(utf)).trimmed(); ui.genreLineEdit->setText(string); + if(selectedTag() == TagLib::MPEG::File::ID3v2) + { + if(!flm["TCOM"].isEmpty()) + { + string = codec->toUnicode(flm["TCOM"].front()->toString().toCString(utf)).trimmed(); + ui.composerLineEdit->setText(string); + } + if(!flm["TPOS"].isEmpty()) + { + string = QString(flm["TPOS"].front()->toString().toCString(utf)).trimmed(); + ui.discSpinBox->setValue(string.toInt()); + } + } } } @@ -247,6 +266,35 @@ void DetailsDialog::save() f->setID3v2FrameFactory(factory); type = TagLib::String::UTF8; } + //set composer tag + TagLib::String composer = + TagLib::String(codec->fromUnicode(ui.composerLineEdit->text()).constData(), type); + TagLib::ID3v2::Tag *id3v2_tag = dynamic_cast<TagLib::ID3v2::Tag *>(tag); + if(ui.composerLineEdit->text().isEmpty()) + id3v2_tag->removeFrames("TCOM"); + else if(!id3v2_tag->frameListMap()["TCOM"].isEmpty()) + id3v2_tag->frameListMap()["TCOM"].front()->setText(composer); + else + { + TagLib::ID3v2::TextIdentificationFrame *frame; + frame = new TagLib::ID3v2::TextIdentificationFrame("TCOM", TagLib::String::Latin1); + frame->setText(composer); + id3v2_tag->addFrame(frame); + } + //set disc number + TagLib::String discnumber = + TagLib::String(QString("%1").arg(ui.discSpinBox->value()).toAscii().constData()); + if(ui.discSpinBox->value() == 0) + id3v2_tag->removeFrames("TPOS"); + else if(!id3v2_tag->frameListMap()["TPOS"].isEmpty()) + id3v2_tag->frameListMap()["TPOS"].front()->setText(discnumber); + else + { + TagLib::ID3v2::TextIdentificationFrame *frame; + frame = new TagLib::ID3v2::TextIdentificationFrame("TPOS", TagLib::String::Latin1); + frame->setText(discnumber); + id3v2_tag->addFrame(frame); + } } if (selectedTag() == TagLib::MPEG::File::APE) { diff --git a/src/plugins/Input/mad/tagextractor.cpp b/src/plugins/Input/mad/tagextractor.cpp index fe8f59788..dd23582ea 100644 --- a/src/plugins/Input/mad/tagextractor.cpp +++ b/src/plugins/Input/mad/tagextractor.cpp @@ -87,8 +87,17 @@ const QMap<Qmmp::MetaData, QString> TagExtractor::id3v2tag() m_tag.insert(Qmmp::TRACK, QString::number(taglib_tag.track())); + if(!taglib_tag.frameListMap()["TCOM"].isEmpty()) + { + TagLib::String composer = taglib_tag.frameListMap()["TCOM"].front()->toString(); + m_tag.insert(Qmmp::COMPOSER, codec->toUnicode(composer.toCString(utf)).trimmed()); + } + if(!taglib_tag.frameListMap()["TPOS"].isEmpty()) + { + TagLib::String disc = taglib_tag.frameListMap()["TPOS"].front()->toString(); + m_tag.insert(Qmmp::DISCNUMBER, QString(disc.toCString()).trimmed()); + } return m_tag; - } ID3v2Tag::ID3v2Tag(QByteArray *array, long offset) : TagLib::ID3v2::Tag() |
