aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qmmpui/detailsdialog.cpp3
-rw-r--r--src/qmmpui/detailsdialog.h3
-rw-r--r--src/qmmpui/playlistmodel.cpp54
-rw-r--r--src/qmmpui/playlistmodel.h2
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;