diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-04-18 14:52:34 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-04-18 14:52:34 +0000 |
| commit | d3ff118ab36af60f4d09e725864d6aab1577d609 (patch) | |
| tree | a4ad1da439b9a6c9066be5d0c1b94d288aacc5df /src | |
| parent | e2306a862056fcc2716b6b4b5a45ebaa1417f391 (diff) | |
| download | qmmp-d3ff118ab36af60f4d09e725864d6aab1577d609.tar.gz qmmp-d3ff118ab36af60f4d09e725864d6aab1577d609.tar.bz2 qmmp-d3ff118ab36af60f4d09e725864d6aab1577d609.zip | |
improved playlist regular expression parsing
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@346 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/mediafile.cpp | 43 | ||||
| -rw-r--r-- | src/ui/mediafile.h | 1 |
2 files changed, 34 insertions, 10 deletions
diff --git a/src/ui/mediafile.cpp b/src/ui/mediafile.cpp index ff5e1b3ed..1c8c1c996 100644 --- a/src/ui/mediafile.cpp +++ b/src/ui/mediafile.cpp @@ -137,16 +137,14 @@ void MediaFile::readMetadata() m_year = m_tag->year(); m_track = m_tag->track(); m_title = m_format; - m_title.replace("%p",m_tag->artist()); - m_title.replace("%a",m_tag->album()); - m_title.replace("%t",m_tag->title()); - m_title.replace("%n",QString("%1").arg(m_tag->track())); - m_title.replace("%g",m_tag->genre ()); - m_title.replace("%f",m_path.section('/',-1)); - m_title.replace("%F",m_path); - //m_title.replace("%d",); - m_title.replace("%y",QString("%1").arg(m_tag->year ())); - //m_title.replace("%c",); + m_title = printTag(m_title, "%p", m_tag->artist()); + m_title = printTag(m_title, "%a", m_tag->album()); + m_title = printTag(m_title, "%t", m_tag->title()); + m_title = printTag(m_title, "%n", QString("%1").arg(m_tag->track())); + m_title = printTag(m_title, "%g", m_tag->genre()); + m_title = printTag(m_title, "%f", m_path.section('/',-1)); + m_title = printTag(m_title, "%F", m_path); + m_title = printTag(m_title, "%y", QString("%1").arg(m_tag->year ())); } else m_title = m_path.startsWith("http://") ? m_path: m_path.section('/',-1); @@ -175,3 +173,28 @@ FileTag *MediaFile::tag() return m_tag; } +QString MediaFile::printTag(QString str, QString regExp, QString tagStr) +{ + if(!tagStr.isEmpty()) + str.replace(regExp, tagStr); + else + { + //remove unused separators + int regExpPos = str.indexOf(regExp); + if(regExpPos < 0) + return str; + int nextPos = str.indexOf("%", regExpPos + 1); + if(nextPos < 0) + { + //last separator + regExpPos = m_format.lastIndexOf(regExp); + nextPos = m_format.lastIndexOf("%", regExpPos - 1); + QString lastSep = m_format.right (m_format.size() - nextPos - 2); + str.remove(lastSep); + } + else + str.remove ( regExpPos, nextPos - regExpPos); + } + return str; +} + diff --git a/src/ui/mediafile.h b/src/ui/mediafile.h index abd40c4ad..7b012c98f 100644 --- a/src/ui/mediafile.h +++ b/src/ui/mediafile.h @@ -65,6 +65,7 @@ public: private: void readMetadata(); + QString printTag(QString str, QString regExp, QString tagStr); QString m_path; QString m_title; uint m_year, m_track; |
