diff options
Diffstat (limited to 'src/qmmpui')
| -rw-r--r-- | src/qmmpui/playlistmodel.cpp | 5 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.h | 2 | ||||
| -rw-r--r-- | src/qmmpui/playlisttask.cpp | 62 | ||||
| -rw-r--r-- | src/qmmpui/playlisttask_p.h | 3 |
4 files changed, 64 insertions, 8 deletions
diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index fc8824fe4..bc0d057a8 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright(C) 2006-2015 by Ilya Kotov * + * Copyright(C) 2006-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -900,7 +900,8 @@ void PlayListModel::onTaskFinished() emit sortingByColumnFinished(m_task->column(), m_task->isReverted()); } else if(m_task->type() == PlayListTask::REMOVE_INVALID - || m_task->type() == PlayListTask::REMOVE_DUPLICATES) + || m_task->type() == PlayListTask::REMOVE_DUPLICATES + || m_task->type() == PlayListTask::REFRESH) { PlayListTrack *prev_current_track = m_current_track; bool prev_count = m_container->count(); diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h index f0f7f71da..7fa6753c9 100644 --- a/src/qmmpui/playlistmodel.h +++ b/src/qmmpui/playlistmodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2015 by Ilya Kotov * + * Copyright (C) 2006-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * 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(); diff --git a/src/qmmpui/playlisttask_p.h b/src/qmmpui/playlisttask_p.h index ea5c214d0..6799d635e 100644 --- a/src/qmmpui/playlisttask_p.h +++ b/src/qmmpui/playlisttask_p.h @@ -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 * @@ -74,6 +74,7 @@ private: QList <PlayListTrack *> m_tracks; QList <PlayListTrack *> m_input_tracks; QList<int> m_indexes; + QList <PlayListTrack *> m_new_tracks; PlayListTrack *m_current_track; int m_sort_mode; TaskType m_task; |
