aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmpui/playlistitem.cpp9
-rw-r--r--src/qmmpui/playlistitem.h2
-rw-r--r--src/qmmpui/playlistmanager.cpp98
3 files changed, 68 insertions, 41 deletions
diff --git a/src/qmmpui/playlistitem.cpp b/src/qmmpui/playlistitem.cpp
index 21bc2fc1a..60422aee1 100644
--- a/src/qmmpui/playlistitem.cpp
+++ b/src/qmmpui/playlistitem.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008 by Ilya Kotov *
+ * Copyright (C) 2008-2009 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -27,6 +27,8 @@
PlayListItem::PlayListItem() : AbstractPlaylistItem(), m_flag(FREE)
{
m_info = 0;
+ m_selected = FALSE;
+ m_current = FALSE;
}
PlayListItem::PlayListItem(FileInfo *info) : AbstractPlaylistItem(), m_flag(FREE)
@@ -38,7 +40,6 @@ PlayListItem::PlayListItem(FileInfo *info) : AbstractPlaylistItem(), m_flag(FREE
setMetaData(info->metaData());
setMetaData(Qmmp::URL, m_info->path());
setLength(m_info->length());
- readMetadata();
}
PlayListItem::~PlayListItem()
@@ -102,8 +103,10 @@ void PlayListItem::updateTags()
delete list.takeLast();
}
-const QString PlayListItem::text() const
+const QString PlayListItem::text()
{
+ if(m_title.isEmpty())
+ readMetadata();
return m_title;
}
diff --git a/src/qmmpui/playlistitem.h b/src/qmmpui/playlistitem.h
index 5dc67d2df..86d89d50d 100644
--- a/src/qmmpui/playlistitem.h
+++ b/src/qmmpui/playlistitem.h
@@ -86,7 +86,7 @@ public:
/*!
* Returns item short title.
*/
- const QString text() const;
+ const QString text();
/*!
* Direct access to the item short title.
* @param title New short title.
diff --git a/src/qmmpui/playlistmanager.cpp b/src/qmmpui/playlistmanager.cpp
index bb4f10ebe..280de012c 100644
--- a/src/qmmpui/playlistmanager.cpp
+++ b/src/qmmpui/playlistmanager.cpp
@@ -222,8 +222,17 @@ void PlayListManager::setUseMetadata(bool yes)
void PlayListManager::setFormat(const QString &format)
{
- PlaylistSettings::instance()->setFormat(format);
- emit settingsChanged();
+ if(format != PlaylistSettings::instance()->format())
+ {
+ PlaylistSettings::instance()->setFormat(format);
+ emit settingsChanged();
+ foreach(PlayListModel *model, m_models)
+ {
+ foreach(PlayListItem *item, model->items())
+ item->setText(QString());
+ model->doCurrentVisibleRequest();
+ }
+ }
}
bool PlayListManager::isRepeatableList() const
@@ -239,8 +248,8 @@ bool PlayListManager::isShuffle() const
void PlayListManager::readPlayLists()
{
QString line, param, value;
- int s;
- QList <FileInfo *> infoList;
+ int s = 0, row = 0, pl = 0;
+ QList <PlayListItem *> items;
QFile file(QDir::homePath() +"/.qmmp/playlist.txt");
file.open(QIODevice::ReadOnly);
QByteArray array = file.readAll();
@@ -257,74 +266,89 @@ void PlayListManager::readPlayLists()
param = line.left(s);
value = line.right(line.size() - s - 1);
- if(param == "playlist")
+ if(param == "current_playlist")
+ pl = value.toInt();
+ else if(param == "playlist")
{
+
if(!m_models.isEmpty())
{
- foreach(FileInfo *info, infoList)
- m_models.last()->add(new PlayListItem(info));
+ m_models.last()->add(items);
+ m_models.last()->setCurrent(row);
}
- infoList.clear();
+ items.clear();
+ row = 0;
m_models << new PlayListModel(value, this);
}
+ else if (param == "current")
+ {
+ row = value.toInt();
+ }
else if (param == "file")
- infoList << new FileInfo(value);
- else if (infoList.isEmpty())
+ {
+ items << new PlayListItem();
+ items.last()->setMetaData(Qmmp::URL, value);
+ }
+ else if (items.isEmpty())
continue;
else if (param == "title")
- infoList.last()->setMetaData(Qmmp::TITLE, value);
+ items.last()->setMetaData(Qmmp::TITLE, value);
else if (param == "artist")
- infoList.last()->setMetaData(Qmmp::ARTIST, value);
+ items.last()->setMetaData(Qmmp::ARTIST, value);
else if (param == "album")
- infoList.last()->setMetaData(Qmmp::ALBUM, value);
+ items.last()->setMetaData(Qmmp::ALBUM, value);
else if (param == "comment")
- infoList.last()->setMetaData(Qmmp::COMMENT, value);
+ items.last()->setMetaData(Qmmp::COMMENT, value);
else if (param == "genre")
- infoList.last()->setMetaData(Qmmp::GENRE, value);
+ items.last()->setMetaData(Qmmp::GENRE, value);
else if (param == "composer")
- infoList.last()->setMetaData(Qmmp::COMPOSER, value);
+ items.last()->setMetaData(Qmmp::COMPOSER, value);
else if (param == "year")
- infoList.last()->setMetaData(Qmmp::YEAR, value);
+ items.last()->setMetaData(Qmmp::YEAR, value);
else if (param == "track")
- infoList.last()->setMetaData(Qmmp::TRACK, value);
+ items.last()->setMetaData(Qmmp::TRACK, value);
else if (param == "disc")
- infoList.last()->setMetaData(Qmmp::DISCNUMBER, value);
+ items.last()->setMetaData(Qmmp::DISCNUMBER, value);
else if (param == "length")
- infoList.last()->setLength(value.toInt());
+ items.last()->setLength(value.toInt());
}
buffer.close();
if(!m_models.isEmpty())
{
- foreach(FileInfo *info, infoList)
- m_models.last()->add(new PlayListItem(info));
+ m_models.last()->add(items);
+ m_models.last()->setCurrent(row);
}
else
- m_models << new PlayListModel("Default",this);
- m_selected = m_models.at(0);
- m_current = m_models.at(0);
+ m_models << new PlayListModel(tr("Playlist"),this);
+ if(pl < 0 || pl >= m_models.count())
+ pl = 0;
+ m_selected = m_models.at(pl);
+ m_current = m_models.at(pl);
}
void PlayListManager::writePlayLists()
{
QFile file(QDir::homePath() +"/.qmmp/playlist.txt");
file.open(QIODevice::WriteOnly);
+ file.write(QString("current_playlist=%1\n").arg(m_models.indexOf(m_current)).toUtf8());
foreach(PlayListModel *model, m_models)
{
QList<PlayListItem *> items = model->items();
- file.write(QString("playlist=%1").arg(model->name()).toUtf8() +"\n");
+ file.write(QString("playlist=%1\n").arg(model->name()).toUtf8());
+ file.write(QString("current=%1\n").arg(model->currentRow()).toUtf8());
foreach(PlayListItem* m, items)
{
- file.write(QString("file=%1").arg(m->url()).toUtf8() +"\n");
- file.write(QString("title=%1").arg(m->title()).toUtf8() +"\n");
- file.write(QString("artist=%1").arg(m->artist()).toUtf8() +"\n");
- file.write(QString("album=%1").arg(m->album()).toUtf8() +"\n");
- file.write(QString("comment=%1").arg(m->comment()).toUtf8() +"\n");
- file.write(QString("genre=%1").arg(m->genre()).toUtf8() +"\n");
- file.write(QString("composer=%1").arg(m->composer()).toUtf8() +"\n");
- file.write(QString("year=%1").arg(m->year()).toUtf8() +"\n");
- file.write(QString("track=%1").arg(m->track()).toUtf8() +"\n");
- file.write(QString("disc=%1").arg(m->discNumber()).toUtf8() +"\n");
- file.write(QString("length=%1").arg(m->length()).toUtf8() +"\n");
+ file.write(QString("file=%1\n").arg(m->url()).toUtf8());
+ file.write(QString("title=%1\n").arg(m->title()).toUtf8());
+ file.write(QString("artist=%1\n").arg(m->artist()).toUtf8());
+ file.write(QString("album=%1\n").arg(m->album()).toUtf8());
+ file.write(QString("comment=%1\n").arg(m->comment()).toUtf8());
+ file.write(QString("genre=%1\n").arg(m->genre()).toUtf8());
+ file.write(QString("composer=%1\n").arg(m->composer()).toUtf8());
+ file.write(QString("year=%1\n").arg(m->year()).toUtf8());
+ file.write(QString("track=%1\n").arg(m->track()).toUtf8());
+ file.write(QString("disc=%1\n").arg(m->discNumber()).toUtf8());
+ file.write(QString("length=%1\n").arg(m->length()).toUtf8());
}
}
file.close();