Skip to content

Commit

Permalink
Use tokenization instead of searching for an entire substring in the …
Browse files Browse the repository at this point in the history
…file name
  • Loading branch information
sakertooth committed Feb 5, 2025
1 parent 91d30b2 commit f785b39
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/gui/FileBrowser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,15 +230,21 @@ void FileBrowser::onSearch(const QString& filter)
auto directoryFilters = QDir::AllEntries | QDir::NoDotAndDotDot;
if (m_showHiddenContent) { directoryFilters |= QDir::Hidden; }

s_currentSearchTask = ThreadPool::instance().enqueue([this, directories, directoryFilters, filter] {
const auto keywords = filter.split(" ");

s_currentSearchTask = ThreadPool::instance().enqueue([this, directories, directoryFilters, keywords] {
for (const auto& path : directories)
{
auto dirIt = QDirIterator{path, directoryFilters, QDirIterator::IteratorFlag::Subdirectories | QDirIterator::IteratorFlag::FollowSymlinks};

while (dirIt.hasNext() && !s_cancelSearch)
{
const auto fileInfo = QFileInfo{dirIt.next()};
if (!fileInfo.fileName().contains(filter, Qt::CaseInsensitive)) { continue; }
const auto fileName = fileInfo.fileName();
const auto containsAllKeywords = std::all_of(keywords.begin(), keywords.end(),
[&](const auto& keyword) { return fileName.contains(keyword, Qt::CaseInsensitive); });

if (!containsAllKeywords) { continue; }

// A delay to avoid bogging down Qt's event loop as we find results.
std::this_thread::sleep_for(s_delayBetweenResults);
Expand Down

0 comments on commit f785b39

Please sign in to comment.