From dc90bad23c867d7d9f9845b56b8cf6ee6e472632 Mon Sep 17 00:00:00 2001
From: Dakes
Date: Mon, 31 Jul 2023 13:44:08 +0200
Subject: [PATCH] Add filtering of numerical cols to collection
CollectionFilterWidget: Updated the tooltip, to reflect the changes.
CollectionQuery: Add parsing for SQL operators and insert right SQL
"where" searches.
Song: Add list of numerical columns
playlistfilterparser.cpp/FilterParser: move time and rating parsing
functions to new file:
searchparserutils.cpp: Contains common code used to parse search terms
in playlist and collection filters.
---
src/CMakeLists.txt | 1 +
src/collection/collectionfilterwidget.cpp | 23 +++--
src/collection/collectionquery.cpp | 72 ++++++++++++++
src/collection/collectionquery.h | 5 +
src/core/song.cpp | 11 +++
src/core/song.h | 2 +
src/playlist/playlistcontainer.cpp | 4 +-
src/playlist/playlistfilter.h | 4 +-
src/playlist/playlistfilterparser.cpp | 96 ++-----------------
src/playlist/playlistfilterparser.h | 2 -
src/utilities/searchparserutils.cpp | 112 ++++++++++++++++++++++
src/utilities/searchparserutils.h | 33 +++++++
12 files changed, 266 insertions(+), 99 deletions(-)
create mode 100644 src/utilities/searchparserutils.cpp
create mode 100644 src/utilities/searchparserutils.h
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f56b64ad..c5c5a981 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -57,6 +57,7 @@ set(SOURCES
utilities/filemanagerutils.cpp
utilities/coverutils.cpp
utilities/screenutils.cpp
+ utilities/searchparserutils.cpp
engine/enginebase.cpp
engine/enginedevice.cpp
diff --git a/src/collection/collectionfilterwidget.cpp b/src/collection/collectionfilterwidget.cpp
index 15a69c74..c183c108 100644
--- a/src/collection/collectionfilterwidget.cpp
+++ b/src/collection/collectionfilterwidget.cpp
@@ -73,6 +73,7 @@ CollectionFilterWidget::CollectionFilterWidget(QWidget *parent)
ui_->setupUi(this);
QString available_fields = Song::kFtsColumns.join(", ").replace(QRegularExpression("\\bfts"), "");
+ available_fields += QString(", ") + Song::kNumericalColumns.join(", ");
ui_->search_field->setToolTip(
QString("
") +
@@ -80,18 +81,26 @@ CollectionFilterWidget::CollectionFilterWidget(QWidget *parent)
QString(" ") +
QString("") +
tr("artist") +
- QString(":") +
- QString("Strawbs") +
- QString(" ") +
- tr("searches the collection for all artists that contain the word") +
- QString(" Strawbs.") +
+ QString(":Strawbs ") +
+ tr("searches the collection for all artists that contain the word %1. ").arg("Strawbs") +
+ QString("
") +
+ tr("Search terms for numerical fields can be prefixed with %1 or %2 to refine the search, e.g.: ")
+ .arg(" =, !=, <, >, <=", ">=") +
+ QString("") +
+ tr("rating") +
+ QString("") +
+ QString(":>=") +
+ QString("4") +
+
QString("
") +
tr("Available fields") +
QString(": ") +
- "" +
+ QString("") +
+ QString("") +
available_fields +
QString(".") +
- QString("
"));
+ QString("