X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmediascanner.cpp;h=0fc2d37ef0b4c7d211d44a7f7bbdf07db2eac583;hb=dd5116c03cafc924071ac3ee837b78cfcfb2c792;hp=1f9adf0dcc50a37d4a6e0238c66c46dd3b89eba8;hpb=c92d96e01d110d72cee8e8d307667507bf5d6fff;p=someplayer diff --git a/src/mediascanner.cpp b/src/mediascanner.cpp index 1f9adf0..0fc2d37 100644 --- a/src/mediascanner.cpp +++ b/src/mediascanner.cpp @@ -1,24 +1,57 @@ +/* + * 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; + REGISTERED_FILE_EXTENSIONS << "mp3" << "flac" << "wma" << "aac" << "ogg"; } 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); + _foundMedia = _scan_directory(_dir); + emit scanFinish(_foundMedia); + _stopped = true; +} + +QStringList MediaScanner::singleScan(QString path) { + _dir = path; + return _scan_directory(_dir); +} + +QStringList 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 +59,7 @@ void MediaScanner::run() { } } } - emit scanFinish(_foundMedia); - _stopped = true; + return _foundMedia; } void MediaScanner::stop() { @@ -38,7 +70,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; }