diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-07-22 13:34:48 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-07-22 13:34:48 +0000 |
| commit | fefbce2e2f26d5f74318baad54646fa1bb74b680 (patch) | |
| tree | f24c81dfafbc714033d086a416728246a35150d2 /src/qmmpui | |
| parent | ff28a947df32728be80c7739e377bcb3ea43861f (diff) | |
| download | qmmp-fefbce2e2f26d5f74318baad54646fa1bb74b680.tar.gz qmmp-fefbce2e2f26d5f74318baad54646fa1bb74b680.tar.bz2 qmmp-fefbce2e2f26d5f74318baad54646fa1bb74b680.zip | |
added track properties to title formatting fields
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8211 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui')
| -rw-r--r-- | src/qmmpui/metadataformatter.cpp | 65 | ||||
| -rw-r--r-- | src/qmmpui/metadataformatter.h | 11 | ||||
| -rw-r--r-- | src/qmmpui/metadataformattermenu.cpp | 15 |
3 files changed, 88 insertions, 3 deletions
diff --git a/src/qmmpui/metadataformatter.cpp b/src/qmmpui/metadataformatter.cpp index 84a426ce1..5373b0059 100644 --- a/src/qmmpui/metadataformatter.cpp +++ b/src/qmmpui/metadataformatter.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2015-2017 by Ilya Kotov * + * Copyright (C) 2015-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -37,6 +37,13 @@ Syntax: %y - year, %l - duration, %I - track index, +%{bitrate} - bitrate, +%{samplerate} - sample rate, +%{channels} - number of channels, +%{samplesize} - bits per sample, +%{format} - format name, +%{decoder} - decoder name, +%{filesize} - file size, %if(A,B,C) or %if(A&B&C,D,E) - condition, %dir(n) - Name of the directory located on n levels above. */ @@ -64,6 +71,13 @@ MetaDataFormatter::MetaDataFormatter(const QString &pattern) m_fieldNames.insert("l", Param::DURATION); m_fieldNames.insert("f", Param::FILE_NAME); m_fieldNames.insert("I", Param::TRACK_INDEX); + m_propertyNames.insert("bitrate", Qmmp::BITRATE); + m_propertyNames.insert("samplerate", Qmmp::SAMPLERATE); + m_propertyNames.insert("channels", Qmmp::CHANNELS); + m_propertyNames.insert("samplesize", Qmmp::BITS_PER_SAMPLE); + m_propertyNames.insert("format", Qmmp::FORMAT_NAME); + m_propertyNames.insert("decoder", Qmmp::DECODER); + m_propertyNames.insert("filesize", Qmmp::FILE_SIZE); if(!pattern.isEmpty()) setPattern(pattern); @@ -168,6 +182,39 @@ bool MetaDataFormatter::parseField(QList<Node> *nodes, QString::const_iterator * return false; } +bool MetaDataFormatter::parseProperty(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end) +{ + if((*i) + 1 == end || (*i) + 2 == end) + return false; + + if((**i) != QChar('{')) + return false; + + (*i)++; //skip '{' + + QString propertyName; + + while((*i) != end && (**i) != QChar('}')) + { + propertyName.append((**i)); + (*i)++; + } + + int field = m_propertyNames.value(propertyName, Qmmp::UNKNOWN); + if(field != Qmmp::UNKNOWN) + { + Node node; + node.command = Node::PRINT_TEXT; + Param param; + param.type = Param::PROPERTY; + param.field = field; + node.params.append(param); + nodes->append(node); + return true; + } + return false; +} + bool MetaDataFormatter::parseIf(QList<MetaDataFormatter::Node> *nodes, QString::const_iterator *i, QString::const_iterator end) { if((*i) + 1 == end || (*i) + 2 == end) @@ -452,6 +499,9 @@ QString MetaDataFormatter::printParam(MetaDataFormatter::Param *p, const TrackIn case Param::FIELD: return printField(p->field, info, trackIndex); break; + case Param::PROPERTY: + return printProperty(p->field, info); + break; case Param::TEXT: return p->text; break; @@ -507,6 +557,11 @@ QString MetaDataFormatter::printField(int field, const TrackInfo *info, int trac return QString(); } +QString MetaDataFormatter::printProperty(int field, const TrackInfo *info) const +{ + return info->value((Qmmp::TrackProperty) field); +} + QString MetaDataFormatter::dumpNode(MetaDataFormatter::Node node) const { QString str; @@ -524,6 +579,8 @@ QString MetaDataFormatter::dumpNode(MetaDataFormatter::Node node) const { if(p.type == Param::FIELD) params.append(QString("FIELD:%1").arg(p.field)); + else if(p.type == Param::PROPERTY) + params.append(QString("PROPERTY:%1").arg(p.field)); else if(p.type == Param::TEXT) params.append(QString("TEXT:%1").arg(p.text)); else if(p.type == Param::NUMERIC) @@ -568,6 +625,12 @@ QList<MetaDataFormatter::Node> MetaDataFormatter::compile(const QString &expr) continue; } + if(parseProperty(&nodes, &i, expr.constEnd())) + { + i++; + continue; + } + if(parseIf(&nodes, &i, expr.constEnd())) { i++; diff --git a/src/qmmpui/metadataformatter.h b/src/qmmpui/metadataformatter.h index 00dede227..1a582b91c 100644 --- a/src/qmmpui/metadataformatter.h +++ b/src/qmmpui/metadataformatter.h @@ -53,6 +53,13 @@ public: * %y - year, * %l - duration, * %I - track index, + * %{bitrate} - bitrate, + * %{samplerate} - sample rate, + * %{channels} - number of channels, + * %{samplesize} - bits per sample, + * %{format} - format name, + * %{decoder} - decoder name, + * %{filesize} - file size, * %if(A,B,C) or %if(A&B&C,D,E) - condition, * %dir(n) - Name of the directory located on \b n levels above. */ @@ -108,6 +115,7 @@ private: { enum { FIELD = 0, + PROPERTY, TEXT, NUMERIC, NODES @@ -130,6 +138,7 @@ private: }; bool parseField(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); + bool parseProperty(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); bool parseIf(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); bool parseDir(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); void parseText(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); @@ -138,6 +147,7 @@ private: QString evalute(const QList<Node> *nodes, const TrackInfo *info, int trackIndex) const; QString printParam(Param *p, const TrackInfo *info, int trackIndex) const; QString printField(int field, const TrackInfo *info, int trackIndex) const; + QString printProperty(int field, const TrackInfo *info) const; QString dumpNode(Node node) const; @@ -145,6 +155,7 @@ private: QString m_pattern; QList<MetaDataFormatter::Node> m_nodes; QMap<QString, int> m_fieldNames; + QMap<QString, int> m_propertyNames; }; #endif // METADATAFORMATTER2_H diff --git a/src/qmmpui/metadataformattermenu.cpp b/src/qmmpui/metadataformattermenu.cpp index cb946e73c..ca411d1cc 100644 --- a/src/qmmpui/metadataformattermenu.cpp +++ b/src/qmmpui/metadataformattermenu.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2017 by Ilya Kotov * + * Copyright (C) 2017-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -35,10 +35,10 @@ MetaDataFormatterMenu::MetaDataFormatterMenu(Type type, QWidget *parent) : addAction(tr("Genre"))->setData("%g"); addAction(tr("Comment"))->setData("%c"); addAction(tr("Composer"))->setData("%C"); - addAction(tr("Duration"))->setData("%l"); addAction(tr("Disc Number"))->setData("%D"); if(type == TITLE_MENU) { + addAction(tr("Duration"))->setData("%l"); addAction(tr("File Name"))->setData("%f"); addAction(tr("File Path"))->setData("%F"); } @@ -46,6 +46,17 @@ MetaDataFormatterMenu::MetaDataFormatterMenu(Type type, QWidget *parent) : addAction(tr("Condition"))->setData("%if(%p&%t,%p - %t,%f)"); addAction(tr("Artist - Title"))->setData("%if(%p,%p - %t,%t)"); addAction(tr("Parent Directory Name"))->setData("%dir(0)"); + addSeparator(); + addAction(tr("Bitrate"))->setData("%{bitrate}"); + addAction(tr("Sample Rate"))->setData("%{samplerate}"); + addAction(tr("Number of Channels"))->setData("%{channels}"); + addAction(tr("Sample Size"))->setData("%{samplesize}"); + addAction(tr("Format"))->setData("%{format}"); + addAction(tr("Decoder"))->setData("%{decoder}"); + if(type == TITLE_MENU) + { + addAction(tr("File Size"))->setData("%{filesize}"); + } connect(this, SIGNAL(triggered (QAction *)), SLOT(onActionTriggered(QAction*))); } |
