aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-06-14 20:52:58 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-06-14 20:52:58 +0000
commitd83f80c17d8f4272a42425d62aeb4cbb3d896e1d (patch)
tree5ae354a5ccbf156f4ebcc6c6a358973b1015cc88 /src/qmmpui
parentb2eb788e01c0ec9b6f7369a3187260e1debc2d16 (diff)
downloadqmmp-d83f80c17d8f4272a42425d62aeb4cbb3d896e1d.tar.gz
qmmp-d83f80c17d8f4272a42425d62aeb4cbb3d896e1d.tar.bz2
qmmp-d83f80c17d8f4272a42425d62aeb4cbb3d896e1d.zip
playlist reading/writing optimization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8037 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui')
-rw-r--r--src/qmmpui/playlistmanager.cpp108
-rw-r--r--src/qmmpui/playlistmanager.h4
2 files changed, 52 insertions, 60 deletions
diff --git a/src/qmmpui/playlistmanager.cpp b/src/qmmpui/playlistmanager.cpp
index e0d72ab60..febc5162d 100644
--- a/src/qmmpui/playlistmanager.cpp
+++ b/src/qmmpui/playlistmanager.cpp
@@ -24,6 +24,7 @@
#include <QDir>
#include <QTimer>
#include <QSettings>
+#include <QMap>
#include <QSaveFile>
#include <qmmp/trackinfo.h>
#include "qmmpuisettings.h"
@@ -44,6 +45,23 @@ PlayListManager::PlayListManager(QObject *parent) : QObject(parent)
m_timer->setInterval(5000);
m_timer->setSingleShot(true);
connect(m_timer, SIGNAL(timeout()), SLOT(writePlayLists()));
+ //key names
+ m_metaKeys.insert("title", Qmmp::TITLE);
+ m_metaKeys.insert("artist", Qmmp::ARTIST);
+ m_metaKeys.insert("albumartist", Qmmp::ALBUMARTIST);
+ m_metaKeys.insert("album", Qmmp::ALBUM);
+ m_metaKeys.insert("comment", Qmmp::COMMENT);
+ m_metaKeys.insert("genre", Qmmp::GENRE);
+ m_metaKeys.insert("composer", Qmmp::COMPOSER);
+ m_metaKeys.insert("year", Qmmp::YEAR);
+ m_metaKeys.insert("track", Qmmp::TRACK);
+ m_metaKeys.insert("disk", Qmmp::DISCNUMBER);
+ m_propKeys.insert("samplerate", Qmmp::SAMPLERATE);
+ m_propKeys.insert("channels", Qmmp::CHANNELS);
+ m_propKeys.insert("bits_per_sample", Qmmp::BITS_PER_SAMPLE);
+ m_propKeys.insert("format_name", Qmmp::FORMAT_NAME);
+ m_propKeys.insert("decoder", Qmmp::DECODER);
+ m_propKeys.insert("file_size", Qmmp::FILE_SIZE);
readPlayLists(); //read playlists
}
@@ -238,7 +256,9 @@ PlayListHeaderModel *PlayListManager::headerModel()
void PlayListManager::readPlayLists()
{
- QString line, param, value;
+ Qmmp::MetaData metaKey;
+ Qmmp::TrackProperty propKey;
+ QString line, key, value;
int s = 0, current = 0, pl = 0;
QList <PlayListTrack *> tracks;
QFile file(Qmmp::configDir() + "/playlist.txt");
@@ -254,12 +274,12 @@ void PlayListManager::readPlayLists()
if ((s = line.indexOf("=")) < 0)
continue;
- param = line.left(s);
+ key = line.left(s);
value = line.right(line.size() - s - 1);
- if(param == "current_playlist")
+ if(key == "current_playlist")
pl = value.toInt();
- else if(param == "playlist")
+ else if(key == "playlist")
{
if(!m_models.isEmpty() && !tracks.isEmpty())
{
@@ -270,55 +290,25 @@ void PlayListManager::readPlayLists()
current = 0;
m_models << new PlayListModel(value, this);
}
- else if (param == "current")
+ else if (key == "current")
{
current = value.toInt();
}
- else if (param == "file")
+ else if (key == "file")
{
tracks << new PlayListTrack();
tracks.last()->setPath(value);
}
else if (tracks.isEmpty())
continue;
- else if (param == "title")
- tracks.last()->setValue(Qmmp::TITLE, value);
- else if (param == "artist")
- tracks.last()->setValue(Qmmp::ARTIST, value);
- else if (param == "albumartist")
- tracks.last()->setValue(Qmmp::ALBUMARTIST, value);
- else if (param == "album")
- tracks.last()->setValue(Qmmp::ALBUM, value);
- else if (param == "comment")
- tracks.last()->setValue(Qmmp::COMMENT, value);
- else if (param == "genre")
- tracks.last()->setValue(Qmmp::GENRE, value);
- else if (param == "composer")
- tracks.last()->setValue(Qmmp::COMPOSER, value);
- else if (param == "year")
- tracks.last()->setValue(Qmmp::YEAR, value);
- else if (param == "track")
- tracks.last()->setValue(Qmmp::TRACK, value);
- else if (param == "disc")
- tracks.last()->setValue(Qmmp::DISCNUMBER, value);
- else if (param == "duration")
+ else if (key == "duration")
tracks.last()->setDuration(value.toInt());
- else if (param == "length")
+ else if (key == "length")
tracks.last()->setDuration(value.toInt() * 1000);
- else if (param == "bitrate")
- tracks.last()->setValue(Qmmp::BITRATE, value);
- else if (param == "samplerate")
- tracks.last()->setValue(Qmmp::SAMPLERATE, value);
- else if (param == "channels")
- tracks.last()->setValue(Qmmp::CHANNELS, value);
- else if (param == "bits_per_sample")
- tracks.last()->setValue(Qmmp::BITS_PER_SAMPLE, value);
- else if (param == "format_name")
- tracks.last()->setValue(Qmmp::FORMAT_NAME, value);
- else if (param == "decoder")
- tracks.last()->setValue(Qmmp::DECODER, value);
- else if (param == "file_size")
- tracks.last()->setValue(Qmmp::FILE_SIZE, value);
+ else if((metaKey = m_metaKeys.value(key, Qmmp::UNKNOWN)) != Qmmp::UNKNOWN)
+ tracks.last()->setValue(metaKey, value);
+ else if((propKey = m_propKeys.value(key, Qmmp::UNKNOWN_PROPERTY)) != Qmmp::UNKNOWN_PROPERTY)
+ tracks.last()->setValue(propKey, value);
}
buffer.close();
if(m_models.isEmpty())
@@ -344,6 +334,7 @@ void PlayListManager::readPlayLists()
void PlayListManager::writePlayLists()
{
qDebug("PlayListManager: saving playlists...");
+ QString value;
QString plFilePath = Qmmp::configDir() + "/playlist.txt";
QSaveFile plFile(plFilePath);
if(!plFile.open(QIODevice::WriteOnly))
@@ -365,24 +356,21 @@ void PlayListManager::writePlayLists()
continue;
PlayListTrack *t = dynamic_cast<PlayListTrack *>(m);
plFile.write(QString("file=%1\n").arg(t->path()).toUtf8());
- plFile.write(QString("title=%1\n").arg(t->value(Qmmp::TITLE)).toUtf8());
- plFile.write(QString("artist=%1\n").arg(t->value(Qmmp::ARTIST)).toUtf8());
- plFile.write(QString("albumartist=%1\n").arg(t->value(Qmmp::ALBUMARTIST)).toUtf8());
- plFile.write(QString("album=%1\n").arg(t->value(Qmmp::ALBUM)).toUtf8());
- plFile.write(QString("comment=%1\n").arg(t->value(Qmmp::COMMENT)).toUtf8());
- plFile.write(QString("genre=%1\n").arg(t->value(Qmmp::GENRE)).toUtf8());
- plFile.write(QString("composer=%1\n").arg(t->value(Qmmp::COMPOSER)).toUtf8());
- plFile.write(QString("year=%1\n").arg(t->value(Qmmp::YEAR)).toLatin1());
- plFile.write(QString("track=%1\n").arg(t->value(Qmmp::TRACK)).toLatin1());
- plFile.write(QString("disc=%1\n").arg(t->value(Qmmp::DISCNUMBER)).toLatin1());
- plFile.write(QString("duration=%1\n").arg(t->duration()).toLatin1());
- plFile.write(QString("bitrate=%1\n").arg(t->value(Qmmp::BITRATE)).toLatin1());
- plFile.write(QString("samplerate=%1\n").arg(t->value(Qmmp::SAMPLERATE)).toLatin1());
- plFile.write(QString("channels=%1\n").arg(t->value(Qmmp::CHANNELS)).toLatin1());
- plFile.write(QString("bits_per_sample=%1\n").arg(t->value(Qmmp::BITS_PER_SAMPLE)).toLatin1());
- plFile.write(QString("format_name=%1\n").arg(t->value(Qmmp::FORMAT_NAME)).toLatin1());
- plFile.write(QString("decoder=%1\n").arg(t->value(Qmmp::DECODER)).toLatin1());
- plFile.write(QString("file_size=%1\n").arg(t->value(Qmmp::FILE_SIZE)).toLatin1());
+
+ foreach(Qmmp::MetaData metaKey, m_metaKeys.values())
+ {
+ if(!(value = t->value(metaKey)).isEmpty())
+ plFile.write(QString("%1=%2\n").arg(m_metaKeys.key(metaKey)).arg(value).toUtf8());
+ }
+
+ foreach(Qmmp::TrackProperty propKey, m_propKeys.values())
+ {
+ if(!(value = t->value(propKey)).isEmpty())
+ plFile.write(QString("%1=%2\n").arg(m_propKeys.key(propKey)).arg(value).toLatin1());
+ }
+
+ if(t->duration() > 0)
+ plFile.write(QString("duration=%1\n").arg(t->duration()).toLatin1());
}
}
plFile.commit();
diff --git a/src/qmmpui/playlistmanager.h b/src/qmmpui/playlistmanager.h
index 9c86ff25e..2dc444441 100644
--- a/src/qmmpui/playlistmanager.h
+++ b/src/qmmpui/playlistmanager.h
@@ -21,6 +21,8 @@
#define PLAYLISTMANAGER_H
#include <QObject>
+#include <QMap>
+#include <qmmp/qmmp.h>
#include "playlistheadermodel.h"
#include "playlistmodel.h"
#include "qmmpui_export.h"
@@ -263,6 +265,8 @@ private:
QTimer *m_timer;
PlayListHeaderModel *m_header;
QmmpUiSettings *m_ui_settings;
+ QMap<QString, Qmmp::TrackProperty> m_propKeys;
+ QMap<QString, Qmmp::MetaData> m_metaKeys;
};
#endif // PLAYLISTMANAGER_H