mirror of
https://github.com/zealdocs/zeal.git
synced 2024-11-27 11:44:56 +03:00
core,registry,ui: Make fuzzy search optional
This commit is contained in:
parent
42e79a66ef
commit
7b1223b03d
@ -192,6 +192,7 @@ void Application::checkForUpdates(bool quiet)
|
||||
void Application::applySettings()
|
||||
{
|
||||
m_docsetRegistry->setStoragePath(m_settings->docsetPath);
|
||||
m_docsetRegistry->setFuzzySearchEnabled(m_settings->fuzzySearchEnabled);
|
||||
|
||||
// HTTP Proxy Settings
|
||||
switch (m_settings->proxyType) {
|
||||
|
@ -35,6 +35,7 @@ namespace {
|
||||
const char GroupContent[] = "content";
|
||||
const char GroupDocsets[] = "docsets";
|
||||
const char GroupGlobalShortcuts[] = "global_shortcuts";
|
||||
const char GroupSearch[] = "search";
|
||||
const char GroupTabs[] = "tabs";
|
||||
const char GroupInternal[] = "internal";
|
||||
const char GroupState[] = "state";
|
||||
@ -75,6 +76,10 @@ void Settings::load()
|
||||
openNewTabAfterActive = settings->value(QStringLiteral("open_new_tab_after_active"), false).toBool();
|
||||
settings->endGroup();
|
||||
|
||||
settings->beginGroup(GroupSearch);
|
||||
fuzzySearchEnabled = settings->value(QStringLiteral("fuzzy_search_enabled"), false).toBool();
|
||||
settings->endGroup();
|
||||
|
||||
settings->beginGroup(GroupContent);
|
||||
minimumFontSize = settings->value(QStringLiteral("minimum_font_size"),
|
||||
QWebSettings::globalSettings()->fontSize(QWebSettings::MinimumFontSize)).toInt();
|
||||
@ -142,6 +147,10 @@ void Settings::save()
|
||||
settings->setValue(QStringLiteral("open_new_tab_after_active"), openNewTabAfterActive);
|
||||
settings->endGroup();
|
||||
|
||||
settings->beginGroup(GroupSearch);
|
||||
settings->setValue(QStringLiteral("fuzzy_search_enabled"), fuzzySearchEnabled);
|
||||
settings->endGroup();
|
||||
|
||||
settings->beginGroup(GroupContent);
|
||||
settings->setValue(QStringLiteral("minimum_font_size"), minimumFontSize);
|
||||
settings->setValue(QStringLiteral("dark_mode"), darkModeEnabled);
|
||||
|
@ -56,6 +56,9 @@ public:
|
||||
// Tabs Behavior
|
||||
bool openNewTabAfterActive;
|
||||
|
||||
// Search
|
||||
bool fuzzySearchEnabled;
|
||||
|
||||
// Content
|
||||
int minimumFontSize;
|
||||
bool darkModeEnabled;
|
||||
|
@ -260,15 +260,29 @@ QList<SearchResult> Docset::search(const QString &query, const CancellationToken
|
||||
{
|
||||
QString sql;
|
||||
if (m_type == Docset::Type::Dash) {
|
||||
if (m_fuzzySearchEnabled) {
|
||||
sql = QStringLiteral("SELECT name, type, path, '', zealScore('%1', name) as score"
|
||||
" FROM searchIndex"
|
||||
" WHERE score > 0"
|
||||
" ORDER BY score DESC");
|
||||
} else {
|
||||
sql = QStringLiteral("SELECT name, type, path, ''"
|
||||
" FROM searchIndex"
|
||||
" WHERE (name LIKE '%%1%' ESCAPE '\\')"
|
||||
" ORDER BY name COLLATE NOCASE");
|
||||
}
|
||||
} else {
|
||||
if (m_fuzzySearchEnabled) {
|
||||
sql = QStringLiteral("SELECT name, type, path, fragment, zealScore('%1', name) as score"
|
||||
" FROM searchIndex"
|
||||
" WHERE score > 0"
|
||||
" ORDER BY score DESC");
|
||||
} else {
|
||||
sql = QStringLiteral("SELECT name, type, path, fragment"
|
||||
" FROM searchIndex"
|
||||
" WHERE (name LIKE '%%1%' ESCAPE '\\')"
|
||||
" ORDER BY name COLLATE NOCASE");
|
||||
}
|
||||
}
|
||||
|
||||
// Limit for very short queries.
|
||||
@ -643,6 +657,16 @@ QString Docset::parseSymbolType(const QString &str)
|
||||
return aliases.value(str, str);
|
||||
}
|
||||
|
||||
bool Docset::isFuzzySearchEnabled() const
|
||||
{
|
||||
return m_fuzzySearchEnabled;
|
||||
}
|
||||
|
||||
void Docset::setFuzzySearchEnabled(bool enabled)
|
||||
{
|
||||
m_fuzzySearchEnabled = enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Returns score based on a substring position in a string.
|
||||
* \param str Original string.
|
||||
|
@ -75,6 +75,9 @@ public:
|
||||
// FIXME: This is an ugly workaround before we have a proper docset sources implementation
|
||||
bool hasUpdate = false;
|
||||
|
||||
bool isFuzzySearchEnabled() const;
|
||||
void setFuzzySearchEnabled(bool enabled);
|
||||
|
||||
private:
|
||||
enum class Type {
|
||||
Invalid,
|
||||
@ -107,6 +110,7 @@ private:
|
||||
QMap<QString, int> m_symbolCounts;
|
||||
mutable QMap<QString, QMap<QString, QUrl>> m_symbols;
|
||||
Util::SQLiteDatabase *m_db = nullptr;
|
||||
bool m_fuzzySearchEnabled = false;
|
||||
};
|
||||
|
||||
} // namespace Registry
|
||||
|
@ -80,6 +80,24 @@ void DocsetRegistry::setStoragePath(const QString &path)
|
||||
addDocsetsFromFolder(path);
|
||||
}
|
||||
|
||||
bool DocsetRegistry::isFuzzySearchEnabled() const
|
||||
{
|
||||
return m_fuzzySearchEnabled;
|
||||
}
|
||||
|
||||
void DocsetRegistry::setFuzzySearchEnabled(bool enabled)
|
||||
{
|
||||
if (enabled == m_fuzzySearchEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_fuzzySearchEnabled = enabled;
|
||||
|
||||
for (Docset *docset : m_docsets) {
|
||||
docset->setFuzzySearchEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
int DocsetRegistry::count() const
|
||||
{
|
||||
return m_docsets.count();
|
||||
@ -134,10 +152,12 @@ void DocsetRegistry::addDocset(const QString &path)
|
||||
return;
|
||||
}
|
||||
|
||||
const QString name = docset->name();
|
||||
docset->setFuzzySearchEnabled(m_fuzzySearchEnabled);
|
||||
|
||||
if (m_docsets.contains(name))
|
||||
const QString name = docset->name();
|
||||
if (m_docsets.contains(name)) {
|
||||
remove(name);
|
||||
}
|
||||
|
||||
m_docsets[name] = docset;
|
||||
emit docsetAdded(name);
|
||||
|
@ -47,6 +47,9 @@ public:
|
||||
QString storagePath() const;
|
||||
void setStoragePath(const QString &path);
|
||||
|
||||
bool isFuzzySearchEnabled() const;
|
||||
void setFuzzySearchEnabled(bool enabled);
|
||||
|
||||
int count() const;
|
||||
bool contains(const QString &name) const;
|
||||
QStringList names() const;
|
||||
@ -75,6 +78,7 @@ private:
|
||||
void addDocsetsFromFolder(const QString &path);
|
||||
|
||||
QString m_storagePath;
|
||||
bool m_fuzzySearchEnabled = false;
|
||||
|
||||
QThread *m_thread = nullptr;
|
||||
QMap<QString, Docset *> m_docsets;
|
||||
|
@ -102,6 +102,9 @@ void SettingsDialog::loadSettings()
|
||||
// Tabs Tab
|
||||
ui->openNewTabAfterActive->setChecked(settings->openNewTabAfterActive);
|
||||
|
||||
// Search Tab
|
||||
ui->fuzzySearchCheckBox->setChecked(settings->fuzzySearchEnabled);
|
||||
|
||||
// Content Tab
|
||||
ui->minimumFontSizeSpinBox->setValue(settings->minimumFontSize);
|
||||
ui->darkModeCheckBox->setChecked(settings->darkModeEnabled);
|
||||
@ -147,6 +150,9 @@ void SettingsDialog::saveSettings()
|
||||
// Tabs Tab
|
||||
settings->openNewTabAfterActive = ui->openNewTabAfterActive->isChecked();
|
||||
|
||||
// Search Tab
|
||||
settings->fuzzySearchEnabled = ui->fuzzySearchCheckBox->isChecked();
|
||||
|
||||
// Content Tab
|
||||
settings->minimumFontSize = ui->minimumFontSizeSpinBox->text().toInt();
|
||||
settings->darkModeEnabled = ui->darkModeCheckBox->isChecked();
|
||||
|
@ -186,6 +186,42 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="searchTab">
|
||||
<attribute name="title">
|
||||
<string>Search</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_5">
|
||||
<property name="title">
|
||||
<string>Local search</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_11">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="fuzzySearchCheckBox">
|
||||
<property name="text">
|
||||
<string>Use fuzzy search (experimental)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="contentTab">
|
||||
<attribute name="title">
|
||||
<string>Content</string>
|
||||
|
Loading…
Reference in New Issue
Block a user