diff options
Diffstat (limited to 'src/ui/mediafile.cpp')
| -rw-r--r-- | src/ui/mediafile.cpp | 169 |
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; +} + |
