diff options
| -rw-r--r-- | src/plugins/Engines/Engines.pro | 2 | ||||
| -rw-r--r-- | src/plugins/Input/Input.pro | 22 | ||||
| -rw-r--r-- | src/plugins/Input/modplug/decodermodplugfactory.cpp | 3 | ||||
| -rw-r--r-- | src/plugins/Input/modplug/decodermodplugfactory.h | 2 | ||||
| -rw-r--r-- | src/plugins/Input/modplug/modplugmetadatamodel.cpp | 39 | ||||
| -rw-r--r-- | src/plugins/Input/modplug/modplugmetadatamodel.h | 4 | ||||
| -rw-r--r-- | src/plugins/Input/mpeg/decodermpegfactory.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Input/mpeg/decodermpegfactory.h | 5 | ||||
| -rw-r--r-- | src/plugins/Input/mpeg/mpegmetadatamodel.cpp | 69 | ||||
| -rw-r--r-- | src/plugins/Input/mpeg/mpegmetadatamodel.h | 10 | ||||
| -rw-r--r-- | src/plugins/Input/vorbis/decodervorbisfactory.cpp | 4 | ||||
| -rw-r--r-- | src/plugins/Input/vorbis/decodervorbisfactory.h | 2 | ||||
| -rw-r--r-- | src/plugins/Input/vorbis/vorbismetadatamodel.cpp | 35 | ||||
| -rw-r--r-- | src/plugins/Input/vorbis/vorbismetadatamodel.h | 13 | ||||
| -rw-r--r-- | src/qmmp/decoderfactory.h | 2 | ||||
| -rw-r--r-- | src/qmmp/metadatamodel.cpp | 45 | ||||
| -rw-r--r-- | src/qmmp/metadatamodel.h | 40 | ||||
| -rw-r--r-- | src/qmmpui/detailsdialog.cpp | 12 |
18 files changed, 155 insertions, 160 deletions
diff --git a/src/plugins/Engines/Engines.pro b/src/plugins/Engines/Engines.pro index 1dddcfd5d..abd780457 100644 --- a/src/plugins/Engines/Engines.pro +++ b/src/plugins/Engines/Engines.pro @@ -1,4 +1,4 @@ include(../../../qmmp.pri) -SUBDIRS += mplayer +#SUBDIRS += mplayer TEMPLATE = subdirs diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro index 498c5ff60..0c16b04a1 100644 --- a/src/plugins/Input/Input.pro +++ b/src/plugins/Input/Input.pro @@ -1,18 +1,18 @@ include(../../../qmmp.pri) TEMPLATE = subdirs -SUBDIRS += vorbis cue sndfile wavpack +SUBDIRS += vorbis #cue sndfile wavpack contains(CONFIG, WITH_MAD)|contains(CONFIG, WITH_MPG123){ SUBDIRS += mpeg } contains(CONFIG, FLAC_PLUGIN){ - SUBDIRS += flac +# SUBDIRS += flac } contains(CONFIG, MUSEPACK_PLUGIN){ - SUBDIRS += mpc +# SUBDIRS += mpc } contains(CONFIG, MODPLUG_PLUGIN){ @@ -20,34 +20,34 @@ contains(CONFIG, MODPLUG_PLUGIN){ } contains(CONFIG, FFMPEG_PLUGIN){ - SUBDIRS += ffmpeg +# SUBDIRS += ffmpeg } contains(CONFIG, GME_PLUGIN){ - SUBDIRS += gme +# SUBDIRS += gme } contains(CONFIG, OPUS_PLUGIN){ - SUBDIRS += opus +# SUBDIRS += opus } contains(CONFIG, CDAUDIO_PLUGIN){ - SUBDIRS += cdaudio +# SUBDIRS += cdaudio } contains(CONFIG, SID_PLUGIN){ - SUBDIRS += sid +# SUBDIRS += sid } unix{ contains(CONFIG, AAC_PLUGIN){ - SUBDIRS += aac +# SUBDIRS += aac } contains(CONFIG, WILDMIDI_PLUGIN){ - SUBDIRS += wildmidi +# SUBDIRS += wildmidi } contains(CONFIG, ARCHIVE_PLUGIN){ @@ -57,7 +57,7 @@ contains(CONFIG, ARCHIVE_PLUGIN){ TAGLIB_VER_MIN = $$member(TAGLIB_VERSION, 1) greaterThan(TAGLIB_VER_MAJ, 1) | equals(TAGLIB_VER_MAJ, 1) { - greaterThan(TAGLIB_VER_MIN, 10):SUBDIRS += archive +# greaterThan(TAGLIB_VER_MIN, 10):SUBDIRS += archive } else { message("Archive plugin requires at least TagLib 1.11") } diff --git a/src/plugins/Input/modplug/decodermodplugfactory.cpp b/src/plugins/Input/modplug/decodermodplugfactory.cpp index 2142f8179..89ba9ba4e 100644 --- a/src/plugins/Input/modplug/decodermodplugfactory.cpp +++ b/src/plugins/Input/modplug/decodermodplugfactory.cpp @@ -119,8 +119,9 @@ QList<TrackInfo *> DecoderModPlugFactory::createPlayList(const QString &path, Tr return list; } -MetaDataModel* DecoderModPlugFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderModPlugFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { + Q_UNUSED(readOnly); return new ModPlugMetaDataModel(path, parent); } diff --git a/src/plugins/Input/modplug/decodermodplugfactory.h b/src/plugins/Input/modplug/decodermodplugfactory.h index bd7acab5f..0108c2c31 100644 --- a/src/plugins/Input/modplug/decodermodplugfactory.h +++ b/src/plugins/Input/modplug/decodermodplugfactory.h @@ -33,7 +33,7 @@ public: DecoderProperties properties() const; Decoder *create(const QString &, QIODevice *); QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *); - MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0); + MetaDataModel* createMetaDataModel(const QString &path, bool readOnly, QObject *parent = 0); void showSettings(QWidget *parent); void showAbout(QWidget *parent); QString translation() const; diff --git a/src/plugins/Input/modplug/modplugmetadatamodel.cpp b/src/plugins/Input/modplug/modplugmetadatamodel.cpp index fded36966..cd1636ea3 100644 --- a/src/plugins/Input/modplug/modplugmetadatamodel.cpp +++ b/src/plugins/Input/modplug/modplugmetadatamodel.cpp @@ -29,7 +29,7 @@ #define MAX_MESSAGE_LENGTH 4000 -ModPlugMetaDataModel::ModPlugMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) +ModPlugMetaDataModel::ModPlugMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(true, parent) { m_soundFile = 0; m_path = path; @@ -62,31 +62,24 @@ ModPlugMetaDataModel::~ModPlugMetaDataModel() } } -QHash<QString, QString> ModPlugMetaDataModel::audioProperties() +QList<MetaDataItem> ModPlugMetaDataModel::extraProperties() const { - QHash<QString, QString> ap; + QList<MetaDataItem> ep; if(!m_soundFile) - return ap; + return ep; - ap.insert(tr("File name"), m_path.section('/',-1)); - QString text = getTypeName(m_soundFile->GetType()); - ap.insert(tr("Type"), text); - int lSongTime = m_soundFile->GetSongTime(); - text = QString("%1").arg(lSongTime/60); - text +=":"+QString("%1").arg(lSongTime%60,2,10,QChar('0')); - ap.insert(tr("Length"), text); - ap.insert(tr("Speed"), QString::number(m_soundFile->GetMusicSpeed())); - ap.insert(tr("Tempo"), QString::number(m_soundFile->GetMusicTempo())); - ap.insert(tr("Samples"), QString::number(m_soundFile->GetNumSamples())); - ap.insert(tr("Instruments"), QString::number(m_soundFile->GetNumInstruments())); - ap.insert(tr("Patterns"), QString::number(m_soundFile->GetNumPatterns())); - ap.insert(tr("Channels"), QString::number(m_soundFile->GetNumChannels())); - return ap; + ep << MetaDataItem(tr("Speed"), m_soundFile->GetMusicSpeed()); + ep << MetaDataItem(tr("Tempo"), m_soundFile->GetMusicTempo()); + ep << MetaDataItem(tr("Samples"), m_soundFile->GetNumSamples()); + ep << MetaDataItem(tr("Instruments"), m_soundFile->GetNumInstruments()); + ep << MetaDataItem(tr("Patterns"), m_soundFile->GetNumPatterns()); + ep << MetaDataItem(tr("Channels"), m_soundFile->GetNumChannels()); + return ep; } -QHash<QString, QString> ModPlugMetaDataModel::descriptions() +QList<MetaDataItem> ModPlugMetaDataModel::descriptions() const { - QHash<QString, QString> desc; + QList<MetaDataItem> desc; if(!m_soundFile) return desc; char lBuffer[33]; @@ -98,7 +91,7 @@ QHash<QString, QString> ModPlugMetaDataModel::descriptions() } text = text.trimmed(); if(!text.isEmpty()) - desc.insert(tr("Samples"), text); + desc << MetaDataItem(tr("Samples"), text); text.clear(); for(uint i = 0; i < m_soundFile->GetNumInstruments(); i++) { @@ -107,12 +100,12 @@ QHash<QString, QString> ModPlugMetaDataModel::descriptions() } text = text.trimmed(); if(!text.isEmpty()) - desc.insert(tr("Instruments"), text); + desc << MetaDataItem(tr("Instruments"), text); text.clear(); char message[MAX_MESSAGE_LENGTH]; int length = m_soundFile->GetSongComments(message, MAX_MESSAGE_LENGTH, 80); if (length != 0) - desc.insert(tr("Comment"), QString::fromUtf8(message).trimmed ()); + desc << MetaDataItem(tr("Comment"), QString::fromUtf8(message).trimmed ()); return desc; } diff --git a/src/plugins/Input/modplug/modplugmetadatamodel.h b/src/plugins/Input/modplug/modplugmetadatamodel.h index d20306480..544155a12 100644 --- a/src/plugins/Input/modplug/modplugmetadatamodel.h +++ b/src/plugins/Input/modplug/modplugmetadatamodel.h @@ -32,8 +32,8 @@ Q_OBJECT public: ModPlugMetaDataModel(const QString &path, QObject *parent); ~ModPlugMetaDataModel(); - QHash<QString, QString> audioProperties(); - QHash<QString, QString> descriptions(); + QList<MetaDataItem> extraProperties() const override; + QList<MetaDataItem> descriptions() const override; static QString getTypeName(quint32 type); private: diff --git a/src/plugins/Input/mpeg/decodermpegfactory.cpp b/src/plugins/Input/mpeg/decodermpegfactory.cpp index b617329df..5d9e6202a 100644 --- a/src/plugins/Input/mpeg/decodermpegfactory.cpp +++ b/src/plugins/Input/mpeg/decodermpegfactory.cpp @@ -76,7 +76,7 @@ bool DecoderMPEGFactory::canDecode(QIODevice *input) const return false; if (!memcmp(buf + 8, "WAVE", 4)) - return !memcmp(buf + 20, "U" ,1); + return !memcmp(buf + 20, "U" ,1); if(!memcmp(buf, "ID3", 3)) { @@ -361,9 +361,9 @@ QList<TrackInfo *> DecoderMPEGFactory::createPlayList(const QString &path, Track return QList<TrackInfo*>() << info; } -MetaDataModel* DecoderMPEGFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderMPEGFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { - return new MPEGMetaDataModel(m_using_rusxmms, path, parent); + return new MPEGMetaDataModel(m_using_rusxmms, path, readOnly, parent); } void DecoderMPEGFactory::showSettings(QWidget *parent) diff --git a/src/plugins/Input/mpeg/decodermpegfactory.h b/src/plugins/Input/mpeg/decodermpegfactory.h index 469a2ed6c..2d8b3f383 100644 --- a/src/plugins/Input/mpeg/decodermpegfactory.h +++ b/src/plugins/Input/mpeg/decodermpegfactory.h @@ -22,8 +22,7 @@ #include <qmmp/decoderfactory.h> -class DecoderMPEGFactory : public QObject, - DecoderFactory +class DecoderMPEGFactory : public QObject, DecoderFactory { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qmmp.qmmp.DecoderFactoryInterface.1.0") @@ -35,7 +34,7 @@ public: DecoderProperties properties() const; Decoder *create(const QString &, QIODevice *input); QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *); - MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0); + MetaDataModel* createMetaDataModel(const QString &path, bool readOnly = true, QObject *parent = 0); void showSettings(QWidget *parent); void showAbout(QWidget *parent); QString translation() const; diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.cpp b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp index 65f2c94d6..187331df4 100644 --- a/src/plugins/Input/mpeg/mpegmetadatamodel.cpp +++ b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp @@ -20,7 +20,6 @@ #include <QTextCodec> #include <QSettings> - #include <taglib/tag.h> #include <taglib/fileref.h> #include <taglib/id3v1tag.h> @@ -32,12 +31,14 @@ #include <taglib/mpegproperties.h> #include <taglib/textidentificationframe.h> #include <taglib/attachedpictureframe.h> - +#include <taglib/id3v2framefactory.h> #include "mpegmetadatamodel.h" -MPEGMetaDataModel::MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent) : MetaDataModel(parent) +MPEGMetaDataModel::MPEGMetaDataModel(bool using_rusxmms, const QString &path, bool readOnly, QObject *parent) : + MetaDataModel(readOnly, parent) { - m_file = new TagLib::MPEG::File(QStringToFileName(path)); + m_stream = new TagLib::FileStream(QStringToFileName(path), readOnly); + m_file = new TagLib::MPEG::File(m_stream, TagLib::ID3v2::FrameFactory::instance()); m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v1); m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v2); m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::APE); @@ -48,68 +49,42 @@ MPEGMetaDataModel::~MPEGMetaDataModel() while(!m_tags.isEmpty()) delete m_tags.takeFirst(); delete m_file; + delete m_stream; } -QHash<QString, QString> MPEGMetaDataModel::audioProperties() +QList<MetaDataItem> MPEGMetaDataModel::extraProperties() const { - QHash<QString, QString> ap; - QString text; - QString v; - switch((int)m_file->audioProperties()->version()) - { - case TagLib::MPEG::Header::Version1: - v = "1"; - break; - case TagLib::MPEG::Header::Version2: - v = "2"; - break; - case TagLib::MPEG::Header::Version2_5: - v = "2.5"; - } - text = QString("MPEG-%1 layer %2").arg(v).arg(m_file->audioProperties()->layer()); - ap.insert(tr("Format"), text); - text = QString("%1").arg(m_file->audioProperties()->bitrate()); - ap.insert(tr("Bitrate"), text+" "+tr("kbps")); - text = QString("%1").arg(m_file->audioProperties()->sampleRate()); - ap.insert(tr("Sample rate"), text+" "+tr("Hz")); - switch (m_file->audioProperties()->channelMode()) + QList<MetaDataItem> ep; + TagLib::MPEG::Properties *ap = m_file->audioProperties(); + + switch (ap->channelMode()) { case TagLib::MPEG::Header::Stereo: - ap.insert(tr("Mode"), "Stereo"); + ep << MetaDataItem(tr("Mode"), "Stereo"); break; case TagLib::MPEG::Header::JointStereo: - ap.insert(tr("Mode"), "Joint stereo"); + ep << MetaDataItem(tr("Mode"), "Joint stereo"); break; case TagLib::MPEG::Header::DualChannel: - ap.insert(tr("Mode"), "Dual channel"); + ep << MetaDataItem(tr("Mode"), "Dual channel"); break; case TagLib::MPEG::Header::SingleChannel: - ap.insert(tr("Mode"), "Single channel"); + ep << MetaDataItem(tr("Mode"), "Single channel"); break; } - text = QString("%1 "+tr("KB")).arg(m_file->length()/1024); - ap.insert(tr("File size"), text); - if (m_file->audioProperties()->protectionEnabled()) - ap.insert(tr("Protection"), tr("Yes")); - else - ap.insert(tr("Protection"), tr("No")); - if (m_file->audioProperties()->isCopyrighted()) - ap.insert(tr("Copyright"), tr("Yes")); - else - ap.insert(tr("Copyright"), tr("No")); - if (m_file->audioProperties()->isOriginal()) - ap.insert(tr("Original"), tr("Yes")); - else - ap.insert(tr("Original"), tr("No")); - return ap; + ep << MetaDataItem(tr("Protection"), ap->protectionEnabled()); + ep << MetaDataItem(tr("Copyright"), ap->isCopyrighted()); + ep << MetaDataItem(tr("Original"), ap->isOriginal()); + + return ep; } -QList<TagModel* > MPEGMetaDataModel::tags() +QList<TagModel* > MPEGMetaDataModel::tags() const { return m_tags; } -QPixmap MPEGMetaDataModel::cover() +QPixmap MPEGMetaDataModel::cover() const { if(!m_file->ID3v2Tag()) return QPixmap(); diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.h b/src/plugins/Input/mpeg/mpegmetadatamodel.h index 30191cdb7..02d0a1cfb 100644 --- a/src/plugins/Input/mpeg/mpegmetadatamodel.h +++ b/src/plugins/Input/mpeg/mpegmetadatamodel.h @@ -23,6 +23,7 @@ #include <qmmp/metadatamodel.h> #include <taglib/mpegfile.h> +#include <taglib/tfilestream.h> class QTextCodec; @@ -30,15 +31,16 @@ class MPEGMetaDataModel : public MetaDataModel { Q_OBJECT public: - MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent); + MPEGMetaDataModel(bool using_rusxmms, const QString &path, bool readOnly, QObject *parent); ~MPEGMetaDataModel(); - QHash<QString, QString> audioProperties(); - QList<TagModel* > tags(); - QPixmap cover(); + QList<MetaDataItem> extraProperties() const override; + QList<TagModel* > tags() const override; + QPixmap cover() const override; private: QList<TagModel* > m_tags; TagLib::MPEG::File *m_file; + TagLib::FileStream *m_stream; }; class MpegFileTagModel : public TagModel diff --git a/src/plugins/Input/vorbis/decodervorbisfactory.cpp b/src/plugins/Input/vorbis/decodervorbisfactory.cpp index fc7e2f9e2..8c2dcdd50 100644 --- a/src/plugins/Input/vorbis/decodervorbisfactory.cpp +++ b/src/plugins/Input/vorbis/decodervorbisfactory.cpp @@ -57,9 +57,9 @@ Decoder *DecoderVorbisFactory::create(const QString &, QIODevice *input) return new DecoderVorbis(input); } -MetaDataModel* DecoderVorbisFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderVorbisFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { - return new VorbisMetaDataModel(path, parent); + return new VorbisMetaDataModel(path, readOnly, parent); } QList<TrackInfo *> DecoderVorbisFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *) diff --git a/src/plugins/Input/vorbis/decodervorbisfactory.h b/src/plugins/Input/vorbis/decodervorbisfactory.h index dc0a39264..e75198a08 100644 --- a/src/plugins/Input/vorbis/decodervorbisfactory.h +++ b/src/plugins/Input/vorbis/decodervorbisfactory.h @@ -36,7 +36,7 @@ public: bool canDecode(QIODevice *input) const; DecoderProperties properties() const; Decoder *create(const QString &, QIODevice *input); - MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0); + MetaDataModel* createMetaDataModel(const QString &path, bool readOnly = true, QObject *parent = 0); QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); diff --git a/src/plugins/Input/vorbis/vorbismetadatamodel.cpp b/src/plugins/Input/vorbis/vorbismetadatamodel.cpp index b00ad9bd7..67b7d0fb5 100644 --- a/src/plugins/Input/vorbis/vorbismetadatamodel.cpp +++ b/src/plugins/Input/vorbis/vorbismetadatamodel.cpp @@ -26,10 +26,12 @@ #include <taglib/tmap.h> #include "vorbismetadatamodel.h" -VorbisMetaDataModel::VorbisMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) +VorbisMetaDataModel::VorbisMetaDataModel(const QString &path, bool readOnly, QObject *parent) + : MetaDataModel(readOnly, parent) { m_path = path; - m_file = new TagLib::Ogg::Vorbis::File(QStringToFileName(path)); + m_stream = new TagLib::FileStream(QStringToFileName(path), readOnly); + m_file = new TagLib::Ogg::Vorbis::File(m_stream); m_tag = m_file->tag(); m_tags << new VorbisCommentModel(this); } @@ -39,35 +41,16 @@ VorbisMetaDataModel::~VorbisMetaDataModel() while(!m_tags.isEmpty()) delete m_tags.takeFirst(); - if(m_file) - { - delete m_file; - m_file = 0; - } -} - -QHash<QString, QString> VorbisMetaDataModel::audioProperties() -{ - QHash<QString, QString> ap; - if(m_file->audioProperties()) - { - 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(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; + delete m_file; + delete m_stream; } -QList<TagModel* > VorbisMetaDataModel::tags() +QList<TagModel* > VorbisMetaDataModel::tags() const { return m_tags; } -QPixmap VorbisMetaDataModel::cover() +QPixmap VorbisMetaDataModel::cover() const { if(!m_tag || m_tag->isEmpty()) return QPixmap(); @@ -103,7 +86,7 @@ QPixmap VorbisMetaDataModel::cover() return QPixmap(); } -ulong VorbisMetaDataModel::readPictureBlockField(QByteArray data, int offset) +ulong VorbisMetaDataModel::readPictureBlockField(QByteArray data, int offset) const { return (((uchar)data.data()[offset] & 0xff) << 24) | (((uchar)data.data()[offset+1] & 0xff) << 16) | diff --git a/src/plugins/Input/vorbis/vorbismetadatamodel.h b/src/plugins/Input/vorbis/vorbismetadatamodel.h index a21d3d503..fc63a2cb3 100644 --- a/src/plugins/Input/vorbis/vorbismetadatamodel.h +++ b/src/plugins/Input/vorbis/vorbismetadatamodel.h @@ -24,6 +24,8 @@ #include <qmmp/metadatamodel.h> #include <taglib/vorbisfile.h> #include <taglib/xiphcomment.h> +#include <taglib/tfilestream.h> +#include <taglib/tfilestream.h> class VorbisCommentModel; @@ -31,20 +33,21 @@ class VorbisMetaDataModel : public MetaDataModel { Q_OBJECT public: - VorbisMetaDataModel(const QString &path, QObject *parent); + VorbisMetaDataModel(const QString &path, bool readOnly, QObject *parent); ~VorbisMetaDataModel(); friend class VorbisCommentModel; - QHash<QString, QString> audioProperties(); - QList<TagModel* > tags(); - QPixmap cover(); + QList<TagModel* > tags() const override; + QPixmap cover() const override; private: + ulong readPictureBlockField(QByteArray data, int offset) const; + QString m_path; TagLib::Ogg::Vorbis::File *m_file; TagLib::Ogg::XiphComment *m_tag; QList<TagModel* > m_tags; - ulong readPictureBlockField(QByteArray data, int offset); + TagLib::FileStream *m_stream; }; class VorbisCommentModel : public TagModel diff --git a/src/qmmp/decoderfactory.h b/src/qmmp/decoderfactory.h index 7156e2ed5..50b7d3318 100644 --- a/src/qmmp/decoderfactory.h +++ b/src/qmmp/decoderfactory.h @@ -97,7 +97,7 @@ public: * @param parent Parent object. * @return MetaDataModel pointer. */ - virtual MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0) = 0; + virtual MetaDataModel* createMetaDataModel(const QString &path, bool readOnly = true, QObject *parent = 0) = 0; /*! * Shows settings dialog. * @param parent Parent widget. diff --git a/src/qmmp/metadatamodel.cpp b/src/qmmp/metadatamodel.cpp index b3fa4b6bf..ea53c66a8 100644 --- a/src/qmmp/metadatamodel.cpp +++ b/src/qmmp/metadatamodel.cpp @@ -54,33 +54,60 @@ void MetaDataItem::setSuffix(const QString &suffix) m_suffix = suffix; } -MetaDataModel::MetaDataModel(QObject *parent) : QObject(parent) -{} +MetaDataModel::MetaDataModel(bool readOnly, QObject *parent) : QObject(parent), m_readOnly(readOnly) +{ + m_dialogHints = NO_HINTS; +} MetaDataModel::~MetaDataModel() {} -QHash<QString, QString> MetaDataModel::audioProperties() +QList<MetaDataItem> MetaDataModel::extraProperties() const { - return QHash<QString, QString> (); + return QList<MetaDataItem>(); } -QHash<QString, QString> MetaDataModel::descriptions() +QList<MetaDataItem> MetaDataModel::descriptions() const { - return QHash<QString, QString> (); + return QList<MetaDataItem>(); } -QList<TagModel* > MetaDataModel::tags() +QList<TagModel* > MetaDataModel::tags() const { return QList<TagModel* > (); } -QPixmap MetaDataModel::cover() +QPixmap MetaDataModel::cover() const { return QPixmap(); } -QString MetaDataModel::coverPath() +QString MetaDataModel::coverPath() const { return QString(); } + +void MetaDataModel::setCover(const QPixmap &cover) +{ + Q_UNUSED(cover); +} + +bool MetaDataModel::isReadOnly() const +{ + return m_readOnly; +} + +const MetaDataModel::DialogHints &MetaDataModel::dialogHints() const +{ + return m_dialogHints; +} + +void MetaDataModel::setDialogHints(const DialogHints &hints) +{ + m_dialogHints = hints; +} + +void MetaDataModel::setReadOnly(bool readOnly) +{ + m_readOnly = readOnly; +} diff --git a/src/qmmp/metadatamodel.h b/src/qmmp/metadatamodel.h index 57a3ee26b..46851d03f 100644 --- a/src/qmmp/metadatamodel.h +++ b/src/qmmp/metadatamodel.h @@ -27,6 +27,7 @@ #include <QObject> #include <QPixmap> #include <QVariant> +#include <QFlags> #include "tagmodel.h" @@ -54,39 +55,50 @@ class QMMP_EXPORT MetaDataModel : public QObject { Q_OBJECT public: + enum DialogHint + { + NO_HINTS = 0x0, + IS_COVER_EDITABLE = 0x1, + COMPLETE_PROPERTY_LIST = 0x2 + }; + Q_DECLARE_FLAGS(DialogHints, DialogHint) /*! * Constructor. * @param parent Parent Object. */ - MetaDataModel(QObject *parent = 0); + MetaDataModel(bool readOnly = true, QObject *parent = 0); /*! * Destructor. */ virtual ~MetaDataModel(); - /*! - * Returns an associative array of the audio properties. - * Subclass should reimplement this function. Default implementation returns empty array. - */ - virtual QHash<QString, QString> audioProperties(); - /*! - * Returns an associative array of the long descriptions. - * Subclass should reimplement this function. Default implementation returns empty array. - */ - virtual QHash<QString, QString> descriptions(); + + virtual QList<MetaDataItem> extraProperties() const; + virtual QList<MetaDataItem> descriptions() const; /*! * Returns a list of available tags. * Subclass should reimplement this function. Default implementation returns empty array. */ - virtual QList<TagModel* > tags(); + virtual QList<TagModel* > tags() const; /*! * Returns cover pixmap. * Subclass should reimplement this function. Default implementation returns empty pixmap. */ - virtual QPixmap cover(); + virtual QPixmap cover() const; /*! * Returns path to cover pixmap. */ - virtual QString coverPath(); + virtual QString coverPath() const; + void setCover(const QPixmap &cover); + bool isReadOnly() const; + const DialogHints &dialogHints() const; + +protected: + void setDialogHints(const DialogHints &hints); + void setReadOnly(bool readOnly); + +private: + bool m_readOnly; + DialogHints m_dialogHints; }; #endif // METADATAMODEL_H diff --git a/src/qmmpui/detailsdialog.cpp b/src/qmmpui/detailsdialog.cpp index 809599dee..6c74277ce 100644 --- a/src/qmmpui/detailsdialog.cpp +++ b/src/qmmpui/detailsdialog.cpp @@ -180,12 +180,12 @@ void DetailsDialog::updatePage() m_ui->tabWidget->addTab(new TagEditor(tagModel, this), tagModel->name()); } - foreach(QString title, m_metaDataModel->descriptions().keys()) + foreach(MetaDataItem item, m_metaDataModel->descriptions()) { QTextEdit *textEdit = new QTextEdit(this); textEdit->setReadOnly(true); - textEdit->setPlainText(m_metaDataModel->descriptions().value(title)); - m_ui->tabWidget->addTab(textEdit, title); + textEdit->setPlainText(item.value().toString()); + m_ui->tabWidget->addTab(textEdit, item.name()); } } printInfo(); @@ -237,7 +237,7 @@ void DetailsDialog::printInfo() m_ui->textEdit->setHtml(formattedText); return; } - QHash <QString, QString> ap = m_metaDataModel->audioProperties(); + QList<MetaDataItem> ap = m_metaDataModel->extraProperties(); //line if(formattedText.contains("<tr>")) { @@ -248,8 +248,8 @@ void DetailsDialog::printInfo() formattedText.append("</tr>"); } - foreach(QString key, ap.keys()) - formattedText += formatRow(key, ap.value(key)); + foreach(MetaDataItem item, ap) + formattedText += formatRow(item.name(), item.value().toString()); formattedText.append("</TABLE>"); formattedText.append("</DIV>"); |
