aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmpui/playlistmanager.cpp5
-rw-r--r--src/qmmpui/playlistmanager.h4
-rw-r--r--src/qmmpui/playlistmodel.cpp5
-rw-r--r--src/qmmpui/playlistmodel.h8
-rw-r--r--src/qmmpui/playlisttask.cpp38
-rw-r--r--src/qmmpui/playlisttask_p.h4
6 files changed, 61 insertions, 3 deletions
diff --git a/src/qmmpui/playlistmanager.cpp b/src/qmmpui/playlistmanager.cpp
index edadbe5e4..26a3c828c 100644
--- a/src/qmmpui/playlistmanager.cpp
+++ b/src/qmmpui/playlistmanager.cpp
@@ -470,6 +470,11 @@ void PlayListManager::removeDuplicates()
m_selected->removeDuplicates();
}
+void PlayListManager::refresh()
+{
+ m_selected->refresh();
+}
+
void PlayListManager::clearQueue()
{
m_selected->clearQueue();
diff --git a/src/qmmpui/playlistmanager.h b/src/qmmpui/playlistmanager.h
index 16f460716..f593dd4b0 100644
--- a/src/qmmpui/playlistmanager.h
+++ b/src/qmmpui/playlistmanager.h
@@ -233,6 +233,10 @@ public slots:
*/
void removeDuplicates();
/*!
+ * This is a convenience function and is the same as calling \b selectedPlayList()->refresh()
+ */
+ void refresh();
+ /*!
* This is a convenience function and is the same as calling \b selectedPlayList()->clearQueue()
*/
void clearQueue();
diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp
index 768dd6e36..fc8824fe4 100644
--- a/src/qmmpui/playlistmodel.cpp
+++ b/src/qmmpui/playlistmodel.cpp
@@ -977,6 +977,11 @@ void PlayListModel::removeDuplicates()
m_task->removeDuplicates(m_container->tracks(), m_current_track);
}
+void PlayListModel::refresh()
+{
+ m_task->refresh(m_container->tracks(), m_current_track);
+}
+
void PlayListModel::clearQueue()
{
m_queued_songs.clear();
diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h
index bc39fe2aa..f0f7f71da 100644
--- a/src/qmmpui/playlistmodel.h
+++ b/src/qmmpui/playlistmodel.h
@@ -495,14 +495,18 @@ public slots:
*/
void setQueued(PlayListTrack* item);
/*!
- * Removes invalid items from playlist
+ * Removes invalid tracks from playlist
*/
void removeInvalidTracks();
/*!
- * Removes duplicate items by URL.
+ * Removes duplicate tracks by URL.
*/
void removeDuplicates();
/*!
+ * Removes invalid tracks and scans parent directories for the new files
+ */
+ void refresh();
+ /*!
* Removes all items from queue.
*/
void clearQueue();
diff --git a/src/qmmpui/playlisttask.cpp b/src/qmmpui/playlisttask.cpp
index a7b4448bd..9f92a1462 100644
--- a/src/qmmpui/playlisttask.cpp
+++ b/src/qmmpui/playlisttask.cpp
@@ -247,6 +247,27 @@ void PlayListTask::removeDuplicates(QList<PlayListTrack *> tracks, PlayListTrack
start();
}
+void PlayListTask::refresh(QList<PlayListTrack *> tracks, PlayListTrack *current_track)
+{
+ if(isRunning())
+ return;
+ clear();
+ m_task = REFRESH;
+ m_input_tracks = tracks;
+ m_tracks = tracks;
+ m_current_track = current_track;
+
+ for(int i = 0; i < tracks.count(); ++i)
+ {
+ TrackField *f = new TrackField;
+ f->track = tracks[i];
+ f->value = f->track->value(Qmmp::URL);
+ m_fields.append(f);
+ }
+ MetaDataManager::instance()->prepareForAnotherThread();
+ start();
+}
+
void PlayListTask::run()
{
qDebug("PlayListTask: started");
@@ -360,6 +381,23 @@ void PlayListTask::run()
}
}
}
+ else if(m_task == REFRESH)
+ {
+ TrackField *f = 0;
+ bool ok = false;
+ for(int i = 0; i < m_fields.count(); ++i)
+ {
+ f = m_fields.at(i);
+
+ if(f->value.contains("://"))
+ ok = MetaDataManager::instance()->protocols().contains(f->value.section("://",0,0)); //url
+ else
+ ok = MetaDataManager::instance()->supports(f->value); //local file
+
+ if(!ok)
+ m_indexes << i;
+ }
+ }
qDebug("PlayListTask: finished");
}
diff --git a/src/qmmpui/playlisttask_p.h b/src/qmmpui/playlisttask_p.h
index e42d4ffce..ea5c214d0 100644
--- a/src/qmmpui/playlisttask_p.h
+++ b/src/qmmpui/playlisttask_p.h
@@ -44,7 +44,8 @@ public:
SORT_SELECTION,
REMOVE_INVALID,
REMOVE_DUPLICATES,
- SORT_BY_COLUMN
+ SORT_BY_COLUMN,
+ REFRESH
};
explicit PlayListTask(QObject *parent);
@@ -55,6 +56,7 @@ public:
void sortByColumn(QList <PlayListTrack *> tracks, int column);
void removeInvalidTracks(QList<PlayListTrack *> tracks, PlayListTrack *current_track);
void removeDuplicates(QList<PlayListTrack *> tracks, PlayListTrack *current_track);
+ void refresh(QList<PlayListTrack *> tracks, PlayListTrack *current_track);
void run();