aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ui/mediafile.cpp43
-rw-r--r--src/ui/mediafile.h1
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;