diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-02-09 19:41:49 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-02-09 19:41:49 +0000 |
| commit | 263fd1ab79ca6e2ccb01b5a6e9c49676ac5e1aeb (patch) | |
| tree | 1f304e64bde50e1a0476aee8e3b9f177a4996681 /src | |
| parent | c49be53818b69df4faf68edbaf4099471b434465 (diff) | |
| download | qmmp-263fd1ab79ca6e2ccb01b5a6e9c49676ac5e1aeb.tar.gz qmmp-263fd1ab79ca6e2ccb01b5a6e9c49676ac5e1aeb.tar.bz2 qmmp-263fd1ab79ca6e2ccb01b5a6e9c49676ac5e1aeb.zip | |
wavpack: added cue editor support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9715 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/wavpack/decoderwavpackfactory.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Input/wavpack/wavpackmetadatamodel.cpp | 48 | ||||
| -rw-r--r-- | src/plugins/Input/wavpack/wavpackmetadatamodel.h | 3 |
3 files changed, 50 insertions, 7 deletions
diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp index 7c3cafe50..bb599a817 100644 --- a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp +++ b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp @@ -131,6 +131,12 @@ QList<TrackInfo *> DecoderWavPackFactory::createPlayList(const QString &path, Tr delete info; return parser.createPlayList(track); } + else if(track > 0) + { + WavpackCloseFile(ctx); + delete info; + return QList<TrackInfo *>(); + } else { char value[200] = { 0 }; diff --git a/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp b/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp index df3a0e6fb..8d24aa51f 100644 --- a/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp +++ b/src/plugins/Input/wavpack/wavpackmetadatamodel.cpp @@ -19,16 +19,19 @@ ***************************************************************************/ #include <QMap> +#include <QFileInfo> #include <qmmp/metadatamanager.h> #include "wavpackmetadatamodel.h" -WavPackMetaDataModel::WavPackMetaDataModel(const QString &path, bool readOnly) : MetaDataModel(readOnly), +WavPackMetaDataModel::WavPackMetaDataModel(const QString &path, bool readOnly) : + MetaDataModel(readOnly, MetaDataModel::IsCueEditable), m_path(path) { if(m_path.contains("://")) { m_path.remove("wvpack://"); m_path.remove(QRegularExpression("#\\d+$")); + readOnly = readOnly || !QFileInfo(m_path).isWritable(); } char err[80] = {0}; @@ -36,25 +39,29 @@ WavPackMetaDataModel::WavPackMetaDataModel(const QString &path, bool readOnly) : if(!readOnly) flags |= OPEN_EDIT_TAGS; #if defined(Q_OS_WIN) && defined(OPEN_FILE_UTF8) - m_ctx = WavpackOpenFileInput (m_path.toUtf8().constData(), - err, flags | OPEN_FILE_UTF8, 0); + m_ctx = WavpackOpenFileInput(m_path.toUtf8().constData(), + err, flags | OPEN_FILE_UTF8, 0); #else - m_ctx = WavpackOpenFileInput (m_path.toLocal8Bit().constData(), err, - flags, 0); + m_ctx = WavpackOpenFileInput(m_path.toLocal8Bit().constData(), err, + flags, 0); #endif if (!m_ctx) { qWarning("WavPackMetaDataModel: error: %s", err); + setReadOnly(true); return; } if(!path.contains("://")) m_tags << new WavPackFileTagModel(m_ctx); + + setReadOnly(!(flags & OPEN_EDIT_TAGS)); } WavPackMetaDataModel::~WavPackMetaDataModel() { - while(!m_tags.isEmpty()) - delete m_tags.takeFirst(); + qDeleteAll(m_tags); + m_tags.clear(); + if(m_ctx) WavpackCloseFile(m_ctx); } @@ -81,6 +88,33 @@ QString WavPackMetaDataModel::coverPath() const return MetaDataManager::instance()->findCoverFile(m_path); } +QString WavPackMetaDataModel::cue() const +{ + int len = WavpackGetTagItem(m_ctx, "cuesheet", nullptr, 0); + if(len > 0) + { + char value[len + 1]; + memset(value, 0, len + 1); + WavpackGetTagItem(m_ctx, "cuesheet", value, len + 1); + return QString::fromUtf8(value); + } + + return QString(); +} + +void WavPackMetaDataModel::setCue(const QString &content) +{ + QByteArray data = content.toUtf8(); + WavpackAppendTagItem(m_ctx, "cuesheet", data.data(), data.size()); + WavpackWriteTag(m_ctx); +} + +void WavPackMetaDataModel::removeCue() +{ + WavpackDeleteTagItem(m_ctx, "cuesheet"); + WavpackWriteTag(m_ctx); +} + WavPackFileTagModel::WavPackFileTagModel(WavpackContext *ctx) : TagModel(TagModel::Save), m_ctx(ctx) {} diff --git a/src/plugins/Input/wavpack/wavpackmetadatamodel.h b/src/plugins/Input/wavpack/wavpackmetadatamodel.h index 27f64d109..c7aabd9fc 100644 --- a/src/plugins/Input/wavpack/wavpackmetadatamodel.h +++ b/src/plugins/Input/wavpack/wavpackmetadatamodel.h @@ -35,6 +35,9 @@ public: QList<MetaDataItem> extraProperties() const override; QList<TagModel* > tags() const override; QString coverPath() const override; + QString cue() const; + void setCue(const QString &content) override; + void removeCue() override; private: WavpackContext *m_ctx; |
