aboutsummaryrefslogtreecommitdiff
path: root/src/ui/mediafile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/mediafile.cpp')
-rw-r--r--src/ui/mediafile.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/src/ui/mediafile.cpp b/src/ui/mediafile.cpp
new file mode 100644
index 000000000..6ffb5514f
--- /dev/null
+++ b/src/ui/mediafile.cpp
@@ -0,0 +1,169 @@
+/***************************************************************************
+ * Copyright (C) 2006 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 <decoder.h>
+
+#include "mediafile.h"
+
+MediaFile::MediaFile(const QString& path) : m_flag(FREE)
+{
+ m_selected = FALSE;
+ m_current = FALSE;
+ m_path = path;
+ m_tag = 0;
+
+ QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
+ m_use_meta = settings.value ("PlayList/load_metadata", TRUE).toBool();
+ //format
+ m_format = settings.value("PlayList/title_format", "%p - %t").toString();
+ if (m_use_meta && !path.startsWith("http://"))
+ {
+ m_tag = Decoder::createTag(path);
+ readMetadata();
+ }
+ else
+ m_title = m_path.startsWith("http://") ? m_path: m_path.section('/',-1);
+}
+
+
+MediaFile::~MediaFile()
+{
+ if (m_tag)
+ delete m_tag;
+}
+
+const QString MediaFile::path()const
+{
+ return m_path;
+}
+const QString MediaFile::fileName() const
+{
+ return m_path.section('/',-1);
+}
+
+const QString MediaFile::title() const
+{
+ return m_title;
+}
+
+int MediaFile::length() const
+{
+ if (m_tag)
+ return m_tag->length();
+ else
+ return 0;
+}
+
+void MediaFile::setSelected(bool yes)
+{
+ m_selected = yes;
+}
+
+bool MediaFile::isSelected() const
+{
+ return m_selected;
+}
+
+uint MediaFile::year() const
+{
+ return m_year;
+}
+
+bool MediaFile::isCurrent()
+{
+ return m_current;
+}
+
+void MediaFile::setCurrent(bool cur)
+{
+ m_current = cur;
+}
+
+void MediaFile::updateTags(const FileTag *tag)
+{
+ if (m_tag)
+ {
+ delete m_tag;
+ m_tag = 0;
+ }
+ if (!tag->isEmpty())
+ m_tag = new FileTag(*tag);
+ readMetadata();
+}
+
+void MediaFile::updateTags()
+{
+ if (m_path.startsWith("http://"))
+ return;
+ if (m_tag)
+ {
+ delete m_tag;
+ m_tag = 0;
+ }
+ m_tag = Decoder::createTag(m_path);
+ readMetadata();
+}
+
+void MediaFile::readMetadata()
+{
+ if (m_use_meta && m_tag && !m_tag->isEmpty())
+ {
+ m_year = m_tag->year();
+ 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",);
+ }
+ else
+ m_title = m_path.startsWith("http://") ? m_path: m_path.section('/',-1);
+}
+
+void MediaFile::changeTitle(const QString &newtitle)
+{
+ m_title = newtitle;
+}
+
+void MediaFile::setFlag(FLAGS f)
+{
+ m_flag = f;
+}
+
+
+MediaFile::FLAGS MediaFile::flag() const
+{
+ return m_flag;
+}
+
+FileTag *MediaFile::tag()
+{
+ if(m_tag && m_tag->isEmpty())
+ return 0;
+ return m_tag;
+}
+