From 28d2dff8b591e034640595f9212be2d006ed7d00 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sun, 12 Apr 2020 16:23:09 +0900 Subject: [PATCH] filters: handle queries wrapped with "..." --- lib/model/filters/query.dart | 15 ++++++++++++++- lib/widgets/album/app_bar.dart | 6 +++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/model/filters/query.dart b/lib/model/filters/query.dart index f9e5832cc..11a1ab9e4 100644 --- a/lib/model/filters/query.dart +++ b/lib/model/filters/query.dart @@ -6,13 +6,26 @@ import 'package:outline_material_icons/outline_material_icons.dart'; class QueryFilter extends CollectionFilter { static const type = 'query'; + static final exactRegex = RegExp('^"(.*)"\$'); + final String query; bool Function(ImageEntry) _filter; QueryFilter(this.query) { var upQuery = query.toUpperCase(); + + // allow NOT queries starting with `-` final not = upQuery.startsWith('-'); - if (not) upQuery = upQuery.substring(1); + if (not) { + upQuery = upQuery.substring(1); + } + + // allow untrimmed queries wrapped with `"..."` + final matches = exactRegex.allMatches(upQuery); + if (matches.length == 1) { + upQuery = matches.elementAt(0).group(1); + } + _filter = not ? (entry) => !entry.search(upQuery) : (entry) => entry.search(upQuery); } diff --git a/lib/widgets/album/app_bar.dart b/lib/widgets/album/app_bar.dart index 8acd3f2e1..4edee321f 100644 --- a/lib/widgets/album/app_bar.dart +++ b/lib/widgets/album/app_bar.dart @@ -290,9 +290,9 @@ class SearchField extends StatelessWidget { ), autofocus: true, onSubmitted: (query) { - query = query.trim(); - if (query.isNotEmpty) { - collection.addFilter(QueryFilter(query)); + final cleanQuery = query.trim(); + if (cleanQuery.isNotEmpty) { + collection.addFilter(QueryFilter(cleanQuery)); } stateNotifier.value = PageState.browse; },