1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "directoryscanner.h"
#include <QDir>
#include <iostream>
DirectoryScanner::DirectoryScanner() {
}
DirectoryScanner::~DirectoryScanner()
{
foreach (MediaScanner* scanner, mediaScanners) {
delete scanner;
}
}
void DirectoryScanner::addScanner(MediaScanner *scanner) {
if (scanner) {
this->mediaScanners.append(scanner);
connect(scanner, SIGNAL(machingFile(QString)), this, SIGNAL(machingFile(QString)));
}
}
void DirectoryScanner::scan(const QString& path, QStringList& handledDirs, const QString& rootPath) {
QDir dir(path);
QStringList dirs = dir.entryList(QDir::Dirs);
foreach (QString d, dirs) {
if (d == "." || d == "..") {
continue;
}
QString dirPath = dir.absoluteFilePath(d);
//std::cout << dirPath.toStdString() << std::endl;
if (dirPath.startsWith(rootPath) && !handledDirs.contains(dirPath)) {
handledDirs.append(dirPath);
this->scan(dirPath, handledDirs, rootPath);
}
}
const QStringList files = dir.entryList(QDir::Files);
foreach (MediaScanner* scanner, mediaScanners) {
scanner->scanFiles(files, dir);
}
}
void DirectoryScanner::scan(QString path) {
QStringList handledDirs;
this->scan(path, handledDirs, QDir(path).absolutePath());
}
DirectoryScannerThread::DirectoryScannerThread(DirectoryScanner *scanner, const QList<SearchDirectory> dirs, QObject *parent) :
QThread(parent),
scanner(scanner),
dirs(dirs)
{
connect(scanner, SIGNAL(machingFile(QString)), this, SIGNAL(machingFile(QString)));
}
DirectoryScannerThread::~DirectoryScannerThread()
{
delete this->scanner;
}
void DirectoryScannerThread::run() {
for (int i=0; i < dirs.length(); ++i) {
scanner->scan(dirs.at(i).dir.absolutePath());
}
emit done();
}