diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-08-05 08:21:43 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-08-05 08:21:43 +0000 |
| commit | 8d146b246e3da5d26b9501ca509a43ef4112e27d (patch) | |
| tree | c2f6afa22262a836e2178786fdd43b6b269c21c0 /src/plugins | |
| parent | b662d3c4f6c525f401d08ec710f4a76b0c30b0b7 (diff) | |
| download | qmmp-8d146b246e3da5d26b9501ca509a43ef4112e27d.tar.gz qmmp-8d146b246e3da5d26b9501ca509a43ef4112e27d.tar.bz2 qmmp-8d146b246e3da5d26b9501ca509a43ef4112e27d.zip | |
fixed remaing plugins
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8229 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
30 files changed, 114 insertions, 324 deletions
diff --git a/src/plugins/Engines/Engines.pro b/src/plugins/Engines/Engines.pro index abd780457..1dddcfd5d 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/Engines/mplayer/mplayerenginefactory.cpp b/src/plugins/Engines/mplayer/mplayerenginefactory.cpp index 965d8863f..141aae2fe 100644 --- a/src/plugins/Engines/mplayer/mplayerenginefactory.cpp +++ b/src/plugins/Engines/mplayer/mplayerenginefactory.cpp @@ -66,8 +66,9 @@ QList<TrackInfo *> MplayerEngineFactory::createPlayList(const QString &path, Tra return info; } -MetaDataModel* MplayerEngineFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* MplayerEngineFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { + Q_UNUSED(readOnly); return new MplayerMetaDataModel(path, parent); } diff --git a/src/plugins/Engines/mplayer/mplayerenginefactory.h b/src/plugins/Engines/mplayer/mplayerenginefactory.h index 8084c712a..6be4a33c7 100644 --- a/src/plugins/Engines/mplayer/mplayerenginefactory.h +++ b/src/plugins/Engines/mplayer/mplayerenginefactory.h @@ -33,7 +33,7 @@ public: bool supports(const QString &source) const; AbstractEngine *create(QObject *parent = 0); 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/Engines/mplayer/mplayermetadatamodel.cpp b/src/plugins/Engines/mplayer/mplayermetadatamodel.cpp index efac4af80..f11cc9b75 100644 --- a/src/plugins/Engines/mplayer/mplayermetadatamodel.cpp +++ b/src/plugins/Engines/mplayer/mplayermetadatamodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 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,18 +24,19 @@ #include <QProcess> #include "mplayermetadatamodel.h" -MplayerMetaDataModel::MplayerMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) +MplayerMetaDataModel::MplayerMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(true, parent) { m_path = path; + setDialogHints(MetaDataModel::COMPLETE_PROPERTY_LIST); } MplayerMetaDataModel::~MplayerMetaDataModel() {} -QHash<QString, QString> MplayerMetaDataModel::audioProperties() +QList<MetaDataItem> MplayerMetaDataModel::extraProperties() const { - QHash<QString, QString> ap; - ap.insert(tr("Size"), QString("%1 ").arg(QFileInfo(m_path).size ()/1024)+tr("KB")); + QList<MetaDataItem> ep; + ep << MetaDataItem(tr("Size"), tr("%1 KiB").arg(QFileInfo(m_path).size ()/1024)); //regular expressions QRegExp rx_id_length("^ID_LENGTH=([0-9,.]+)*"); QRegExp rx_id_demuxer("^ID_DEMUXER=(.*)"); @@ -72,34 +73,34 @@ QHash<QString, QString> MplayerMetaDataModel::audioProperties() { //general info if (rx_id_length.indexIn(line) > -1) - ap.insert(tr("Length"),rx_id_length.cap(1)); //TODO use hh:mm:ss format + ep << MetaDataItem(tr("Length"),rx_id_length.cap(1)); //TODO use hh:mm:ss format else if (rx_id_demuxer.indexIn(line) > -1) - ap.insert(tr("Demuxer"), rx_id_demuxer.cap(1)); + ep << MetaDataItem(tr("Demuxer"), rx_id_demuxer.cap(1)); //video info else if (rx_id_video_format.indexIn(line) > -1) - ap.insert(tr("Video format"), rx_id_video_format.cap(1)); + ep << MetaDataItem(tr("Video format"), rx_id_video_format.cap(1)); else if (rx_id_video_fps.indexIn(line) > -1) - ap.insert(tr("FPS"), rx_id_video_fps.cap(1)); + ep << MetaDataItem(tr("FPS"), rx_id_video_fps.cap(1)); else if (rx_id_video_codec.indexIn(line) > -1) - ap.insert(tr("Video codec"), rx_id_video_codec.cap(1)); + ep << MetaDataItem(tr("Video codec"), rx_id_video_codec.cap(1)); else if (rx_id_video_aspect.indexIn(line) > -1) - ap.insert(tr("Aspect ratio"),rx_id_video_aspect.cap(1)); + ep << MetaDataItem(tr("Aspect ratio"),rx_id_video_aspect.cap(1)); else if (rx_id_video_bitrate.indexIn(line) > -1) - ap.insert(tr("Video bitrate"), rx_id_video_bitrate.cap(1)); + ep << MetaDataItem(tr("Video bitrate"), rx_id_video_bitrate.cap(1)); else if (rx_id_width.indexIn(line) > -1) width = rx_id_width.cap(1).toInt(); else if (rx_id_height.indexIn(line) > -1) height = rx_id_height.cap(1).toInt(); //audio info else if (rx_id_audio_codec.indexIn(line) > -1) - ap.insert(tr("Audio codec"),rx_id_audio_codec.cap(1)); + ep << MetaDataItem(tr("Audio codec"),rx_id_audio_codec.cap(1)); else if (rx_id_audio_rate.indexIn(line) > -1) - ap.insert(tr("Sample rate"), rx_id_audio_rate.cap(1)); + ep << MetaDataItem(tr("Sample rate"), rx_id_audio_rate.cap(1)); else if (rx_id_audio_bitrate.indexIn(line) > -1) - ap.insert(tr("Audio bitrate"), rx_id_audio_bitrate.cap(1)); + ep << MetaDataItem(tr("Audio bitrate"), rx_id_audio_bitrate.cap(1)); else if (rx_id_audio_nch.indexIn(line) > -1) - ap.insert(tr("Channels"), rx_id_audio_nch.cap(1)); + ep << MetaDataItem(tr("Channels"), rx_id_audio_nch.cap(1)); } - ap.insert(tr("Resolution"), QString("%1x%2").arg(width).arg(height)); - return ap; + ep << MetaDataItem(tr("Resolution"), QString("%1x%2").arg(width).arg(height)); + return ep; } diff --git a/src/plugins/Engines/mplayer/mplayermetadatamodel.h b/src/plugins/Engines/mplayer/mplayermetadatamodel.h index 2e8cb2100..604d633d1 100644 --- a/src/plugins/Engines/mplayer/mplayermetadatamodel.h +++ b/src/plugins/Engines/mplayer/mplayermetadatamodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 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 * @@ -29,7 +29,7 @@ Q_OBJECT public: MplayerMetaDataModel(const QString &path, QObject *parent); ~MplayerMetaDataModel(); - QHash<QString, QString> audioProperties(); + QList<MetaDataItem> extraProperties() const override; private: QString m_path; diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro index 5bee4dc29..498c5ff60 100644 --- a/src/plugins/Input/Input.pro +++ b/src/plugins/Input/Input.pro @@ -1,14 +1,14 @@ 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){ @@ -42,7 +42,7 @@ contains(CONFIG, SID_PLUGIN){ unix{ contains(CONFIG, AAC_PLUGIN){ -# SUBDIRS += aac + SUBDIRS += aac } @@ -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/aac/aac.pro b/src/plugins/Input/aac/aac.pro index 5be2bf90a..f7d618b51 100644 --- a/src/plugins/Input/aac/aac.pro +++ b/src/plugins/Input/aac/aac.pro @@ -4,12 +4,10 @@ TARGET = $$PLUGINS_PREFIX/Input/aac HEADERS += decoderaacfactory.h \ decoder_aac.h \ - aacfile.h \ - aacmetadatamodel.h + aacfile.h SOURCES += decoder_aac.cpp \ decoderaacfactory.cpp \ - aacfile.cpp \ - aacmetadatamodel.cpp + aacfile.cpp RESOURCES = translations/translations.qrc diff --git a/src/plugins/Input/aac/aacmetadatamodel.cpp b/src/plugins/Input/aac/aacmetadatamodel.cpp deleted file mode 100644 index c6adcc2c1..000000000 --- a/src/plugins/Input/aac/aacmetadatamodel.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2009-2018 by Ilya Kotov * - * forkotov02@ya.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 * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - -#include <QFile> -#include "aacfile.h" -#include "aacmetadatamodel.h" - -AACMetaDataModel::AACMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) -{ - m_path = path; -} - -AACMetaDataModel::~AACMetaDataModel() -{} - -QHash<QString, QString> AACMetaDataModel::audioProperties() -{ - QHash<QString, QString> ap; - QFile input(m_path); - if (!input.open(QIODevice::ReadOnly)) - return ap; - AACFile f(&input); - QString text; - text = QString("%1").arg(f.duration()/60000); - text +=":"+QString("%1").arg((f.duration()/1000)%60,2,10,QChar('0')); - ap.insert(tr("Length"), text); - text = QString("%1").arg(f.samplerate()); - ap.insert(tr("Sample rate"), text+" "+tr("Hz")); - text = QString("%1").arg(f.bitrate()); - ap.insert(tr("Bitrate"), text+" "+tr("kbps")); - text = QString("%1 "+tr("KB")).arg(input.size()/1024); - ap.insert(tr("File size"), text); - return ap; -} diff --git a/src/plugins/Input/aac/aacmetadatamodel.h b/src/plugins/Input/aac/aacmetadatamodel.h deleted file mode 100644 index 1a07b2dea..000000000 --- a/src/plugins/Input/aac/aacmetadatamodel.h +++ /dev/null @@ -1,38 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2009-2018 by Ilya Kotov * - * forkotov02@ya.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 * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - -#ifndef AACMETADATAMODEL_H -#define AACMETADATAMODEL_H - -#include <qmmp/metadatamodel.h> - -class AACMetaDataModel : public MetaDataModel -{ -Q_OBJECT -public: - AACMetaDataModel(const QString &path, QObject *parent); - ~AACMetaDataModel(); - QHash<QString, QString> audioProperties(); - -private: - QString m_path; -}; - -#endif // AACMETADATAMODEL_H diff --git a/src/plugins/Input/aac/decoderaacfactory.cpp b/src/plugins/Input/aac/decoderaacfactory.cpp index ef185f012..1589f9551 100644 --- a/src/plugins/Input/aac/decoderaacfactory.cpp +++ b/src/plugins/Input/aac/decoderaacfactory.cpp @@ -21,7 +21,6 @@ #include <QFile> #include <QMessageBox> #include "aacfile.h" -#include "aacmetadatamodel.h" #include "decoder_aac.h" #include "decoderaacfactory.h" @@ -89,9 +88,12 @@ QList<TrackInfo *> DecoderAACFactory::createPlayList(const QString &path, TrackI return QList<TrackInfo*>() << info; } -MetaDataModel* DecoderAACFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderAACFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { - return new AACMetaDataModel(path, parent); + Q_UNUSED(path); + Q_UNUSED(readOnly); + Q_UNUSED(parent); + return 0; } void DecoderAACFactory::showSettings(QWidget *) diff --git a/src/plugins/Input/aac/decoderaacfactory.h b/src/plugins/Input/aac/decoderaacfactory.h index 1ddb25e68..59afe89b2 100644 --- a/src/plugins/Input/aac/decoderaacfactory.h +++ b/src/plugins/Input/aac/decoderaacfactory.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 = true, QObject *parent = 0); void showSettings(QWidget *parent); void showAbout(QWidget *parent); QString translation() const; diff --git a/src/plugins/Input/archive/archive.pro b/src/plugins/Input/archive/archive.pro index a96f0e6b7..fc07b36ed 100644 --- a/src/plugins/Input/archive/archive.pro +++ b/src/plugins/Input/archive/archive.pro @@ -6,15 +6,13 @@ HEADERS += \ archiveinputdevice.h \ decoderarchivefactory.h \ decoder_archive.h \ - archivetagreader.h \ - archivemetadatamodel.h + archivetagreader.h SOURCES += \ archiveinputdevice.cpp \ decoderarchivefactory.cpp \ decoder_archive.cpp \ - archivetagreader.cpp \ - archivemetadatamodel.cpp + archivetagreader.cpp RESOURCES = translations/translations.qrc diff --git a/src/plugins/Input/archive/archivemetadatamodel.cpp b/src/plugins/Input/archive/archivemetadatamodel.cpp deleted file mode 100644 index 6509d3ca9..000000000 --- a/src/plugins/Input/archive/archivemetadatamodel.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 by Ilya Kotov * - * forkotov02@ya.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 * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - -#include "archiveinputdevice.h" -#include "archivetagreader.h" -#include "archivemetadatamodel.h" - -ArchiveMetaDataModel::ArchiveMetaDataModel(const QString &url, QObject *parent) : - MetaDataModel(parent) -{ - m_reader = 0; - m_input = 0; - m_url = url; -} - -ArchiveMetaDataModel::~ArchiveMetaDataModel() -{ - if(m_reader) - delete m_reader; - if(m_input) - delete m_input; -} - -QHash<QString, QString> ArchiveMetaDataModel::audioProperties() -{ - if(!m_input) - { - m_input = new ArchiveInputDevice(m_url); - if(m_input->isOpen()) - m_reader = new ArchiveTagReader(m_input, m_url); - } - - QHash <QString, QString> ap; - if(m_reader && m_reader->audioProperties()) - { - TagLib::AudioProperties *p = m_reader->audioProperties(); - ap.insert(tr("Length"), QString("%1:%2").arg(p->length()/60).arg(p->length()%60, 2, 10, QChar('0'))); - ap.insert(tr("Sample rate"), QString("%1 " + tr("Hz")).arg(p->sampleRate())); - ap.insert(tr("Channels"), QString("%1").arg(p->channels())); - ap.insert(tr("Bitrate"), QString("%1 " + tr("kbps")).arg(p->bitrate())); - ap.insert(tr("File size"), QString("%1 "+tr("KB")).arg(m_input->size()/1024)); - } - return ap; -} diff --git a/src/plugins/Input/archive/archivemetadatamodel.h b/src/plugins/Input/archive/archivemetadatamodel.h deleted file mode 100644 index b034ae7da..000000000 --- a/src/plugins/Input/archive/archivemetadatamodel.h +++ /dev/null @@ -1,46 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2016 by Ilya Kotov * - * forkotov02@ya.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 * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - -#ifndef ARCHIVEMETADATAMODEL_H -#define ARCHIVEMETADATAMODEL_H - -#include <QObject> -#include <qmmp/metadatamodel.h> - -class ArchiveInputDevice; -class ArchiveTagReader; - -class ArchiveMetaDataModel : public MetaDataModel -{ - Q_OBJECT -public: - explicit ArchiveMetaDataModel(const QString &url, QObject *parent = 0); - virtual ~ArchiveMetaDataModel(); - - QHash<QString, QString> audioProperties(); - -private: - ArchiveInputDevice *m_input; - ArchiveTagReader *m_reader; - QString m_url; - -}; - -#endif // ARCHIVEMETADATAMODEL_H diff --git a/src/plugins/Input/archive/decoderarchivefactory.cpp b/src/plugins/Input/archive/decoderarchivefactory.cpp index 8ebaefc00..3f64fff6d 100644 --- a/src/plugins/Input/archive/decoderarchivefactory.cpp +++ b/src/plugins/Input/archive/decoderarchivefactory.cpp @@ -25,7 +25,6 @@ #include "decoder_archive.h" #include "archivetagreader.h" #include "archiveinputdevice.h" -#include "archivemetadatamodel.h" #include "decoderarchivefactory.h" // DecoderArchiveFactory @@ -123,6 +122,7 @@ QList<TrackInfo *> DecoderArchiveFactory::createPlayList(const QString &path, Tr list.last()->setValue(Qmmp::BITRATE, ap->bitrate()); list.last()->setValue(Qmmp::SAMPLERATE, ap->sampleRate()); list.last()->setValue(Qmmp::CHANNELS, ap->channels()); + list.last()->setValue(Qmmp::FILE_SIZE, dev.size()); } if(ap) @@ -136,9 +136,12 @@ QList<TrackInfo *> DecoderArchiveFactory::createPlayList(const QString &path, Tr return list; } -MetaDataModel* DecoderArchiveFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderArchiveFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { - return new ArchiveMetaDataModel(path, parent); + Q_UNUSED(path); + Q_UNUSED(readOnly); + Q_UNUSED(parent); + return 0; } void DecoderArchiveFactory::showSettings(QWidget *) diff --git a/src/plugins/Input/archive/decoderarchivefactory.h b/src/plugins/Input/archive/decoderarchivefactory.h index e56b8837f..554186fc6 100644 --- a/src/plugins/Input/archive/decoderarchivefactory.h +++ b/src/plugins/Input/archive/decoderarchivefactory.h @@ -34,7 +34,7 @@ public: DecoderProperties properties() const; Decoder *create(const QString &url, 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 = true, QObject *parent = 0); void showSettings(QWidget *parent); void showAbout(QWidget *parent); QString translation() const; diff --git a/src/plugins/Input/cue/cuemetadatamodel.cpp b/src/plugins/Input/cue/cuemetadatamodel.cpp index d875ad993..366df20af 100644 --- a/src/plugins/Input/cue/cuemetadatamodel.cpp +++ b/src/plugins/Input/cue/cuemetadatamodel.cpp @@ -22,7 +22,7 @@ #include "cueparser.h" #include "cuemetadatamodel.h" -CUEMetaDataModel::CUEMetaDataModel(const QString &url, QObject *parent) : MetaDataModel(parent) +CUEMetaDataModel::CUEMetaDataModel(const QString &url, QObject *parent) : MetaDataModel(true, parent) { m_parser = new CUEParser(url); if (m_parser->count() == 0) @@ -39,19 +39,19 @@ CUEMetaDataModel::~CUEMetaDataModel() delete m_parser; } -QHash<QString, QString> CUEMetaDataModel::audioProperties() +QList<MetaDataItem> CUEMetaDataModel::extraProperties() const { - QHash <QString, QString> ap; + QList<MetaDataItem> ep; MetaDataModel *model = MetaDataManager::instance()->createMetaDataModel(m_path); if(model) { - ap = model->audioProperties(); - model->deleteLater(); + ep = model->extraProperties(); + delete model; } - return ap; + return ep; } -QString CUEMetaDataModel::coverPath() +QString CUEMetaDataModel::coverPath() const { return MetaDataManager::instance()->findCoverFile(m_path); } diff --git a/src/plugins/Input/cue/cuemetadatamodel.h b/src/plugins/Input/cue/cuemetadatamodel.h index cb0af08d8..eb448be0d 100644 --- a/src/plugins/Input/cue/cuemetadatamodel.h +++ b/src/plugins/Input/cue/cuemetadatamodel.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 * @@ -31,8 +31,8 @@ Q_OBJECT public: CUEMetaDataModel(const QString &url, QObject *parent); ~CUEMetaDataModel(); - QHash<QString, QString> audioProperties(); - QString coverPath(); + QList<MetaDataItem> extraProperties() const override; + QString coverPath() const override; private: CUEParser *m_parser; diff --git a/src/plugins/Input/cue/decodercuefactory.cpp b/src/plugins/Input/cue/decodercuefactory.cpp index 285a4776d..e3a118cdf 100644 --- a/src/plugins/Input/cue/decodercuefactory.cpp +++ b/src/plugins/Input/cue/decodercuefactory.cpp @@ -74,8 +74,9 @@ QList<TrackInfo *> DecoderCUEFactory::createPlayList(const QString &path, TrackI } } -MetaDataModel* DecoderCUEFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderCUEFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { + Q_UNUSED(readOnly); return path.startsWith("cue://") ? new CUEMetaDataModel(path, parent) : 0; } diff --git a/src/plugins/Input/cue/decodercuefactory.h b/src/plugins/Input/cue/decodercuefactory.h index 10969afc0..2610bfd99 100644 --- a/src/plugins/Input/cue/decodercuefactory.h +++ b/src/plugins/Input/cue/decodercuefactory.h @@ -35,7 +35,7 @@ public: DecoderProperties properties() const; Decoder *create(const QString &, QIODevice *); QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredPaths); - 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/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 diff --git a/src/plugins/Input/sndfile/decodersndfilefactory.cpp b/src/plugins/Input/sndfile/decodersndfilefactory.cpp index 7097fd87e..5d3a62179 100644 --- a/src/plugins/Input/sndfile/decodersndfilefactory.cpp +++ b/src/plugins/Input/sndfile/decodersndfilefactory.cpp @@ -208,7 +208,7 @@ QList<TrackInfo *> DecoderSndFileFactory::createPlayList(const QString &path, Tr return QList<TrackInfo *>() << info; } -MetaDataModel* DecoderSndFileFactory::createMetaDataModel(const QString&, QObject *) +MetaDataModel* DecoderSndFileFactory::createMetaDataModel(const QString&, bool, QObject *) { return 0; } diff --git a/src/plugins/Input/sndfile/decodersndfilefactory.h b/src/plugins/Input/sndfile/decodersndfilefactory.h index f15cea73e..3da0b57dc 100644 --- a/src/plugins/Input/sndfile/decodersndfilefactory.h +++ b/src/plugins/Input/sndfile/decodersndfilefactory.h @@ -34,7 +34,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 = true, QObject *parent = 0); void showSettings(QWidget *parent); void showAbout(QWidget *parent); QString translation() const; diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp index bed6f1eab..23f219fe8 100644 --- a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp +++ b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp @@ -160,10 +160,10 @@ QList<TrackInfo *> DecoderWavPackFactory::createPlayList(const QString &path, Tr return QList<TrackInfo *>() << info; } -MetaDataModel* DecoderWavPackFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderWavPackFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { if (!path.contains("://") || path.startsWith("wvpack://")) - return new WavPackMetaDataModel(path, parent); + return new WavPackMetaDataModel(path, readOnly, parent); else return 0; } diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.h b/src/plugins/Input/wavpack/decoderwavpackfactory.h index 86f21184f..b7b6f226b 100644 --- a/src/plugins/Input/wavpack/decoderwavpackfactory.h +++ b/src/plugins/Input/wavpack/decoderwavpackfactory.h @@ -34,7 +34,7 @@ public: DecoderProperties properties() const; Decoder *create(const QString &p, QIODevice *i); 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/wavpack/wavpackmetadatamodel.cpp b/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp index 756d7e859..8d9e9ac22 100644 --- a/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp +++ b/src/plugins/Input/wavpack/wavpackmetadatamodel.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,7 +22,8 @@ #include <qmmp/metadatamanager.h> #include "wavpackmetadatamodel.h" -WavPackMetaDataModel::WavPackMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) +WavPackMetaDataModel::WavPackMetaDataModel(const QString &path, bool readOnly, QObject *parent) + : MetaDataModel(readOnly, parent) { if(path.contains("://")) { @@ -34,13 +35,16 @@ WavPackMetaDataModel::WavPackMetaDataModel(const QString &path, QObject *parent) else m_path = path; - char err[80]; + char err[80] = {0}; + int flags = OPEN_WVC | OPEN_TAGS; + if(!readOnly) + flags |= OPEN_EDIT_TAGS; #if defined(Q_OS_WIN) && defined(OPEN_FILE_UTF8) m_ctx = WavpackOpenFileInput (m_path.toUtf8().constData(), - err, OPEN_WVC | OPEN_TAGS | OPEN_FILE_UTF8, 0); + err, flags | OPEN_FILE_UTF8, 0); #else m_ctx = WavpackOpenFileInput (m_path.toLocal8Bit().constData(), err, - OPEN_WVC | OPEN_EDIT_TAGS, 0); + flags, 0); #endif if (!m_ctx) { @@ -59,31 +63,24 @@ WavPackMetaDataModel::~WavPackMetaDataModel() WavpackCloseFile (m_ctx); } -QHash<QString, QString> WavPackMetaDataModel::audioProperties() +QList<MetaDataItem> WavPackMetaDataModel::extraProperties() const { - QHash<QString, QString> ap; + QList<MetaDataItem> ep; + if(!m_ctx) - return ap; - int length = (int) WavpackGetNumSamples(m_ctx)/WavpackGetSampleRate(m_ctx); - QString text = QString("%1").arg(length/60); - text +=":"+QString("%1").arg(length % 60, 2, 10, QChar('0')); - ap.insert(tr("Length"), text); - ap.insert(tr("Sample rate"), QString("%1 " + tr("Hz")).arg((int) WavpackGetSampleRate(m_ctx))); - ap.insert(tr("Channels"), QString("%1").arg((int) WavpackGetNumChannels(m_ctx))); - ap.insert(tr("Bitrate"), QString("%1 " + tr("kbps")) - .arg((int) WavpackGetAverageBitrate(m_ctx, WavpackGetNumChannels(m_ctx))/1000)); - ap.insert(tr("File size"), QString("%1 "+tr("KB")).arg(WavpackGetFileSize(m_ctx)/1024)); - ap.insert(tr("Ratio"), QString("%1").arg(WavpackGetRatio(m_ctx))); - ap.insert(tr("Version"), QString("%1").arg(WavpackGetVersion(m_ctx))); - return ap; + return ep; + + ep << MetaDataItem(tr("Ratio"), WavpackGetRatio(m_ctx)); + ep << MetaDataItem(tr("Version"), WavpackGetVersion(m_ctx)); + return ep; } -QList<TagModel* > WavPackMetaDataModel::tags() +QList<TagModel* > WavPackMetaDataModel::tags() const { return m_tags; } -QString WavPackMetaDataModel::coverPath() +QString WavPackMetaDataModel::coverPath() const { return MetaDataManager::instance()->findCoverFile(m_path); } diff --git a/src/plugins/Input/wavpack/wavpackmetadatamodel.h b/src/plugins/Input/wavpack/wavpackmetadatamodel.h index 8df5fc97a..8c28dfa4b 100644 --- a/src/plugins/Input/wavpack/wavpackmetadatamodel.h +++ b/src/plugins/Input/wavpack/wavpackmetadatamodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2015 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 * @@ -30,11 +30,11 @@ class WavPackMetaDataModel : public MetaDataModel { Q_OBJECT public: - WavPackMetaDataModel(const QString &path, QObject *parent); + WavPackMetaDataModel(const QString &path, bool readOnly, QObject *parent); ~WavPackMetaDataModel(); - QHash<QString, QString> audioProperties(); - QList<TagModel* > tags(); - QString coverPath(); + QList<MetaDataItem> extraProperties() const override; + QList<TagModel* > tags() const override; + QString coverPath() const override; private: WavpackContext *m_ctx; |
