diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-10-06 10:36:14 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-10-06 10:36:14 +0000 |
| commit | 55a62d4a794283f05ec2c8858c059fc25f319fe6 (patch) | |
| tree | da329956cdc9791c2c30c169d3b2970242238037 /lib | |
| parent | 7375ed80c25d93b0e292692bc9923d05dc7a0cef (diff) | |
| download | qmmp-55a62d4a794283f05ec2c8858c059fc25f319fe6.tar.gz qmmp-55a62d4a794283f05ec2c8858c059fc25f319fe6.tar.bz2 qmmp-55a62d4a794283f05ec2c8858c059fc25f319fe6.zip | |
added support for tag editing
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@164 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/qmmp/Input/flac/detailsdialog.cpp | 22 | ||||
| -rw-r--r-- | lib/qmmp/Input/flac/detailsdialog.h | 5 | ||||
| -rw-r--r-- | lib/qmmp/Input/flac/detailsdialog.ui | 2 | ||||
| -rw-r--r-- | lib/qmmp/Input/mad/detailsdialog.cpp | 90 | ||||
| -rw-r--r-- | lib/qmmp/Input/mad/detailsdialog.h | 7 | ||||
| -rw-r--r-- | lib/qmmp/Input/mad/detailsdialog.ui | 4 | ||||
| -rw-r--r-- | lib/qmmp/Input/mpc/detailsdialog.cpp | 22 | ||||
| -rw-r--r-- | lib/qmmp/Input/mpc/detailsdialog.h | 7 | ||||
| -rw-r--r-- | lib/qmmp/Input/mpc/detailsdialog.ui | 2 | ||||
| -rw-r--r-- | lib/qmmp/Input/vorbis/detailsdialog.cpp | 22 | ||||
| -rw-r--r-- | lib/qmmp/Input/vorbis/detailsdialog.h | 9 | ||||
| -rw-r--r-- | lib/qmmp/Input/vorbis/detailsdialog.ui | 2 |
12 files changed, 158 insertions, 36 deletions
diff --git a/lib/qmmp/Input/flac/detailsdialog.cpp b/lib/qmmp/Input/flac/detailsdialog.cpp index 07513591c..2826b6cdb 100644 --- a/lib/qmmp/Input/flac/detailsdialog.cpp +++ b/lib/qmmp/Input/flac/detailsdialog.cpp @@ -22,9 +22,12 @@ #include <taglib/flacfile.h> #include <QFile> +#include <QFileInfo> #include "detailsdialog.h" +#define QStringToTString_qt4(s) TagLib::String(s.toUtf8().constData(), TagLib::String::UTF8) + DetailsDialog::DetailsDialog(QWidget *parent, const QString &path) : QDialog(parent) { @@ -34,7 +37,7 @@ DetailsDialog::DetailsDialog(QWidget *parent, const QString &path) setWindowTitle (path.section('/',-1)); path.section('/',-1); ui.pathLineEdit->setText(m_path); - if(QFile::exists(m_path)) + if (QFile::exists(m_path)) { loadFLACInfo(); loadTag(); @@ -94,5 +97,22 @@ void DetailsDialog::loadTag() string = QString::fromUtf8(genre.toCString(TRUE)).trimmed(); ui.genreLineEdit->setText(string); } + QFileInfo info(m_path); + ui.saveButton->setEnabled(info.isWritable()); + connect(ui.saveButton, SIGNAL(clicked()), SLOT(saveTag())); } +void DetailsDialog::saveTag() +{ + TagLib::FileRef f (m_path.toLocal8Bit()); + + f.tag()->setTitle(QStringToTString_qt4(ui.titleLineEdit->text())); + f.tag()->setArtist(QStringToTString_qt4(ui.artistLineEdit->text())); + f.tag()->setAlbum(QStringToTString_qt4(ui.albumLineEdit->text())); + f.tag()->setComment(QStringToTString_qt4(ui.commentLineEdit->text())); + f.tag()->setGenre(QStringToTString_qt4(ui.genreLineEdit->text())); + f.tag()->setYear(ui.yearLineEdit->text().toUInt()); + f.tag()->setTrack(ui.trackLineEdit->text().toUInt()); + + f.save(); +} diff --git a/lib/qmmp/Input/flac/detailsdialog.h b/lib/qmmp/Input/flac/detailsdialog.h index 5e5e57ad6..80c17544c 100644 --- a/lib/qmmp/Input/flac/detailsdialog.h +++ b/lib/qmmp/Input/flac/detailsdialog.h @@ -35,9 +35,12 @@ public: ~DetailsDialog(); +private slots: + void saveTag(); + private: void loadFLACInfo(); - void loadTag(); + void loadTag(); Ui::DetailsDialog ui; QString m_path; diff --git a/lib/qmmp/Input/flac/detailsdialog.ui b/lib/qmmp/Input/flac/detailsdialog.ui index 6968c78be..5ea739953 100644 --- a/lib/qmmp/Input/flac/detailsdialog.ui +++ b/lib/qmmp/Input/flac/detailsdialog.ui @@ -222,7 +222,7 @@ <number>6</number> </property> <item row="6" column="1" colspan="2" > - <widget class="QPushButton" name="pushButton" > + <widget class="QPushButton" name="saveButton" > <property name="enabled" > <bool>false</bool> </property> diff --git a/lib/qmmp/Input/mad/detailsdialog.cpp b/lib/qmmp/Input/mad/detailsdialog.cpp index 59acb4819..21ebf2524 100644 --- a/lib/qmmp/Input/mad/detailsdialog.cpp +++ b/lib/qmmp/Input/mad/detailsdialog.cpp @@ -21,6 +21,7 @@ #include <QSettings> #include <QDir> #include <QFile> +#include <QFileInfo> #include <taglib/tag.h> #include <taglib/fileref.h> @@ -42,28 +43,29 @@ DetailsDialog::DetailsDialog(QWidget *parent, const QString &path) setWindowTitle (path.section('/',-1)); ui.pathLineEdit->setText(m_path); - if(!QFile::exists(m_path)) + if (!QFile::exists(m_path)) return; QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); settings.beginGroup("MAD"); - QTextCodec *codec_v1 = + m_codec_v1 = QTextCodec::codecForName(settings.value("ID3v1_encoding","UTF-8" ) .toByteArray ()); - QTextCodec *codec_v2 = + m_codec_v2 = QTextCodec::codecForName(settings.value("ID3v2_encoding","UTF-8" ) .toByteArray ()); - if (!codec_v1) - codec_v1 = QTextCodec::codecForName ("UTF-8"); - if (!codec_v2) - codec_v2 = QTextCodec::codecForName ("UTF-8"); + if (!m_codec_v1) + m_codec_v1 = QTextCodec::codecForName ("UTF-8"); + if (!m_codec_v2) + m_codec_v2 = QTextCodec::codecForName ("UTF-8"); settings.endGroup(); loadMPEGInfo(); - m_codec = codec_v1; loadID3v1Tag(); - m_codec = codec_v2; loadID3v2Tag(); + QFileInfo info(m_path); + ui.saveV1Button->setEnabled(info.isWritable()); + ui.saveV2Button->setEnabled(info.isWritable()); } @@ -119,27 +121,28 @@ void DetailsDialog::loadID3v1Tag() if (f.ID3v1Tag()) { - bool utf = m_codec->name().contains("UTF"); + bool utf = m_codec_v1->name().contains("UTF"); TagLib::String title = f.ID3v1Tag()->title(); TagLib::String artist = f.ID3v1Tag()->artist(); TagLib::String album = f.ID3v1Tag()->album(); TagLib::String comment = f.ID3v1Tag()->comment(); TagLib::String genre = f.ID3v1Tag()->genre(); - QString string = m_codec->toUnicode(title.toCString(utf)).trimmed(); + QString string = m_codec_v1->toUnicode(title.toCString(utf)).trimmed(); ui.titleLineEdit_v1->setText(string); - string = m_codec->toUnicode(artist.toCString(utf)).trimmed(); + string = m_codec_v1->toUnicode(artist.toCString(utf)).trimmed(); ui.artistLineEdit_v1->setText(string); - string = m_codec->toUnicode(album.toCString(utf)).trimmed(); + string = m_codec_v1->toUnicode(album.toCString(utf)).trimmed(); ui.albumLineEdit_v1->setText(string); - string = m_codec->toUnicode(comment.toCString(utf)).trimmed(); + string = m_codec_v1->toUnicode(comment.toCString(utf)).trimmed(); ui.commentLineEdit_v1->setText(string); string = QString("%1").arg(f.ID3v1Tag()->year()); ui.yearLineEdit_v1->setText(string); string = QString("%1").arg(f.ID3v1Tag()->track()); ui.trackLineEdit_v1->setText(string); - string = m_codec->toUnicode(genre.toCString(utf)).trimmed(); + string = m_codec_v1->toUnicode(genre.toCString(utf)).trimmed(); ui.genreLineEdit_v1->setText(string); } + connect(ui.saveV1Button, SIGNAL(clicked()), SLOT(saveID3v1Tag())); } void DetailsDialog::loadID3v2Tag() @@ -148,26 +151,71 @@ void DetailsDialog::loadID3v2Tag() if (f.ID3v2Tag()) { - bool utf = m_codec->name().contains("UTF"); + bool utf = m_codec_v2->name().contains("UTF"); TagLib::String title = f.ID3v2Tag()->title(); TagLib::String artist = f.ID3v2Tag()->artist(); TagLib::String album = f.ID3v2Tag()->album(); TagLib::String comment = f.ID3v2Tag()->comment(); TagLib::String genre = f.ID3v2Tag()->genre(); - QString string = m_codec->toUnicode(title.toCString(utf)).trimmed(); + QString string = m_codec_v2->toUnicode(title.toCString(utf)).trimmed(); ui.titleLineEdit_v2->setText(string); - string = m_codec->toUnicode(artist.toCString(utf)).trimmed(); + string = m_codec_v2->toUnicode(artist.toCString(utf)).trimmed(); ui.artistLineEdit_v2->setText(string); - string = m_codec->toUnicode(album.toCString(utf)).trimmed(); + string = m_codec_v2->toUnicode(album.toCString(utf)).trimmed(); ui.albumLineEdit_v2->setText(string); - string = m_codec->toUnicode(comment.toCString(utf)).trimmed(); + string = m_codec_v2->toUnicode(comment.toCString(utf)).trimmed(); ui.commentLineEdit_v2->setText(string); string = QString("%1").arg(f.ID3v2Tag()->year()); ui.yearLineEdit_v2->setText(string); string = QString("%1").arg(f.ID3v2Tag()->track()); ui.trackLineEdit_v2->setText(string); - string = m_codec->toUnicode(genre.toCString(utf)).trimmed(); + string = m_codec_v2->toUnicode(genre.toCString(utf)).trimmed(); ui.genreLineEdit_v2->setText(string); } + connect(ui.saveV2Button, SIGNAL(clicked()), SLOT(saveID3v2Tag())); } +void DetailsDialog::saveID3v1Tag() +{ + TagLib::MPEG::File f (m_path.toLocal8Bit()); + + TagLib::String::Type type = TagLib::String::Latin1; + + if (m_codec_v1->name().contains("UTF")) + return; + + f.ID3v1Tag(TRUE)->setTitle(TagLib::String(m_codec_v1->fromUnicode(ui.titleLineEdit_v1->text()).constData(), type)); + f.ID3v1Tag()->setArtist(TagLib::String(m_codec_v1->fromUnicode(ui.artistLineEdit_v1->text()).constData(), type)); + f.ID3v1Tag()->setAlbum(TagLib::String(m_codec_v1->fromUnicode(ui.albumLineEdit_v1->text()).constData(), type)); + f.ID3v1Tag()->setComment(TagLib::String(m_codec_v1->fromUnicode(ui.commentLineEdit_v2->text()).constData(), type)); + f.ID3v1Tag()->setGenre(TagLib::String(m_codec_v1->fromUnicode(ui.genreLineEdit_v1->text()).constData(), type)); + f.ID3v1Tag()->setYear(ui.yearLineEdit_v1->text().toUInt()); + f.ID3v1Tag()->setTrack(ui.trackLineEdit_v1->text().toUInt()); + + f.save(); +} + +void DetailsDialog::saveID3v2Tag() +{ + TagLib::MPEG::File f (m_path.toLocal8Bit()); + + TagLib::String::Type type = TagLib::String::Latin1; + + if (m_codec_v2->name().contains("UTF")) + { + TagLib::ID3v2::FrameFactory *factory = TagLib::ID3v2::FrameFactory::instance(); + factory->setDefaultTextEncoding(TagLib::String::UTF8); + f.setID3v2FrameFactory(factory); + type = TagLib::String::UTF8; + } + + f.ID3v2Tag(TRUE)->setTitle(TagLib::String(m_codec_v2->fromUnicode(ui.titleLineEdit_v2->text()).constData(), type)); + f.ID3v2Tag()->setArtist(TagLib::String(m_codec_v2->fromUnicode(ui.artistLineEdit_v2->text()).constData(), type)); + f.ID3v2Tag()->setAlbum(TagLib::String(m_codec_v2->fromUnicode(ui.albumLineEdit_v2->text()).constData(), type)); + f.ID3v2Tag()->setComment(TagLib::String(m_codec_v2->fromUnicode(ui.commentLineEdit_v2->text()).constData(), type)); + f.ID3v2Tag()->setGenre(TagLib::String(m_codec_v2->fromUnicode(ui.genreLineEdit_v2->text()).constData(), type)); + f.ID3v2Tag()->setYear(ui.yearLineEdit_v2->text().toUInt()); + f.ID3v2Tag()->setTrack(ui.trackLineEdit_v2->text().toUInt()); + + f.save(); +} diff --git a/lib/qmmp/Input/mad/detailsdialog.h b/lib/qmmp/Input/mad/detailsdialog.h index a790dcc7b..204e29358 100644 --- a/lib/qmmp/Input/mad/detailsdialog.h +++ b/lib/qmmp/Input/mad/detailsdialog.h @@ -38,13 +38,18 @@ public: ~DetailsDialog(); +private slots: + void saveID3v1Tag(); + void saveID3v2Tag(); + private: void loadMPEGInfo(); void loadID3v1Tag(); void loadID3v2Tag(); Ui::DetailsDialog ui; QString m_path; - QTextCodec *m_codec; + QTextCodec *m_codec_v1; + QTextCodec *m_codec_v2; }; diff --git a/lib/qmmp/Input/mad/detailsdialog.ui b/lib/qmmp/Input/mad/detailsdialog.ui index b096c1a53..7257a3685 100644 --- a/lib/qmmp/Input/mad/detailsdialog.ui +++ b/lib/qmmp/Input/mad/detailsdialog.ui @@ -199,7 +199,7 @@ <number>6</number> </property> <item row="6" column="1" colspan="2" > - <widget class="QPushButton" name="pushButton" > + <widget class="QPushButton" name="saveV1Button" > <property name="enabled" > <bool>false</bool> </property> @@ -434,7 +434,7 @@ <widget class="QLineEdit" name="genreLineEdit_v2" /> </item> <item row="6" column="1" colspan="2" > - <widget class="QPushButton" name="pushButton_4" > + <widget class="QPushButton" name="saveV2Button" > <property name="enabled" > <bool>false</bool> </property> diff --git a/lib/qmmp/Input/mpc/detailsdialog.cpp b/lib/qmmp/Input/mpc/detailsdialog.cpp index c69dbe8b7..472046717 100644 --- a/lib/qmmp/Input/mpc/detailsdialog.cpp +++ b/lib/qmmp/Input/mpc/detailsdialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2007 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -22,9 +22,12 @@ #include <taglib/mpcfile.h> #include <QFile> +#include <QFileInfo> #include "detailsdialog.h" +#define QStringToTString_qt4(s) TagLib::String(s.toUtf8().constData(), TagLib::String::UTF8) + DetailsDialog::DetailsDialog(QWidget *parent, const QString &path) : QDialog(parent) { @@ -91,5 +94,22 @@ void DetailsDialog::loadTag() string = QString::fromUtf8(genre.toCString(TRUE)).trimmed(); ui.genreLineEdit->setText(string); } + QFileInfo info(m_path); + ui.saveButton->setEnabled(info.isWritable()); + connect(ui.saveButton, SIGNAL(clicked()), SLOT(saveTag())); } +void DetailsDialog::saveTag() +{ + TagLib::FileRef f (m_path.toLocal8Bit()); + + f.tag()->setTitle(QStringToTString_qt4(ui.titleLineEdit->text())); + f.tag()->setArtist(QStringToTString_qt4(ui.artistLineEdit->text())); + f.tag()->setAlbum(QStringToTString_qt4(ui.albumLineEdit->text())); + f.tag()->setComment(QStringToTString_qt4(ui.commentLineEdit->text())); + f.tag()->setGenre(QStringToTString_qt4(ui.genreLineEdit->text())); + f.tag()->setYear(ui.yearLineEdit->text().toUInt()); + f.tag()->setTrack(ui.trackLineEdit->text().toUInt()); + + f.save(); +} diff --git a/lib/qmmp/Input/mpc/detailsdialog.h b/lib/qmmp/Input/mpc/detailsdialog.h index 4ff868414..70540bda1 100644 --- a/lib/qmmp/Input/mpc/detailsdialog.h +++ b/lib/qmmp/Input/mpc/detailsdialog.h @@ -1,6 +1,6 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * - * forkotov02@hotmail.ru * + * Copyright (C) 2007 by Ilya Kotov * + * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -35,6 +35,9 @@ public: ~DetailsDialog(); +private slots: + void saveTag(); + private: void loadMPCInfo(); void loadTag(); diff --git a/lib/qmmp/Input/mpc/detailsdialog.ui b/lib/qmmp/Input/mpc/detailsdialog.ui index bc8c09c0e..918dd3abf 100644 --- a/lib/qmmp/Input/mpc/detailsdialog.ui +++ b/lib/qmmp/Input/mpc/detailsdialog.ui @@ -222,7 +222,7 @@ <number>6</number> </property> <item row="6" column="1" colspan="2" > - <widget class="QPushButton" name="pushButton" > + <widget class="QPushButton" name="saveButton" > <property name="enabled" > <bool>false</bool> </property> diff --git a/lib/qmmp/Input/vorbis/detailsdialog.cpp b/lib/qmmp/Input/vorbis/detailsdialog.cpp index eee5540f1..bbe441703 100644 --- a/lib/qmmp/Input/vorbis/detailsdialog.cpp +++ b/lib/qmmp/Input/vorbis/detailsdialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2007 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -22,9 +22,12 @@ #include <taglib/vorbisfile.h> #include <QFile> +#include <QFileInfo> #include "detailsdialog.h" +#define QStringToTString_qt4(s) TagLib::String(s.toUtf8().constData(), TagLib::String::UTF8) + DetailsDialog::DetailsDialog(QWidget *parent, const QString &path) : QDialog(parent) { @@ -96,5 +99,22 @@ void DetailsDialog::loadTag() string = QString::fromUtf8(genre.toCString(TRUE)).trimmed(); ui.genreLineEdit->setText(string); } + QFileInfo info(m_path); + ui.saveButton->setEnabled(info.isWritable()); + connect(ui.saveButton, SIGNAL(clicked()), SLOT(saveTag())); } +void DetailsDialog::saveTag() +{ + TagLib::FileRef f (m_path.toLocal8Bit()); + + f.tag()->setTitle(QStringToTString_qt4(ui.titleLineEdit->text())); + f.tag()->setArtist(QStringToTString_qt4(ui.artistLineEdit->text())); + f.tag()->setAlbum(QStringToTString_qt4(ui.albumLineEdit->text())); + f.tag()->setComment(QStringToTString_qt4(ui.commentLineEdit->text())); + f.tag()->setGenre(QStringToTString_qt4(ui.genreLineEdit->text())); + f.tag()->setYear(ui.yearLineEdit->text().toUInt()); + f.tag()->setTrack(ui.trackLineEdit->text().toUInt()); + + f.save(); +} diff --git a/lib/qmmp/Input/vorbis/detailsdialog.h b/lib/qmmp/Input/vorbis/detailsdialog.h index 60dda5e59..94d4243b8 100644 --- a/lib/qmmp/Input/vorbis/detailsdialog.h +++ b/lib/qmmp/Input/vorbis/detailsdialog.h @@ -1,6 +1,6 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * - * forkotov02@hotmail.ru * + * Copyright (C) 2007 by Ilya Kotov * + * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -35,9 +35,12 @@ public: ~DetailsDialog(); +private slots: + void saveTag(); + private: void loadVorbisInfo(); - void loadTag(); + void loadTag(); Ui::DetailsDialog ui; QString m_path; diff --git a/lib/qmmp/Input/vorbis/detailsdialog.ui b/lib/qmmp/Input/vorbis/detailsdialog.ui index 67bedbc4f..1804ab268 100644 --- a/lib/qmmp/Input/vorbis/detailsdialog.ui +++ b/lib/qmmp/Input/vorbis/detailsdialog.ui @@ -257,7 +257,7 @@ <number>6</number> </property> <item row="6" column="1" colspan="2" > - <widget class="QPushButton" name="pushButton" > + <widget class="QPushButton" name="saveButton" > <property name="enabled" > <bool>false</bool> </property> |
