aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-08-08 10:13:21 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-08-08 10:13:21 +0000
commit12746dbfb28759b831aaf02e5b542cfa55be3fb5 (patch)
treedac95f36328f136b09cf64d87eadd2b336dcbafb
parent31b71619fe8e73ad571c710a3b0b874540fccef0 (diff)
downloadqmmp-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
-rw-r--r--src/plugins/Input/mad/decodermadfactory.cpp17
-rw-r--r--src/plugins/Input/mad/detailsdialog.cpp54
-rw-r--r--src/plugins/Input/mad/tagextractor.cpp11
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()