diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-02-07 18:10:40 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-02-07 18:10:40 +0000 |
| commit | eee0a25a300bb11b24bdccffce6d69a116b677a4 (patch) | |
| tree | 82ec32e9362acf55efd5d1246fe6726efdeec518 /src | |
| parent | 2e0fe62b905d0c424e5a2e8389cd92d25807b210 (diff) | |
| download | qmmp-eee0a25a300bb11b24bdccffce6d69a116b677a4.tar.gz qmmp-eee0a25a300bb11b24bdccffce6d69a116b677a4.tar.bz2 qmmp-eee0a25a300bb11b24bdccffce6d69a116b677a4.zip | |
improved metadata updating
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9700 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/qmmpui/detailsdialog.cpp | 3 | ||||
| -rw-r--r-- | src/qmmpui/detailsdialog.h | 3 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.cpp | 54 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.h | 2 |
4 files changed, 58 insertions, 4 deletions
diff --git a/src/qmmpui/detailsdialog.cpp b/src/qmmpui/detailsdialog.cpp index 54b9b870c..bba2d9f6a 100644 --- a/src/qmmpui/detailsdialog.cpp +++ b/src/qmmpui/detailsdialog.cpp @@ -67,6 +67,9 @@ DetailsDialog::~DetailsDialog() } } + if(!m_modifiedPaths.isEmpty()) + emit metaDataChanged(m_modifiedPaths.values()); + if(m_metaDataModel) { delete m_metaDataModel; diff --git a/src/qmmpui/detailsdialog.h b/src/qmmpui/detailsdialog.h index 8ae97b512..9b380e537 100644 --- a/src/qmmpui/detailsdialog.h +++ b/src/qmmpui/detailsdialog.h @@ -57,6 +57,9 @@ public: QStringList modifiedPaths() const; +signals: + void metaDataChanged(const QStringList &paths); + private slots: void on_buttonBox_clicked(QAbstractButton *button); void on_tabWidget_currentChanged(int index); diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index 12d31992f..d4f4c6a50 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -18,7 +18,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include <QWidget> -#include <QtAlgorithms> #include <QTextStream> #include <algorithm> #include <time.h> @@ -674,9 +673,9 @@ void PlayListModel::showDetails(QWidget *parent) if(!selected_tracks.isEmpty()) { - QDialog *d = new DetailsDialog(selected_tracks, parent); + DetailsDialog *d = new DetailsDialog(selected_tracks, parent); d->setAttribute(Qt::WA_DeleteOnClose, true); - connect(d, SIGNAL(destroyed(QObject *)),SLOT(updateMetaData())); + connect(d, SIGNAL(metaDataChanged(QStringList)), SLOT(updateMetaData(QStringList))); d->show(); } } @@ -687,7 +686,7 @@ void PlayListModel::showDetailsForCurrent(QWidget *parent) { QDialog *d = new DetailsDialog(QList<PlayListTrack *>() << m_current_track, parent); d->setAttribute(Qt::WA_DeleteOnClose, true); - connect(d, SIGNAL(destroyed(QObject *)),SLOT(updateMetaData())); + connect(d, SIGNAL(metaDataChanged(QStringList)), SLOT(updateMetaData(QStringList))); d->show(); } } @@ -992,6 +991,53 @@ void PlayListModel::onTaskFinished() } } +void PlayListModel::updateMetaData(const QStringList &paths) +{ + if(m_container->isEmpty()) + return; + + QList<PlayListTrack *> tracksToRemove; + QList<PlayListTrack *> tracksToAdd; + + for(const QString &path : qAsConst(paths)) + { + QList<TrackInfo *> list = MetaDataManager::instance()->createPlayList(path); + + for(int i = 0; i < m_container->count(); ++i) + { + PlayListTrack *track = m_container->track(i); + if(!track) + continue; + + if(track->path() == path) + { + if(list.isEmpty()) //track is not available + tracksToRemove << track; + else if(list.count() == 1) + { + track->updateMetaData(list.first()); //update single track + } + else //replace single track by multiple tracks + { + track->updateMetaData(list.first()); //update existing track + delete list.takeFirst(); + for(const TrackInfo *info : qAsConst(list)) //add remaining tracks + tracksToAdd << new PlayListTrack(info); + } + } + } + + qDeleteAll(list); + } + + if(!tracksToRemove.isEmpty()) + removeTracks(tracksToRemove); + if(!tracksToAdd.isEmpty()) + add(tracksToAdd); + + updateMetaData(); +} + void PlayListModel::doCurrentVisibleRequest() { if(!m_container->isEmpty() && m_current >= 0) diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h index 2a9cb8f3d..9c3ad3431 100644 --- a/src/qmmpui/playlistmodel.h +++ b/src/qmmpui/playlistmodel.h @@ -586,6 +586,8 @@ private slots: void onTaskFinished(); + void updateMetaData(const QStringList &paths); + private: PlayListTrack* m_current_track = nullptr; PlayListTrack* m_stop_track = nullptr; |
