Created
June 12, 2023 23:20
-
-
Save anytizer/035b3c15403591b9110558124d3924b6 to your computer and use it in GitHub Desktop.
SamplesScanner
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
/** | |
* Purpose: Deep scan directories for a search pattern in known file extensions. | |
* | |
* Usage: | |
* | |
* SamplesScanner sc = SamplesScanner(); | |
* QString path = "D:\\lmms\\build\\Debug\\data\\samples"; | |
* QString pattern = "*.ds"; | |
* QString search = "rave"; // D:/lmms/build/Debug/data/samples/drumsynth/misc_synth/raver_organ.ds | |
* QList<QString> samples_files = sc.scan(path, pattern, search); | |
*/ | |
#include <QDir> | |
#include <iostream> | |
class SamplesScanner | |
{ | |
private: | |
QList<QString> samples(QString path, QString pattern); | |
public: | |
SamplesScanner(); | |
QList<QString> scan(QString path, QString pattern, QString search); | |
}; | |
SamplesScanner::SamplesScanner() | |
{ | |
} | |
QList<QString> SamplesScanner::scan(QString path, QString pattern, QString search) | |
{ | |
QList<QString> searchlist = QList<QString>(); | |
QList<QString> samples = this->samples(path, pattern); | |
for (QString sample : samples) | |
{ | |
QFileInfo info = QFileInfo(sample); | |
//if (sample.contains(search)) // will search in full path: not expected. | |
if (info.baseName().contains(search)) // search in deep file name only | |
{ | |
std::cout << "\r\n Found dir: " << sample.toStdString(); | |
searchlist.append(sample); | |
} | |
} | |
return searchlist; | |
} | |
QList<QString> SamplesScanner::samples(QString path, QString pattern) | |
{ | |
QList<QString> samples = QList<QString>(); | |
QDir dir = QDir(path); | |
//QString pattern = "*.ogg"; // *.ogg, *.wav, *.ds, *.flac | |
dir.setNameFilters(QStringList(pattern)); | |
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::AllDirs); | |
QStringList files = dir.entryList(); | |
for (int i = 0; i < files.count(); ++i) | |
{ | |
QString name = path + "/" + files[i]; | |
QFileInfo info = QFileInfo(name); | |
if (info.isDir()) | |
{ | |
QList<QString> samples1 = this->samples(name, pattern); | |
for (QString dir : samples1) | |
{ | |
samples.append(dir); | |
} | |
} | |
else | |
{ | |
samples.append(info.absoluteFilePath()); | |
} | |
} | |
return samples; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment