diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-02-08 18:54:35 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-02-08 18:54:35 +0000 |
| commit | 86f6a3667a69b63fbc475b9f47360a9ce7c017cc (patch) | |
| tree | 33a7b52c904e39eb64b419ba308d1ec8b2bcbf6f /src/qmmpui | |
| parent | 15629f11ad6e82bcb10cd5a71d0e09684caa7965 (diff) | |
| download | qmmp-86f6a3667a69b63fbc475b9f47360a9ce7c017cc.tar.gz qmmp-86f6a3667a69b63fbc475b9f47360a9ce7c017cc.tar.bz2 qmmp-86f6a3667a69b63fbc475b9f47360a9ce7c017cc.zip | |
optimization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9704 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui')
| -rw-r--r-- | src/qmmpui/playlistmodel.cpp | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index 794cf8a2e..2f8cf0cbd 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -17,7 +17,6 @@ * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include <QWidget> #include <QTextStream> #include <algorithm> #include <time.h> @@ -999,9 +998,48 @@ void PlayListModel::updateMetaData(const QStringList &paths) QList<PlayListTrack *> tracksToRemove; QList<PlayListTrack *> tracksToAdd; + QHash<QString, TrackInfo *> cache; //cache for tracks + QSet<QString> multiTrackFiles; //files with multiple tracks + for(const QString &path : qAsConst(paths)) { - QList<TrackInfo *> list = MetaDataManager::instance()->createPlayList(path); + bool missing = false; //track is missing + + //update cache + if(!cache.contains(path)) + { + //is it track of local file? + if(path.contains("://") && path.contains("#") && !cache.contains(path)) + { + QString filePath = path; + filePath.remove(QRegularExpression("#\\d+$")); + filePath.remove(QRegularExpression("^\\D+://")); + if(multiTrackFiles.contains(filePath)) //looks like local file has been already scanned, but has not this track + { + missing = true; + } + else if(QFileInfo(filePath).isFile()) + { + const QList<TrackInfo *> list = MetaDataManager::instance()->createPlayList(filePath); + for(TrackInfo *info : qAsConst(list)) + cache.insert(info->path(), info); + + multiTrackFiles << path; + } + } + else if(QFileInfo(path).isFile()) //is it local file? + { + const QList<TrackInfo *> list = MetaDataManager::instance()->createPlayList(path); + for(TrackInfo *info : qAsConst(list)) + cache.insert(info->path(), info); + } + } + + QList<TrackInfo *> list; + if(cache.contains(path)) //using TrackInfo object from cache + list << cache.value(path); + else if(!missing) + list << MetaDataManager::instance()->createPlayList(path); for(int i = 0; i < m_container->count(); ++i) { @@ -1027,9 +1065,13 @@ void PlayListModel::updateMetaData(const QStringList &paths) } } - qDeleteAll(list); + if(!cache.contains(path)) + qDeleteAll(list); } + qDeleteAll(cache.values()); + cache.clear(); + if(!tracksToRemove.isEmpty()) removeTracks(tracksToRemove); if(!tracksToAdd.isEmpty()) |
