diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-19 07:42:23 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-19 07:42:23 +0000 |
| commit | 2ab1fd161b64ad3cdf87bf8bf0be78d42f69157c (patch) | |
| tree | a0c0843e5a75eb3170410651a7cafe15dd662cdb /src/qmmpui/playlisttask.cpp | |
| parent | 9e379f3ee5febcb63182ad8902774e7d6761cfaf (diff) | |
| download | qmmp-2ab1fd161b64ad3cdf87bf8bf0be78d42f69157c.tar.gz qmmp-2ab1fd161b64ad3cdf87bf8bf0be78d42f69157c.tar.bz2 qmmp-2ab1fd161b64ad3cdf87bf8bf0be78d42f69157c.zip | |
added feature to refresh playlist
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6060 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/playlisttask.cpp')
| -rw-r--r-- | src/qmmpui/playlisttask.cpp | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/src/qmmpui/playlisttask.cpp b/src/qmmpui/playlisttask.cpp index 9f92a1462..9ce36f153 100644 --- a/src/qmmpui/playlisttask.cpp +++ b/src/qmmpui/playlisttask.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2014-2015 by Ilya Kotov * + * Copyright (C) 2014-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -384,19 +384,65 @@ void PlayListTask::run() else if(m_task == REFRESH) { TrackField *f = 0; + MetaDataManager *mm = MetaDataManager::instance(); bool ok = false; + //find invalid files 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 + ok = mm->protocols().contains(f->value.section("://",0,0)); //url else - ok = MetaDataManager::instance()->supports(f->value); //local file + ok = mm->supports(f->value); //local file if(!ok) m_indexes << i; } + //find new files + QStringList dirs; QString path; + for(int i = 0; i < m_fields.count(); ++i) + { + f = m_fields.at(i); + + if(f->value.contains("://")) //skip urls + continue; + + path = QFileInfo(f->value).canonicalPath(); + + if(!dirs.contains(path)) + dirs << path; + } + + QFileInfoList l; + foreach (QString p, dirs) + { + QDir dir(p); + dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); + dir.setSorting(QDir::Name); + l << dir.entryInfoList(mm->nameFilters()); + } + + foreach (QFileInfo f, l) + { + bool contains = false; + foreach (TrackField *t, m_fields) + { + if(f.canonicalFilePath() == t->value) + { + contains = true; + break; + } + } + + if(!contains) + { + foreach (FileInfo *info, mm->createPlayList(f.canonicalFilePath())) + { + m_new_tracks << new PlayListTrack(info); + } + } + } } qDebug("PlayListTask: finished"); } @@ -426,7 +472,7 @@ QList<PlayListTrack *> PlayListTask::takeResults(PlayListTrack **current_track) for (int i = 0; i < m_indexes.count(); i++) m_tracks.replace(m_indexes[i], m_fields[i]->track); } - else if(m_task == REMOVE_INVALID || m_task == REMOVE_DUPLICATES) + else if(m_task == REMOVE_INVALID || m_task == REMOVE_DUPLICATES || m_task == REFRESH) { int index = 0; PlayListTrack *t = 0; @@ -449,6 +495,12 @@ QList<PlayListTrack *> PlayListTask::takeResults(PlayListTrack **current_track) else delete t; } + + if(m_task == REFRESH) + { + m_tracks.append(m_new_tracks); + m_new_tracks.clear(); + } } return m_tracks; } @@ -467,6 +519,8 @@ void PlayListTask::clear() { qDeleteAll(m_fields); m_fields.clear(); + qDeleteAll(m_new_tracks); + m_new_tracks.clear(); m_align_groups = false; m_indexes.clear(); m_input_tracks.clear(); |
