diff options
Diffstat (limited to 'src/plugins/Input/flac')
| -rw-r--r-- | src/plugins/Input/flac/decoderflacfactory.cpp | 4 | ||||
| -rw-r--r-- | src/plugins/Input/flac/decoderflacfactory.h | 2 | ||||
| -rw-r--r-- | src/plugins/Input/flac/flacmetadatamodel.cpp | 48 | ||||
| -rw-r--r-- | src/plugins/Input/flac/flacmetadatamodel.h | 13 |
4 files changed, 26 insertions, 41 deletions
diff --git a/src/plugins/Input/flac/decoderflacfactory.cpp b/src/plugins/Input/flac/decoderflacfactory.cpp index 78ea9608a..9de7a7c64 100644 --- a/src/plugins/Input/flac/decoderflacfactory.cpp +++ b/src/plugins/Input/flac/decoderflacfactory.cpp @@ -195,10 +195,10 @@ QList<TrackInfo*> DecoderFLACFactory::createPlayList(const QString &path, TrackI return QList<TrackInfo *>() << info; } -MetaDataModel* DecoderFLACFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderFLACFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { if (!path.contains("://") || path.startsWith("flac://")) - return new FLACMetaDataModel(path, parent); + return new FLACMetaDataModel(path, readOnly, parent); else return 0; } diff --git a/src/plugins/Input/flac/decoderflacfactory.h b/src/plugins/Input/flac/decoderflacfactory.h index 3bad513f8..623fa4d33 100644 --- a/src/plugins/Input/flac/decoderflacfactory.h +++ b/src/plugins/Input/flac/decoderflacfactory.h @@ -34,7 +34,7 @@ public: DecoderProperties properties() const; Decoder *create(const QString &, QIODevice *); QList<TrackInfo*> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredFiles); - 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/flac/flacmetadatamodel.cpp b/src/plugins/Input/flac/flacmetadatamodel.cpp index 33a37bdfa..80957de30 100644 --- a/src/plugins/Input/flac/flacmetadatamodel.cpp +++ b/src/plugins/Input/flac/flacmetadatamodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2016 by Ilya Kotov * + * Copyright (C) 2009-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -22,13 +22,15 @@ #include <taglib/tag.h> #include <taglib/fileref.h> #include <taglib/tmap.h> +#include <taglib/id3v2framefactory.h> #include <FLAC/all.h> #include <qmmp/metadatamanager.h> #include "flacmetadatamodel.h" -FLACMetaDataModel::FLACMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) +FLACMetaDataModel::FLACMetaDataModel(const QString &path, bool readOnly, QObject *parent) : MetaDataModel(true, parent) { m_file = 0; + m_stream = 0; if(path.startsWith("flac://")) { @@ -44,19 +46,24 @@ FLACMetaDataModel::FLACMetaDataModel(const QString &path, QObject *parent) : Met if(m_path.endsWith(".flac", Qt::CaseInsensitive)) { - TagLib::FLAC::File *f = new TagLib::FLAC::File(QStringToFileName(m_path)); + m_stream = new TagLib::FileStream(QStringToFileName(m_path), readOnly); + TagLib::FLAC::File *f = new TagLib::FLAC::File(m_stream, TagLib::ID3v2::FrameFactory::instance()); tag = f->xiphComment(); m_file = f; } else if(m_path.endsWith(".oga", Qt::CaseInsensitive)) { - TagLib::Ogg::FLAC::File *f = new TagLib::Ogg::FLAC::File(QStringToFileName(m_path)); + m_stream = new TagLib::FileStream(QStringToFileName(m_path), readOnly); + TagLib::Ogg::FLAC::File *f = new TagLib::Ogg::FLAC::File(m_stream); tag = f->tag(); m_file = f; } if(m_file && m_file->isValid() && !path.startsWith("flac://")) + { + setReadOnly(readOnly); m_tags << new VorbisCommentModel(tag, m_file); + } } FLACMetaDataModel::~FLACMetaDataModel() @@ -68,39 +75,16 @@ FLACMetaDataModel::~FLACMetaDataModel() delete m_file; m_file = 0; } + if(m_stream) + delete m_stream; } -QHash<QString, QString> FLACMetaDataModel::audioProperties() -{ - QHash<QString, QString> ap; - TagLib::AudioProperties *taglib_ap = 0; - qint64 size = 0; - - if(m_file && m_file->isValid()) - { - taglib_ap = m_file->audioProperties(); - size = m_file->length(); - } - - if(taglib_ap) - { - QString text = QString("%1").arg(taglib_ap->length()/60); - text +=":"+QString("%1").arg(taglib_ap->length()%60,2,10,QChar('0')); - ap.insert(tr("Length"), text); - ap.insert(tr("Sample rate"), QString("%1 " + tr("Hz")).arg(taglib_ap->sampleRate())); - ap.insert(tr("Channels"), QString("%1").arg(taglib_ap->channels())); - ap.insert(tr("Bitrate"), QString("%1 " + tr("kbps")).arg(taglib_ap->bitrate())); - ap.insert(tr("File size"), QString("%1 "+tr("KB")).arg(size/1000)); - } - return ap; -} - -QList<TagModel* > FLACMetaDataModel::tags() +QList<TagModel* > FLACMetaDataModel::tags() const { return m_tags; } -QPixmap FLACMetaDataModel::cover() +QPixmap FLACMetaDataModel::cover() const { //embedded cover QPixmap cover; @@ -118,7 +102,7 @@ QPixmap FLACMetaDataModel::cover() return cover; } -QString FLACMetaDataModel::coverPath() +QString FLACMetaDataModel::coverPath() const { return MetaDataManager::instance()->findCoverFile(m_path); } diff --git a/src/plugins/Input/flac/flacmetadatamodel.h b/src/plugins/Input/flac/flacmetadatamodel.h index 4dac83e2e..4116126a0 100644 --- a/src/plugins/Input/flac/flacmetadatamodel.h +++ b/src/plugins/Input/flac/flacmetadatamodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2016 by Ilya Kotov * + * Copyright (C) 2009-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -24,23 +24,24 @@ #include <taglib/flacfile.h> #include <taglib/oggflacfile.h> #include <taglib/xiphcomment.h> +#include <taglib/tfilestream.h> #include <qmmp/metadatamodel.h> class FLACMetaDataModel : public MetaDataModel { Q_OBJECT public: - FLACMetaDataModel(const QString &path, QObject *parent); + FLACMetaDataModel(const QString &path, bool readOnly, QObject *parent); ~FLACMetaDataModel(); - QHash<QString, QString> audioProperties(); - QList<TagModel* > tags(); - QPixmap cover(); - QString coverPath(); + QList<TagModel* > tags() const override; + QPixmap cover() const override; + QString coverPath() const override; private: QString m_path; QList<TagModel* > m_tags; TagLib::File *m_file; + TagLib::FileStream *m_stream; }; class VorbisCommentModel : public TagModel |
