aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-02-25 20:50:22 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-02-25 20:50:22 +0000
commitd47d83591c0056d2e6236393e9d34577982459e0 (patch)
tree94fe1a29fc06e687a3b95e42699953ce85453e01
parent6bb25ee7ef5962dd599a6f27e466bb0eea83c207 (diff)
downloadqmmp-d47d83591c0056d2e6236393e9d34577982459e0.tar.gz
qmmp-d47d83591c0056d2e6236393e9d34577982459e0.tar.bz2
qmmp-d47d83591c0056d2e6236393e9d34577982459e0.zip
improved 'refresh playlist' feature
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7056 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/qmmpui/playlisttask.cpp71
1 files changed, 46 insertions, 25 deletions
diff --git a/src/qmmpui/playlisttask.cpp b/src/qmmpui/playlisttask.cpp
index 8600e17e8..1fddb1693 100644
--- a/src/qmmpui/playlisttask.cpp
+++ b/src/qmmpui/playlisttask.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2014-2016 by Ilya Kotov *
+ * Copyright (C) 2014-2017 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -372,14 +372,14 @@ void PlayListTask::run()
{
f = m_fields.at(i);
- if(urls.contains(f->value))
- {
- m_indexes.append(i);
- }
- else
- {
- urls.append(f->value);
- }
+ if(urls.contains(f->value))
+ {
+ m_indexes.append(i);
+ }
+ else
+ {
+ urls.append(f->value);
+ }
}
}
else if(m_task == REFRESH)
@@ -400,7 +400,7 @@ void PlayListTask::run()
if(!ok)
m_indexes << i;
}
- //find new files
+ //find all directories
QStringList dirs; QString path;
for(int i = 0; i < m_fields.count(); ++i)
{
@@ -414,7 +414,7 @@ void PlayListTask::run()
if(!dirs.contains(path))
dirs << path;
}
-
+ //find all files
QFileInfoList l;
foreach (QString p, dirs)
{
@@ -423,26 +423,47 @@ void PlayListTask::run()
dir.setSorting(QDir::Name);
l << dir.entryInfoList(mm->nameFilters());
}
+ //generate URLs for the current playlist
+ QStringList urls;
+ foreach (TrackField *t, m_fields)
+ urls.append(t->value);
+ //find files that have already been added
+ QList<int> indexes;
+ for(int i = 0; i < l.count(); ++i)
+ {
+ QFileInfo f = l[i];
+ if(urls.contains(f.canonicalFilePath()))
+ indexes.append(i);
+ else
+ urls.append(f.canonicalFilePath());
+ }
+ //remove existing URLs
+ for(int i = indexes.count() - 1; i >= 0; i--)
+ l.takeAt(indexes[i]);
+
+ //create new playlist tracks
+ QStringList ignoredFiles;
foreach (QFileInfo f, l)
{
- bool contains = false;
- foreach (TrackField *t, m_fields)
+ QStringList ignored;
+ foreach (FileInfo *info, mm->createPlayList(f.canonicalFilePath(),
+ QmmpUiSettings::instance()->useMetadata(),
+ &ignored))
{
- if(f.canonicalFilePath() == t->value)
- {
- contains = true;
- break;
- }
+ m_new_tracks << new PlayListTrack(info);
}
-
- if(!contains)
+ ignoredFiles.append(ignored);
+ }
+ //remove dublicate URLs and ignored files
+ //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()))
{
- foreach (FileInfo *info, mm->createPlayList(f.canonicalFilePath(),
- QmmpUiSettings::instance()->useMetadata()))
- {
- m_new_tracks << new PlayListTrack(info);
- }
+ m_new_tracks.removeAll(t);
+ delete t;
}
}
}