aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui/playlistitem.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-12-13 18:14:00 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-12-13 18:14:00 +0000
commit43ee25ac78884c3c579a555fee589f3677ea7f21 (patch)
tree313df92c490392b1e501b2cc27bc220335f938fc /src/qmmpui/playlistitem.cpp
parent2d3e4370a6b7729a30b833aa72c79b6a9d2afdb6 (diff)
downloadqmmp-43ee25ac78884c3c579a555fee589f3677ea7f21.tar.gz
qmmp-43ee25ac78884c3c579a555fee589f3677ea7f21.tar.bz2
qmmp-43ee25ac78884c3c579a555fee589f3677ea7f21.zip
moved playlist model to libqmmpui
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@679 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/playlistitem.cpp')
-rw-r--r--src/qmmpui/playlistitem.cpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/src/qmmpui/playlistitem.cpp b/src/qmmpui/playlistitem.cpp
new file mode 100644
index 000000000..bfbaa354c
--- /dev/null
+++ b/src/qmmpui/playlistitem.cpp
@@ -0,0 +1,179 @@
+/***************************************************************************
+ * Copyright (C) 2008 by Ilya Kotov *
+ * forkotov02@hotmail.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include <QSettings>
+#include <QDir>
+
+#include <qmmp/decoder.h>
+
+#include "playlistitem.h"
+
+PlayListItem::PlayListItem() : AbstractPlaylistItem(), m_flag(FREE)
+{
+ m_info = 0;
+}
+
+PlayListItem::PlayListItem(FileInfo *info, QSettings *settings) : AbstractPlaylistItem(), m_flag(FREE)
+{
+ m_selected = FALSE;
+ m_current = FALSE;
+ m_info = info;
+
+ //use external settings or create new
+ QSettings *s = settings;
+ if (!s)
+ s = new QSettings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
+
+ m_use_meta = s->value ("PlayList/load_metadata", TRUE).toBool(); //TODO move to libqmmp
+ //format
+ m_format = s->value("PlayList/title_format", "%p - %t").toString();
+ //other properties
+ m_convertUnderscore = s->value ("PlayList/convert_underscore", TRUE).toBool();
+ m_convertTwenty = s->value ("PlayList/convert_twenty", TRUE).toBool();
+ m_fullStreamPath = s->value ("PlayList/full_stream_path", FALSE).toBool();
+ if (!settings) //delete created settings only
+ delete s;
+
+ setMetaData(info->metaData());
+ setMetaData(Qmmp::URL, m_info->path());
+ setLength(m_info->length());
+ readMetadata();
+}
+
+PlayListItem::~PlayListItem()
+{
+ if (m_info)
+ delete m_info;
+}
+
+void PlayListItem::setSelected(bool yes)
+{
+ m_selected = yes;
+}
+
+bool PlayListItem::isSelected() const
+{
+ return m_selected;
+}
+
+void PlayListItem::setCurrent(bool yes)
+{
+ m_current = yes;
+}
+
+bool PlayListItem::isCurrent() const
+{
+ return m_current;
+}
+
+void PlayListItem::setFlag(FLAGS f)
+{
+ m_flag = f;
+}
+
+PlayListItem::FLAGS PlayListItem::flag() const
+{
+ return m_flag;
+}
+
+void PlayListItem::updateMetaData(const QMap <Qmmp::MetaData, QString> &metaData)
+{
+ setMetaData(metaData);
+ readMetadata();
+}
+
+void PlayListItem::updateTags()
+{
+ if (url().startsWith("http://"))
+ return;
+ if (m_info)
+ {
+ delete m_info;
+ m_info = 0;
+ }
+ m_info = Decoder::createPlayList(url()).at(0);
+ setMetaData(m_info->metaData());
+ setMetaData(Qmmp::URL, m_info->path());
+ readMetadata();
+}
+
+const QString PlayListItem::text() const
+{
+ return m_title;
+}
+
+void PlayListItem::setText(const QString &title)
+{
+ m_title = title;
+}
+
+void PlayListItem::readMetadata()
+{
+ m_title = m_format;
+ m_title = printTag(m_title, "%p", artist());
+ m_title = printTag(m_title, "%a", album());
+ m_title = printTag(m_title, "%t", title());
+ m_title = printTag(m_title, "%n", QString("%1").arg(track()));
+ m_title = printTag(m_title, "%g", genre());
+ m_title = printTag(m_title, "%f", url().section('/',-1));
+ m_title = printTag(m_title, "%F", url());
+ m_title = printTag(m_title, "%y", QString("%1").arg(year ()));
+
+ if (m_title.isEmpty())
+ {
+ if (url().startsWith("http://") && m_fullStreamPath)
+ m_title = url();
+ else
+ m_title = url().split('/',QString::SkipEmptyParts).takeLast ();
+ }
+ if (m_info)
+ delete m_info;
+ m_info = 0;
+ if (m_convertUnderscore)
+ m_title.replace("_", " ");
+ if (m_convertTwenty)
+ m_title.replace("%20", " ");
+}
+
+QString PlayListItem::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);
+ str.remove(regExp);
+ }
+ else
+ str.remove ( regExpPos, nextPos - regExpPos);
+ }
+ return str;
+}
+