diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-04-30 18:29:11 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-04-30 18:29:11 +0000 |
| commit | aa167f22dbbeb4c2b680bc860dbc409d5a447864 (patch) | |
| tree | fd5a0ac440a784de26546e23acf798b042bec75b | |
| parent | 4fa75cf5e6e7f0abe43d68342d1f7ff993c0c3f6 (diff) | |
| download | qmmp-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
27 files changed, 120 insertions, 155 deletions
diff --git a/src/plugins/General/hal/halplugin.cpp b/src/plugins/General/hal/halplugin.cpp index 6deabcfd3..dfea19cf9 100644 --- a/src/plugins/General/hal/halplugin.cpp +++ b/src/plugins/General/hal/halplugin.cpp @@ -243,7 +243,7 @@ void HalPlugin::addPath(const QString &path) { if(item->isGroup()) continue; - if (dynamic_cast<PlayListTrack *>(item)->url().startsWith(path)) + if (dynamic_cast<PlayListTrack *>(item)->path().startsWith(path)) return; } @@ -267,7 +267,7 @@ void HalPlugin::removePath(const QString &path) int i = 0; while (model->count() > 0 && i < model->count()) { - if (model->isTrack(i) && model->track(i)->url().startsWith(path)) + if (model->isTrack(i) && model->track(i)->path().startsWith(path)) model->removeTrack(i); else ++i; diff --git a/src/plugins/General/udisks2/udisks2plugin.cpp b/src/plugins/General/udisks2/udisks2plugin.cpp index d390d8824..8a37b00e1 100644 --- a/src/plugins/General/udisks2/udisks2plugin.cpp +++ b/src/plugins/General/udisks2/udisks2plugin.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013-2014 by Ilya Kotov * + * Copyright (C) 2013-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -217,7 +217,7 @@ void UDisks2Plugin::addPath(const QString &path) { if(item->isGroup()) continue; - if (dynamic_cast<PlayListTrack *>(item)->url().startsWith(path)) + if (dynamic_cast<PlayListTrack *>(item)->path().startsWith(path)) return; } @@ -241,7 +241,7 @@ void UDisks2Plugin::removePath(const QString &path) int i = 0; while (model->count() > 0 && i < model->count()) { - if (model->isTrack(i) && model->track(i)->url().startsWith(path)) + if (model->isTrack(i) && model->track(i)->path().startsWith(path)) model->removeTrack(i); else ++i; diff --git a/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp b/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp index feb31fa19..dca7bac33 100644 --- a/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp +++ b/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp @@ -62,13 +62,13 @@ QList<PlayListTrack *> M3UPlaylistFormat::decode(const QByteArray &contents) continue; out << new PlayListTrack(); - out.last()->insert(Qmmp::URL, str); + out.last()->setPath(str); if(hasExtInf) { - out.last()->setLength(length); - out.last()->insert(Qmmp::ARTIST, artist); - out.last()->insert(Qmmp::TITLE, title); + out.last()->setDuration(length * 1000); + out.last()->setValue(Qmmp::ARTIST, artist); + out.last()->setValue(Qmmp::TITLE, title); hasExtInf = false; } } @@ -84,19 +84,19 @@ QByteArray M3UPlaylistFormat::encode(const QList<PlayListTrack*> &contents, cons foreach(PlayListTrack* f, contents) { - QString info = "#EXTINF:" + QString::number(f->length()) + "," + formatter.format(f); + QString info = "#EXTINF:" + QString::number(f->duration() / 1000) + "," + formatter.format(f); out.append(info); - if(!f->url().contains("://") && f->url().startsWith(m3uDir)) + if(!f->path().contains("://") && f->path().startsWith(m3uDir)) { - QString p = f->url(); + QString p = f->path(); p.remove(0, m3uDir.size()); if(p.startsWith("/")) p.remove(0, 1); out.append(p); } else - out.append(f->url()); + out.append(f->path()); } return out.join("\n").toUtf8(); } diff --git a/src/plugins/PlayListFormats/pls/plsplaylistformat.cpp b/src/plugins/PlayListFormats/pls/plsplaylistformat.cpp index 1e96077dc..47ba32822 100644 --- a/src/plugins/PlayListFormats/pls/plsplaylistformat.cpp +++ b/src/plugins/PlayListFormats/pls/plsplaylistformat.cpp @@ -65,7 +65,7 @@ QList<PlayListTrack *> PLSPlaylistFormat::decode(const QByteArray &contents) { while(number > out.count()) out << new PlayListTrack(); - out[number - 1]->insert(Qmmp::URL, fileRegExp.cap(2)); + out[number - 1]->setPath(fileRegExp.cap(2)); } else error = true; @@ -76,8 +76,8 @@ QList<PlayListTrack *> PLSPlaylistFormat::decode(const QByteArray &contents) { while(number > out.count()) out << new PlayListTrack(); - out[number - 1]->insert(Qmmp::ARTIST, fullTitleRegExp.cap(2)); - out[number - 1]->insert(Qmmp::TITLE, fullTitleRegExp.cap(3)); + out[number - 1]->setValue(Qmmp::ARTIST, fullTitleRegExp.cap(2)); + out[number - 1]->setValue(Qmmp::TITLE, fullTitleRegExp.cap(3)); } else error = true; @@ -88,7 +88,7 @@ QList<PlayListTrack *> PLSPlaylistFormat::decode(const QByteArray &contents) { while(number > out.count()) out << new PlayListTrack(); - out[number - 1]->insert(Qmmp::TITLE, titleRegExp.cap(2)); + out[number - 1]->setValue(Qmmp::TITLE, titleRegExp.cap(2)); } else error = true; @@ -99,7 +99,7 @@ QList<PlayListTrack *> PLSPlaylistFormat::decode(const QByteArray &contents) { while(number > out.count()) out << new PlayListTrack(); - out[number - 1]->setLength(lengthRegExp.cap(2).toInt()); + out[number - 1]->setDuration(lengthRegExp.cap(2).toInt() * 1000); } else error = true; @@ -127,11 +127,11 @@ QByteArray PLSPlaylistFormat::encode(const QList<PlayListTrack *> &contents, con foreach(PlayListTrack *f, contents) { QString begin = "File" + QString::number(counter) + "="; - out.append(begin + f->url()); + out.append(begin + f->path()); begin = "Title" + QString::number(counter) + "="; out.append(begin + formatter.format(f)); begin = "Length" + QString::number(counter) + "="; - out.append(begin + QString::number(f->length())); + out.append(begin + QString::number(f->duration() / 1000)); counter++; } out << "NumberOfEntries=" + QString::number(contents.count()); diff --git a/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp b/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp index f20c83903..7a66bc7bb 100644 --- a/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp +++ b/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp @@ -72,29 +72,29 @@ QList<PlayListTrack*> XSPFPlaylistFormat::decode(const QByteArray &contents) { QUrl url(xml.text().toString()); if (url.scheme() == "file") //remove scheme for local files only - out.last()->insert(Qmmp::URL, QUrl::fromPercentEncoding(url.toString().toLatin1()).remove("file://")); + out.last()->setPath(QUrl::fromPercentEncoding(url.toString().toLatin1()).remove("file://")); else - out.last()->insert(Qmmp::URL, QUrl::fromPercentEncoding(url.toString().toLatin1())); + out.last()->setPath(QUrl::fromPercentEncoding(url.toString().toLatin1())); } else if(currentTag == "title") { - out.last()->insert(Qmmp::TITLE, xml.text().toString()); + out.last()->setValue(Qmmp::TITLE, xml.text().toString()); } else if(currentTag == "creator") { - out.last()->insert(Qmmp::ARTIST, xml.text().toString()); + out.last()->setValue(Qmmp::ARTIST, xml.text().toString()); } else if(currentTag == "annotation") { - out.last()->insert(Qmmp::COMMENT, xml.text().toString()); + out.last()->setValue(Qmmp::COMMENT, xml.text().toString()); } else if(currentTag == "album") { - out.last()->insert(Qmmp::ALBUM, xml.text().toString()); + out.last()->setValue(Qmmp::ALBUM, xml.text().toString()); } else if(currentTag == "meta" && xml.attributes().value("rel") == "year") { - out.last()->insert(Qmmp::YEAR, xml.text().toString()); + out.last()->setValue(Qmmp::YEAR, xml.text().toString()); } else xml.skipCurrentElement(); @@ -131,13 +131,13 @@ QByteArray XSPFPlaylistFormat::encode(const QList<PlayListTrack*> &files, const xml.writeStartElement("track"); QString url; - if (f->url().contains("://")) + if (f->path().contains("://")) { - url = QUrl::toPercentEncoding(f->url(), ":/"); + url = QUrl::toPercentEncoding(f->path(), ":/"); } - else if(f->url().startsWith(xspfDir)) //relative path + else if(f->path().startsWith(xspfDir)) //relative path { - QString p = f->url(); + QString p = f->path(); p.remove(0, xspfDir.size()); if(p.startsWith("/")) p.remove(0, 1); @@ -145,7 +145,7 @@ QByteArray XSPFPlaylistFormat::encode(const QList<PlayListTrack*> &files, const } else //absolute path { - url = QUrl::toPercentEncoding(QLatin1String("file://") + f->url(), ":/"); + url = QUrl::toPercentEncoding(QLatin1String("file://") + f->path(), ":/"); } xml.writeTextElement("location", url); diff --git a/src/plugins/Ui/qsui/listwidget.cpp b/src/plugins/Ui/qsui/listwidget.cpp index 5f231fb53..0a529addb 100644 --- a/src/plugins/Ui/qsui/listwidget.cpp +++ b/src/plugins/Ui/qsui/listwidget.cpp @@ -619,8 +619,8 @@ const QString ListWidget::getExtraString(PlayListItem *item) QString extra_string; PlayListTrack *track = static_cast<PlayListTrack *>(item); - if (m_show_protocol && track->url().contains("://")) - extra_string = "[" + track->url().split("://").at(0) + "]"; + if (m_show_protocol && track->path().contains("://")) + extra_string = "[" + track->path().split("://").at(0) + "]"; if (m_model->isQueued(track)) { @@ -721,7 +721,7 @@ void ListWidget::mouseMoveEvent(QMouseEvent *e) else if(m_popupWidget) { int index = indexAt(e->y()); - if(index < 0 || !m_model->isTrack(index) || m_popupWidget->url() != m_model->track(index)->url()) + if(index < 0 || !m_model->isTrack(index) || m_popupWidget->url() != m_model->track(index)->path()) m_popupWidget->deactivate(); } } diff --git a/src/plugins/Ui/qsui/mainwindow.cpp b/src/plugins/Ui/qsui/mainwindow.cpp index 7b5b209c9..9be5ff0b2 100644 --- a/src/plugins/Ui/qsui/mainwindow.cpp +++ b/src/plugins/Ui/qsui/mainwindow.cpp @@ -366,7 +366,7 @@ void MainWindow::playPause() void MainWindow::updateStatus() { int tracks = m_pl_manager->currentPlayList()->trackCount(); - int length = m_pl_manager->currentPlayList()->totalLength(); + int duration = m_pl_manager->currentPlayList()->totalDuration(); if(m_core->state() == Qmmp::Playing || m_core->state() == Qmmp::Paused) { @@ -377,7 +377,7 @@ void MainWindow::updateStatus() .arg(ap.channels()) .arg(ap.sampleRate()) .arg(tracks) - .arg(MetaDataFormatter::formatDuration(length * 1000, false)) //TODO use milliseconds + .arg(MetaDataFormatter::formatDuration(duration, false)) .arg(m_core->bitrate())); } else if(m_core->state() == Qmmp::Stopped) @@ -385,7 +385,7 @@ void MainWindow::updateStatus() m_statusLabel->setText(tr("<b>%1</b>|tracks: %2|total time: %3|") .arg(tr("Stopped")) .arg(tracks) - .arg(MetaDataFormatter::formatDuration(length * 1000))); //TODO use milliseconds + .arg(MetaDataFormatter::formatDuration(duration ))); } else m_statusLabel->clear(); @@ -894,7 +894,7 @@ void MainWindow::showMetaData() { PlayListModel *model = m_pl_manager->currentPlayList(); PlayListTrack *track = model->currentTrack(); - if(track && track->url() == m_core->metaData().value(Qmmp::URL)) + if(track && track->path() == m_core->metaData().value(Qmmp::URL)) { setWindowTitle(m_titleFormatter.format(track)); } diff --git a/src/plugins/Ui/qsui/popupwidget.cpp b/src/plugins/Ui/qsui/popupwidget.cpp index 47921a45d..dcad92917 100644 --- a/src/plugins/Ui/qsui/popupwidget.cpp +++ b/src/plugins/Ui/qsui/popupwidget.cpp @@ -91,7 +91,7 @@ void PopupWidget::prepare(PlayListTrack *track, QPoint pos) return; } - m_url = track->url(); + m_url = track->path(); m_label1->setText(m_formatter.format(track)); qApp->processEvents(); updateGeometry (); diff --git a/src/plugins/Ui/skinned/eqwidget.cpp b/src/plugins/Ui/skinned/eqwidget.cpp index 78ef021d9..f11074bfb 100644 --- a/src/plugins/Ui/skinned/eqwidget.cpp +++ b/src/plugins/Ui/skinned/eqwidget.cpp @@ -333,12 +333,12 @@ void EqWidget::saveAutoPreset() if (!track) return; //delete preset if it already exists - EQPreset* preset = findPreset(track->url().section("/",-1)); + EQPreset* preset = findPreset(track->path().section("/",-1)); if (preset) deletePreset(preset); //create new preset preset = new EQPreset(); - preset->setText(track->url().section("/",-1)); + preset->setText(track->path().section("/",-1)); preset->setPreamp(m_preamp->value()); for (int i = 0; i<10; ++i) { diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index e415aae71..4086a8f43 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -529,8 +529,8 @@ const QString ListWidget::getExtraString(int i) if(!track) return extra_string; - if (m_show_protocol && track->url().contains("://")) - extra_string = "[" + track->url().split("://").at(0) + "]"; + if (m_show_protocol && track->path().contains("://")) + extra_string = "[" + track->path().split("://").at(0) + "]"; if (m_model->isQueued(track)) { @@ -606,7 +606,7 @@ void ListWidget::mouseMoveEvent(QMouseEvent *e) else if(m_popupWidget) { int index = indexAt(e->y()); - if(index < 0 || !m_model->isTrack(index) || m_popupWidget->url() != m_model->track(index)->url()) + if(index < 0 || !m_model->isTrack(index) || m_popupWidget->url() != m_model->track(index)->path()) m_popupWidget->deactivate(); } } diff --git a/src/plugins/Ui/skinned/mainwindow.cpp b/src/plugins/Ui/skinned/mainwindow.cpp index 5108d71e9..388f1d71c 100644 --- a/src/plugins/Ui/skinned/mainwindow.cpp +++ b/src/plugins/Ui/skinned/mainwindow.cpp @@ -190,7 +190,7 @@ void MainWindow::showState(Qmmp::State state) { case Qmmp::Playing: if (m_pl_manager->currentPlayList()->currentTrack()) - m_equalizer->loadPreset(m_pl_manager->currentPlayList()->currentTrack()->url().section("/",-1)); + m_equalizer->loadPreset(m_pl_manager->currentPlayList()->currentTrack()->path().section("/",-1)); break; case Qmmp::Paused: break; @@ -203,7 +203,7 @@ void MainWindow::showState(Qmmp::State state) void MainWindow::showMetaData() { PlayListTrack *track = m_pl_manager->currentPlayList()->currentTrack(); - if (track && track->url() == m_core->metaData().value(Qmmp::URL)) + if (track && track->path() == m_core->metaData().value(Qmmp::URL)) { setWindowTitle(m_titleFormatter.format(track)); } diff --git a/src/plugins/Ui/skinned/playlist.cpp b/src/plugins/Ui/skinned/playlist.cpp index 13f9819f0..6c57fbd9f 100644 --- a/src/plugins/Ui/skinned/playlist.cpp +++ b/src/plugins/Ui/skinned/playlist.cpp @@ -576,8 +576,8 @@ void PlayList::setTime(qint64 time) if (SoundCore::instance()) { - QString str_length = formatTime (m_pl_manager->currentPlayList()->totalLength()) + - "/" + formatTime (SoundCore::instance()->duration()/1000); + QString str_length = formatTime (m_pl_manager->currentPlayList()->totalDuration() / 1000) + + "/" + formatTime (SoundCore::instance()->duration() / 1000); m_length_totalLength->display (str_length); m_length_totalLength->update(); } diff --git a/src/plugins/Ui/skinned/popupwidget.cpp b/src/plugins/Ui/skinned/popupwidget.cpp index 10fa811bc..ba82c359b 100644 --- a/src/plugins/Ui/skinned/popupwidget.cpp +++ b/src/plugins/Ui/skinned/popupwidget.cpp @@ -92,7 +92,7 @@ void PopupWidget::prepare(PlayListTrack *item, QPoint pos) m_url.clear(); return; } - m_url = item->url(); + m_url = item->path(); m_label1->setText(m_formatter.format(item)); qApp->processEvents(); updateGeometry (); diff --git a/src/qmmp/trackinfo.cpp b/src/qmmp/trackinfo.cpp index 6561bfb3b..6183649dc 100644 --- a/src/qmmp/trackinfo.cpp +++ b/src/qmmp/trackinfo.cpp @@ -82,19 +82,19 @@ const QString TrackInfo::path() const return m_path; } -const QString &TrackInfo::value(Qmmp::MetaData key) const +const QString TrackInfo::value(Qmmp::MetaData key) const { - return m_metaData.find(key).value(); + return m_metaData.value(key); } -const QString &TrackInfo::value(Qmmp::TrackProperty key) const +const QString TrackInfo::value(Qmmp::TrackProperty key) const { - return m_properties.find(key).value(); + return m_properties.value(key); } -const double &TrackInfo::value(Qmmp::ReplayGainKey key) const +double TrackInfo::value(Qmmp::ReplayGainKey key) const { - return m_replayGainInfo.find(key).value(); + return m_replayGainInfo.value(key); } const QMap<Qmmp::MetaData, QString> &TrackInfo::metaData() const diff --git a/src/qmmp/trackinfo.h b/src/qmmp/trackinfo.h index ed8538eeb..57aa36f2b 100644 --- a/src/qmmp/trackinfo.h +++ b/src/qmmp/trackinfo.h @@ -50,9 +50,9 @@ public: qint64 duration () const; bool isEmpty() const; const QString path() const; - const QString &value(Qmmp::MetaData key) const; - const QString &value(Qmmp::TrackProperty key) const; - const double &value(Qmmp::ReplayGainKey key) const; + const QString value(Qmmp::MetaData key) const; + const QString value(Qmmp::TrackProperty key) const; + double value(Qmmp::ReplayGainKey key) const; const QMap<Qmmp::MetaData, QString> &metaData() const; const QMap<Qmmp::TrackProperty, QString> &properties() const; const QMap<Qmmp::ReplayGainKey, double> &replayGainInfo() const; 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; |
