aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-10-06 10:36:14 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-10-06 10:36:14 +0000
commit55a62d4a794283f05ec2c8858c059fc25f319fe6 (patch)
treeda329956cdc9791c2c30c169d3b2970242238037
parent7375ed80c25d93b0e292692bc9923d05dc7a0cef (diff)
downloadqmmp-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
-rw-r--r--lib/qmmp/Input/flac/detailsdialog.cpp22
-rw-r--r--lib/qmmp/Input/flac/detailsdialog.h5
-rw-r--r--lib/qmmp/Input/flac/detailsdialog.ui2
-rw-r--r--lib/qmmp/Input/mad/detailsdialog.cpp90
-rw-r--r--lib/qmmp/Input/mad/detailsdialog.h7
-rw-r--r--lib/qmmp/Input/mad/detailsdialog.ui4
-rw-r--r--lib/qmmp/Input/mpc/detailsdialog.cpp22
-rw-r--r--lib/qmmp/Input/mpc/detailsdialog.h7
-rw-r--r--lib/qmmp/Input/mpc/detailsdialog.ui2
-rw-r--r--lib/qmmp/Input/vorbis/detailsdialog.cpp22
-rw-r--r--lib/qmmp/Input/vorbis/detailsdialog.h9
-rw-r--r--lib/qmmp/Input/vorbis/detailsdialog.ui2
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>