Add "File Name Index" locator filter on Windows

Using the freely available "Everything" tool that creates a global
file index and also provides a command line tool for accessing it.

Change-Id: Ieade7a8c0dd94695dabbd5f95b1f86e0d950d62e
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Eike Ziller
2021-01-25 15:53:07 +01:00
parent d1803f84e1
commit b585f24257
3 changed files with 15 additions and 15 deletions

View File

@@ -111,6 +111,7 @@ add_qtc_plugin(Core
locator/locatorsettingspage.cpp locator/locatorsettingspage.h locator/locatorsettingspage.ui
locator/locatorwidget.cpp locator/locatorwidget.h
locator/opendocumentsfilter.cpp locator/opendocumentsfilter.h
locator/spotlightlocatorfilter.h locator/spotlightlocatorfilter.cpp
locator/urllocatorfilter.cpp locator/urllocatorfilter.h locator/urllocatorfilter.ui
mainwindow.cpp mainwindow.h
manhattanstyle.cpp manhattanstyle.h
@@ -180,12 +181,6 @@ extend_qtc_plugin(Core
progressmanager/progressmanager_mac.mm
)
extend_qtc_plugin(Core
CONDITION NOT WIN32
SOURCES
locator/spotlightlocatorfilter.h locator/spotlightlocatorfilter.cpp
)
extend_qtc_plugin(Core
CONDITION (NOT WIN32) AND (NOT APPLE)
SOURCES progressmanager/progressmanager_x11.cpp

View File

@@ -36,6 +36,7 @@
#include "locatorsettingspage.h"
#include "locatorwidget.h"
#include "opendocumentsfilter.h"
#include "spotlightlocatorfilter.h"
#include "urllocatorfilter.h"
#include <coreplugin/coreplugin.h>
@@ -59,10 +60,6 @@
#include <QAction>
#include <QSettings>
#ifdef Q_OS_UNIX
#include "spotlightlocatorfilter.h"
#endif
using namespace Utils;
namespace Core {
@@ -90,9 +87,7 @@ public:
MenuBarFilter m_menubarFilter;
UrlLocatorFilter m_urlFilter{UrlLocatorFilter::tr("Web Search"), "RemoteHelpFilter"};
UrlLocatorFilter m_bugFilter{UrlLocatorFilter::tr("Qt Project Bugs"), "QtProjectBugs"};
#ifdef Q_OS_UNIX
SpotlightLocatorFilter m_spotlightLocatorFilter;
#endif
};
LocatorData::LocatorData()

View File

@@ -94,9 +94,11 @@ SpotlightIterator::SpotlightIterator(const QStringList &command)
scheduleKillProcess();
});
QObject::connect(m_process.get(), &QProcess::readyReadStandardOutput, [this] {
const QStringList items = QString::fromUtf8(m_process->readAllStandardOutput()).split('\n');
QString output = QString::fromUtf8(m_process->readAllStandardOutput());
output.replace("\r\n", "\n");
const QStringList items = output.split('\n');
QMutexLocker lock(&m_mutex);
m_queue.append(Utils::transform(items, &FilePath::fromString));
m_queue.append(Utils::transform(items, &FilePath::fromUserInput));
if (m_filePaths.size() + m_queue.size() > 10000) // limit the amount of data
scheduleKillProcess();
m_waitForItems.wakeAll();
@@ -180,7 +182,7 @@ SpotlightLocatorFilter::SpotlightLocatorFilter()
QString("kMDItemFSName = '*%1*'%2")
.arg(quoted, sensitivity == Qt::CaseInsensitive ? QString("c") : QString())});
};
} else {
} else if (HostOsInfo::isLinuxHost()) {
command = [](const QString &query, Qt::CaseSensitivity sensitivity) {
QString regex = query;
regex = regex.replace('*', ".*");
@@ -188,6 +190,14 @@ SpotlightLocatorFilter::SpotlightLocatorFilter()
+ (sensitivity == Qt::CaseInsensitive ? QStringList({"-i"}) : QStringList())
+ QStringList({"-l", "10000", "-r", regex});
};
} else if (HostOsInfo::isWindowsHost()) {
command = [](const QString &query, Qt::CaseSensitivity sensitivity) {
QString regex = query;
regex = regex.replace('*', ".*");
return QStringList({"es.exe"})
+ (sensitivity == Qt::CaseSensitive ? QStringList({"-i"}) : QStringList())
+ QStringList({"-n", "10000", "-r", regex});
};
}
setId("SpotlightFileNamesLocatorFilter");
setDisplayName(tr("File Name Index"));