diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-02-25 20:50:22 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-02-25 20:50:22 +0000 |
| commit | d47d83591c0056d2e6236393e9d34577982459e0 (patch) | |
| tree | 94fe1a29fc06e687a3b95e42699953ce85453e01 | |
| parent | 6bb25ee7ef5962dd599a6f27e466bb0eea83c207 (diff) | |
| download | qmmp-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.cpp | 71 |
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; } } } |
