X-Git-Url: http://git.maemo.org/git/?p=someplayer;a=blobdiff_plain;f=src%2Fmediascanner.cpp;h=c026fa6c9ba84a212b65f043ee8b89735ecad7b3;hp=1f9adf0dcc50a37d4a6e0238c66c46dd3b89eba8;hb=85c7e6ee597bcfe34b40ba8b47786ce8f93e30a0;hpb=c92d96e01d110d72cee8e8d307667507bf5d6fff diff --git a/src/mediascanner.cpp b/src/mediascanner.cpp index 1f9adf0..c026fa6 100644 --- a/src/mediascanner.cpp +++ b/src/mediascanner.cpp @@ -1,24 +1,51 @@ +/* + * SomePlayer - An alternate music player for Maemo 5 + * Copyright (C) 2010 Nikolay (somebody) Tischenko + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + #include "mediascanner.h" using namespace SomePlayer::Storage; #include +#include MediaScanner::MediaScanner(QObject *parent) : QThread(parent), _stopped(false), _initialized(false) { REGISTERED_FILE_EXTENSIONS << "mp3" << "flac" << "wma" << "acc"; - _iterator = NULL; } void MediaScanner::run() { if (!_initialized) return; _foundMedia.clear(); - while(!_stopped && _iterator->hasNext()) { - QString entry(_iterator->next()); - QFileInfo info(entry); - if (info.isReadable()) { + _scan_directory(_dir); + emit scanFinish(_foundMedia); + _stopped = true; +} + +void MediaScanner::_scan_directory(QDir dir) { + QFileInfoList items = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + foreach (QFileInfo info, items) { + if (info.isDir()) { + QDir ndir(info.absoluteFilePath()); + _scan_directory(ndir); + } else { QString suffix = info.suffix().toLower(); if (REGISTERED_FILE_EXTENSIONS.contains(suffix)) { if (!_foundMedia.contains(info.absoluteFilePath())) @@ -26,8 +53,6 @@ void MediaScanner::run() { } } } - emit scanFinish(_foundMedia); - _stopped = true; } void MediaScanner::stop() { @@ -38,7 +63,5 @@ void MediaScanner::stop() { void MediaScanner::init(QString dir) { _stopped = false; _initialized = true; - if (!_iterator) - delete _iterator; - _iterator = new QDirIterator(QDir(dir), QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); + _dir = dir; }