aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui/playlisttask.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-01-19 07:42:23 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-01-19 07:42:23 +0000
commit2ab1fd161b64ad3cdf87bf8bf0be78d42f69157c (patch)
treea0c0843e5a75eb3170410651a7cafe15dd662cdb /src/qmmpui/playlisttask.cpp
parent9e379f3ee5febcb63182ad8902774e7d6761cfaf (diff)
downloadqmmp-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.cpp62
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();