aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-04-30 18:29:11 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-04-30 18:29:11 +0000
commitaa167f22dbbeb4c2b680bc860dbc409d5a447864 (patch)
treefd5a0ac440a784de26546e23acf798b042bec75b /src/qmmpui
parent4fa75cf5e6e7f0abe43d68342d1f7ff993c0c3f6 (diff)
downloadqmmp-aa167f22dbbeb4c2b680bc860dbc409d5a447864.tar.gz
qmmp-aa167f22dbbeb4c2b680bc860dbc409d5a447864.tar.bz2
qmmp-aa167f22dbbeb4c2b680bc860dbc409d5a447864.zip
changed playlist API, fixed some issues
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7940 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui')
-rw-r--r--src/qmmpui/detailsdialog.cpp6
-rw-r--r--src/qmmpui/fileloader.cpp6
-rw-r--r--src/qmmpui/mediaplayer.cpp8
-rw-r--r--src/qmmpui/metadataformatter.cpp6
-rw-r--r--src/qmmpui/metadataformatter.h4
-rw-r--r--src/qmmpui/playlistmanager.cpp30
-rw-r--r--src/qmmpui/playlistmodel.cpp22
-rw-r--r--src/qmmpui/playlistmodel.h6
-rw-r--r--src/qmmpui/playlistparser.cpp2
-rw-r--r--src/qmmpui/playlisttask.cpp4
-rw-r--r--src/qmmpui/playlisttrack.cpp47
-rw-r--r--src/qmmpui/playlisttrack.h16
12 files changed, 61 insertions, 96 deletions
diff --git a/src/qmmpui/detailsdialog.cpp b/src/qmmpui/detailsdialog.cpp
index 386fd9676..6d6676765 100644
--- a/src/qmmpui/detailsdialog.cpp
+++ b/src/qmmpui/detailsdialog.cpp
@@ -132,16 +132,16 @@ void DetailsDialog::updatePage()
m_ui->pageLabel->setText(tr("%1/%2").arg(m_page + 1).arg(m_tracks.count()));
m_track = m_tracks.at(m_page);
- m_path = m_track->url();
+ m_path = m_track->path();
setWindowTitle (m_path.section('/',-1));
m_ui->pathEdit->setText(m_path);
//load metadata and create metadata model
QList <TrackInfo *> flist = MetaDataManager::instance()->createPlayList(m_path, TrackInfo::MetaData);
- if(!flist.isEmpty() && QFile::exists(m_track->url()))
+ if(!flist.isEmpty() && QFile::exists(m_track->path()))
m_metaData = flist.at(0)->metaData();
else
- m_metaData = *m_track;
+ m_metaData = m_track->metaData();
qDeleteAll(flist);
QPixmap cover = MetaDataManager::instance()->getCover(m_path);
diff --git a/src/qmmpui/fileloader.cpp b/src/qmmpui/fileloader.cpp
index c9c13da68..b02f73bf6 100644
--- a/src/qmmpui/fileloader.cpp
+++ b/src/qmmpui/fileloader.cpp
@@ -61,7 +61,7 @@ void FileLoader::insertPlayList(const QString &fmt, const QByteArray &contents,
while (!tracks.isEmpty() && !m_finished)
{
PlayListTrack *t = tracks.takeFirst();
- QList <TrackInfo *> infoList = MetaDataManager::instance()->createPlayList(t->url(),
+ QList <TrackInfo *> infoList = MetaDataManager::instance()->createPlayList(t->path(),
m_use_meta ? TrackInfo::MetaData : TrackInfo::NoParts);
if(infoList.count() != 1) //invalid or unsupported track
{
@@ -90,7 +90,7 @@ void FileLoader::insertPlayList(const QString &path, PlayListItem *before)
while (!tracks.isEmpty() && !m_finished)
{
PlayListTrack *t = tracks.takeFirst();
- QList <TrackInfo *> infoList = MetaDataManager::instance()->createPlayList(t->url(), m_use_meta ? TrackInfo::MetaData : TrackInfo::NoParts);
+ QList <TrackInfo *> infoList = MetaDataManager::instance()->createPlayList(t->path(), m_use_meta ? TrackInfo::MetaData : TrackInfo::NoParts);
if(infoList.count() != 1) //invalid or unsupported track
{
qDeleteAll(infoList);
@@ -319,7 +319,7 @@ void FileLoader::removeIgnoredTracks(QList<PlayListTrack *> *tracks, const QStri
foreach(PlayListTrack *track, *tracks)
{
- if(ignoredPaths.contains(track->url()))
+ if(ignoredPaths.contains(track->path()))
{
tracks->removeAll(track);
delete track;
diff --git a/src/qmmpui/mediaplayer.cpp b/src/qmmpui/mediaplayer.cpp
index 9550e3210..a2581e694 100644
--- a/src/qmmpui/mediaplayer.cpp
+++ b/src/qmmpui/mediaplayer.cpp
@@ -82,7 +82,7 @@ void MediaPlayer::play(qint64 offset)
if (m_pl_manager->currentPlayList()->count() == 0)
return;
- QString s = m_pl_manager->currentPlayList()->currentTrack()->url();
+ QString s = m_pl_manager->currentPlayList()->currentTrack()->path();
if (s.isEmpty())
{
m_nextUrl.clear();
@@ -150,10 +150,10 @@ void MediaPlayer::updateNextUrl()
if(track)
{
- bool ok = m_core->play(track->url(), true);
+ bool ok = m_core->play(track->path(), true);
if(ok)
{
- m_nextUrl = track->url();
+ m_nextUrl = track->path();
qDebug("MediaPlayer: next track state: received");
}
else
@@ -207,7 +207,7 @@ void MediaPlayer::updateMetaData()
qDebug("== end of metadata ==");
PlayListModel *pl = m_pl_manager->currentPlayList();
- if (pl->currentTrack() && pl->currentTrack()->url() == m_core->metaData().value(Qmmp::URL))
+ if (pl->currentTrack() && pl->currentTrack()->path() == m_core->metaData().value(Qmmp::URL))
{
pl->currentTrack()->updateMetaData(m_core->metaData());
pl->updateMetaData();
diff --git a/src/qmmpui/metadataformatter.cpp b/src/qmmpui/metadataformatter.cpp
index de5159e80..bb019b442 100644
--- a/src/qmmpui/metadataformatter.cpp
+++ b/src/qmmpui/metadataformatter.cpp
@@ -98,12 +98,12 @@ const QString MetaDataFormatter::pattern() const
QString MetaDataFormatter::format(const PlayListTrack *item) const
{
- return format(*item, item->length(), item->trackIndex());
+ return format(item->metaData(), item->duration(), item->trackIndex());
}
-QString MetaDataFormatter::format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 length, int track) const
+QString MetaDataFormatter::format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 duration, int track) const
{
- return evalute(&m_nodes, &metaData, length, track).trimmed();
+ return evalute(&m_nodes, &metaData, duration, track).trimmed();
}
QString MetaDataFormatter::format(const TrackInfo *info, int track) const
diff --git a/src/qmmpui/metadataformatter.h b/src/qmmpui/metadataformatter.h
index e11fac6fd..d0446183d 100644
--- a/src/qmmpui/metadataformatter.h
+++ b/src/qmmpui/metadataformatter.h
@@ -73,10 +73,10 @@ public:
/*!
* Converts metadata to one string using template.
* @param metaData Metadata array.
- * @param length Length in seconds.
+ * @param duration Duration in milliseconds seconds.
* @param track Index of track.
*/
- QString format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 length = 0, int track = 0) const;
+ QString format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 duration = 0, int track = 0) const;
/*!
* Converts metadata of \b TrackInfo pointer \b info to one string using template.
* \param info pointer to \b TrackInfo object.
diff --git a/src/qmmpui/playlistmanager.cpp b/src/qmmpui/playlistmanager.cpp
index f18322b93..72846a830 100644
--- a/src/qmmpui/playlistmanager.cpp
+++ b/src/qmmpui/playlistmanager.cpp
@@ -276,32 +276,34 @@ void PlayListManager::readPlayLists()
else if (param == "file")
{
tracks << new PlayListTrack();
- tracks.last()->insert(Qmmp::URL, value);
+ tracks.last()->setPath(value);
}
else if (tracks.isEmpty())
continue;
else if (param == "title")
- tracks.last()->insert(Qmmp::TITLE, value);
+ tracks.last()->setValue(Qmmp::TITLE, value);
else if (param == "artist")
- tracks.last()->insert(Qmmp::ARTIST, value);
+ tracks.last()->setValue(Qmmp::ARTIST, value);
else if (param == "albumartist")
- tracks.last()->insert(Qmmp::ALBUMARTIST, value);
+ tracks.last()->setValue(Qmmp::ALBUMARTIST, value);
else if (param == "album")
- tracks.last()->insert(Qmmp::ALBUM, value);
+ tracks.last()->setValue(Qmmp::ALBUM, value);
else if (param == "comment")
- tracks.last()->insert(Qmmp::COMMENT, value);
+ tracks.last()->setValue(Qmmp::COMMENT, value);
else if (param == "genre")
- tracks.last()->insert(Qmmp::GENRE, value);
+ tracks.last()->setValue(Qmmp::GENRE, value);
else if (param == "composer")
- tracks.last()->insert(Qmmp::COMPOSER, value);
+ tracks.last()->setValue(Qmmp::COMPOSER, value);
else if (param == "year")
- tracks.last()->insert(Qmmp::YEAR, value);
+ tracks.last()->setValue(Qmmp::YEAR, value);
else if (param == "track")
- tracks.last()->insert(Qmmp::TRACK, value);
+ tracks.last()->setValue(Qmmp::TRACK, value);
else if (param == "disc")
- tracks.last()->insert(Qmmp::DISCNUMBER, value);
+ tracks.last()->setValue(Qmmp::DISCNUMBER, value);
+ else if (param == "duration")
+ tracks.last()->setDuration(value.toInt());
else if (param == "length")
- tracks.last()->setLength(value.toInt());
+ tracks.last()->setDuration(value.toInt() * 1000);
}
buffer.close();
if(m_models.isEmpty())
@@ -348,7 +350,7 @@ void PlayListManager::writePlayLists()
if(m->isGroup())
continue;
PlayListTrack *t = dynamic_cast<PlayListTrack *>(m);
- tmpFile.write(QString("file=%1\n").arg(t->url()).toUtf8());
+ tmpFile.write(QString("file=%1\n").arg(t->path()).toUtf8());
tmpFile.write(QString("title=%1\n").arg(t->value(Qmmp::TITLE)).toUtf8());
tmpFile.write(QString("artist=%1\n").arg(t->value(Qmmp::ARTIST)).toUtf8());
tmpFile.write(QString("albumartist=%1\n").arg(t->value(Qmmp::ALBUMARTIST)).toUtf8());
@@ -359,7 +361,7 @@ void PlayListManager::writePlayLists()
tmpFile.write(QString("year=%1\n").arg(t->value(Qmmp::YEAR)).toUtf8());
tmpFile.write(QString("track=%1\n").arg(t->value(Qmmp::TRACK)).toUtf8());
tmpFile.write(QString("disc=%1\n").arg(t->value(Qmmp::DISCNUMBER)).toUtf8());
- tmpFile.write(QString("length=%1\n").arg(t->length()).toUtf8());
+ tmpFile.write(QString("duration=%1\n").arg(t->duration()).toUtf8());
}
}
if(tmpFile.error() != QFile::NoError)
diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp
index 23c973646..c4ba37b68 100644
--- a/src/qmmpui/playlistmodel.cpp
+++ b/src/qmmpui/playlistmodel.cpp
@@ -43,7 +43,7 @@ PlayListModel::PlayListModel(const QString &name, QObject *parent)
{
qsrand(time(0));
m_ui_settings = QmmpUiSettings::instance();
- m_total_length = 0;
+ m_total_duration = 0;
m_current = 0;
m_stop_track = 0;
m_name = name;
@@ -92,7 +92,7 @@ void PlayListModel::setName(const QString &name)
void PlayListModel::add(PlayListTrack *track)
{
m_container->addTrack(track);
- m_total_length += track->length();
+ m_total_duration += track->duration();
int flags = 0;
if(m_container->trackCount() == 1)
@@ -133,7 +133,7 @@ void PlayListModel::add(QList<PlayListTrack *> tracks)
foreach(PlayListTrack *track, tracks)
{
- m_total_length += track->length();
+ m_total_duration += track->duration();
emit trackAdded(track);
}
preparePlayState();
@@ -154,7 +154,7 @@ void PlayListModel::add(const QStringList &paths)
void PlayListModel::insert(int index, PlayListTrack *track)
{
m_container->insertTrack(index, track);
- m_total_length += track->length();
+ m_total_duration += track->duration();
int flags = 0;
@@ -192,7 +192,7 @@ void PlayListModel::insert(int index, QList<PlayListTrack *> tracks)
foreach(PlayListTrack *track, tracks)
{
m_container->insertTrack(index, track);
- m_total_length += track->length();
+ m_total_duration += track->duration();
if(m_container->trackCount() == 1)
{
m_current_track = track;
@@ -381,7 +381,7 @@ void PlayListModel::clear()
m_stop_track = 0;
m_container->clear();
m_queued_songs.clear();
- m_total_length = 0;
+ m_total_duration = 0;
m_play_state->resetState();
emit listChanged(STRUCTURE | QUEUE | STOP_AFTER | CURRENT | SELECTION);
}
@@ -409,7 +409,7 @@ bool PlayListModel::contains(const QString &url)
PlayListTrack *t = track(i);
if(!t)
continue;
- if(t->url() == url)
+ if(t->path() == url)
return true;
}
return false;
@@ -567,8 +567,8 @@ int PlayListModel::removeTrackInternal(int i)
if(track->isSelected())
flags |= SELECTION;
- m_total_length -= track->length();
- m_total_length = qMax(0, m_total_length);
+ m_total_duration -= track->duration();
+ m_total_duration = qMax(Q_INT64_C(0), m_total_duration);
if(m_current_track == track)
{
@@ -667,9 +667,9 @@ int PlayListModel::firstSelectedLower(int row)
return -1;
}
-int PlayListModel::totalLength() const
+int PlayListModel::totalDuration() const
{
- return m_total_length;
+ return m_total_duration;
}
void PlayListModel::moveItems(int from, int to)
diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h
index 73f49ec1f..cdc492452 100644
--- a/src/qmmpui/playlistmodel.h
+++ b/src/qmmpui/playlistmodel.h
@@ -288,9 +288,9 @@ public:
*/
int firstSelectedLower(int row);
/*!
- * Returns total lenght in seconds of all songs.
+ * Returns total duration in milliseconds of all songs.
*/
- int totalLength() const;
+ int totalDuration() const;
/*!
* Loads playlist with \b f_name name.
*/
@@ -592,7 +592,7 @@ private:
SimpleSelection m_selection; /*!< This flyweight object represents current selection. */
QQueue <PlayListTrack*> m_queued_songs; /*!< Songs in play queue. */
PlayState* m_play_state; /*!< Current playing state (Normal or Shuffle) */
- int m_total_length;
+ qint64 m_total_duration;
FileLoader *m_loader;
QString m_name;
PlayListContainer *m_container;
diff --git a/src/qmmpui/playlistparser.cpp b/src/qmmpui/playlistparser.cpp
index 4b5dfc1c8..3f72b4cbc 100644
--- a/src/qmmpui/playlistparser.cpp
+++ b/src/qmmpui/playlistparser.cpp
@@ -142,7 +142,7 @@ QList<PlayListTrack *> PlayListParser::loadPlaylist(const QString &f_name)
url.replace("\\","/");
url.replace("//","/");
- t->insert(Qmmp::URL, url);
+ t->setValue(Qmmp::URL, url);
}
return tracks;
}
diff --git a/src/qmmpui/playlisttask.cpp b/src/qmmpui/playlisttask.cpp
index 482478b42..052f7006e 100644
--- a/src/qmmpui/playlisttask.cpp
+++ b/src/qmmpui/playlisttask.cpp
@@ -460,8 +460,8 @@ void PlayListTask::run()
//this code prevents re-addition of cue tracks
foreach (PlayListTrack *t, m_new_tracks)
{
- if((t->url().contains("://") && urls.contains(t->url())) ||
- ignoredFiles.contains(t->url()))
+ if((t->path().contains("://") && urls.contains(t->path())) ||
+ ignoredFiles.contains(t->path()))
{
m_new_tracks.removeAll(t);
delete t;
diff --git a/src/qmmpui/playlisttrack.cpp b/src/qmmpui/playlisttrack.cpp
index 76b12f65c..6840ee62b 100644
--- a/src/qmmpui/playlisttrack.cpp
+++ b/src/qmmpui/playlisttrack.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2017 by Ilya Kotov *
+ * Copyright (C) 2008-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -24,17 +24,16 @@
#include "metadatahelper_p.h"
#include "playlisttrack.h"
-PlayListTrack::PlayListTrack() : QMap<Qmmp::MetaData, QString>(), PlayListItem()
+PlayListTrack::PlayListTrack() : TrackInfo(), PlayListItem()
{
m_track_index = -1;
m_settings = QmmpUiSettings::instance();
m_helper = MetaDataHelper::instance();
- m_length = 0;
m_refCount = 0;
m_sheduledForDeletion = false;
}
-PlayListTrack::PlayListTrack(const PlayListTrack &other) : QMap<Qmmp::MetaData, QString>(other),
+PlayListTrack::PlayListTrack(const PlayListTrack &other) : TrackInfo(other),
PlayListItem()
{
m_track_index = -1;
@@ -49,18 +48,15 @@ PlayListTrack::PlayListTrack(const PlayListTrack &other) : QMap<Qmmp::MetaData,
m_titleFormats = other.m_titleFormats;
m_groupFormat = other.m_groupFormat;
setSelected(other.isSelected());
- m_length = other.m_length;
m_formattedLength = other.m_formattedLength;
}
-PlayListTrack::PlayListTrack(TrackInfo *info) : QMap<Qmmp::MetaData, QString>(info->metaData()),
+PlayListTrack::PlayListTrack(TrackInfo *info) : TrackInfo(*info),
PlayListItem()
{
m_track_index = -1;
m_settings = QmmpUiSettings::instance();
m_helper = MetaDataHelper::instance();
- m_length = info->duration();
- insert(Qmmp::URL, info->path());
m_refCount = 0;
m_sheduledForDeletion = false;
}
@@ -73,29 +69,28 @@ PlayListTrack::~PlayListTrack()
PlayListTrack &PlayListTrack::operator=(const PlayListTrack &other)
{
+ TrackInfo::operator =(other);
m_formattedTitles = other.m_formattedTitles;
m_group = other.m_group;
m_formattedLength = other.m_formattedLength;
m_titleFormats = other.m_titleFormats;
m_groupFormat = other.m_groupFormat;
setSelected(other.isSelected());
- m_length = other.m_length;
m_formattedLength = other.m_formattedLength;
return *this;
}
void PlayListTrack::updateMetaData(const QMap <Qmmp::MetaData, QString> &metaData)
{
- QMap <Qmmp::MetaData, QString>::operator =(metaData);
+ setValues(metaData);
m_formattedTitles.clear();
formatGroup();
}
void PlayListTrack::updateMetaData(TrackInfo *info)
{
- m_length = info->duration();
- QMap <Qmmp::MetaData, QString>::operator =(info->metaData());
- insert(Qmmp::URL, info->path());
+ setValues(info->metaData());
+ setPath(info->path());
m_formattedTitles.clear();
m_formattedLength.clear();
formatGroup();
@@ -226,31 +221,13 @@ const QStringList PlayListTrack::formattedTitles()
const QString PlayListTrack::formattedLength()
{
- if(m_length > 0 && m_formattedLength.isEmpty())
- {
- m_formattedLength = MetaDataFormatter::formatDuration(m_length);
- }
- else if(m_length == 0)
+ if(duration() > 0 && m_formattedLength.isEmpty())
+ m_formattedLength = MetaDataFormatter::formatDuration(duration());
+ else if(duration() <= 0 && !m_formattedLength.isEmpty())
m_formattedLength.clear();
return m_formattedLength;
}
-qint64 PlayListTrack::length() const
-{
- return m_length;
-}
-
-void PlayListTrack::setLength(qint64 length)
-{
- m_length = qMax(length, 0LL);
- m_formattedLength.clear();
-}
-
-const QString PlayListTrack::url() const
-{
- return value(Qmmp::URL);
-}
-
void PlayListTrack::formatTitle(int column)
{
m_formattedTitles[column] = m_helper->titleFormatter(column)->format(this);
@@ -269,7 +246,7 @@ void PlayListTrack::formatTitle(int column)
void PlayListTrack::formatGroup()
{
- if(length() == 0 && url().contains("://"))
+ if(duration() <= 0 && path().contains("://"))
{
m_group = qApp->translate("PlayListTrack", "Streams");
return;
diff --git a/src/qmmpui/playlisttrack.h b/src/qmmpui/playlisttrack.h
index d7dd90073..d8f7f7c82 100644
--- a/src/qmmpui/playlisttrack.h
+++ b/src/qmmpui/playlisttrack.h
@@ -20,7 +20,6 @@
#ifndef PLAYLISTTRACK_H
#define PLAYLISTTRACK_H
-#include <QMap>
#include <QStringList>
#include <qmmp/qmmp.h>
#include <qmmp/trackinfo.h>
@@ -34,7 +33,7 @@ class MetaDataHelper;
/** @brief The PlayListTrack class provides a track for use with the PlayListModel class.
* @author Ilya Kotov <forkotov02@ya.ru>
*/
-class QMMPUI_EXPORT PlayListTrack : public QMap <Qmmp::MetaData, QString>, public PlayListItem
+class QMMPUI_EXPORT PlayListTrack : public TrackInfo, public PlayListItem
{
public:
/*!
@@ -72,18 +71,6 @@ public:
*/
const QString formattedLength();
/*!
- * Returns song length in seconds.
- */
- qint64 length() const;
- /*!
- * Sets length in seconds.
- */
- void setLength(qint64 length);
- /*!
- * Same as url()
- */
- const QString url() const;
- /*!
* Updates current metadata.
* @param metaData Map with metadata values.
*/
@@ -147,7 +134,6 @@ private:
QStringList m_titleFormats;
QString m_groupFormat;
QmmpUiSettings *m_settings;
- qint64 m_length;
int m_refCount;
int m_track_index;
bool m_sheduledForDeletion;