aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-04-28 06:28:45 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-04-28 06:28:45 +0000
commit4190ca4efebe1bce32400cadbaf728c98178b00a (patch)
treede9fe4609551edad818773f798ee9d33362dc0de /src
parent7ce39a16d12257b74dc205112901b24bda585185 (diff)
downloadqmmp-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.cpp62
-rw-r--r--src/plugins/Input/opus/opusmetadatamodel.h5
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);