filters: handle queries wrapped with "..."

This commit is contained in:
Thibault Deckers 2020-04-12 16:23:09 +09:00
parent acc2cd6c9e
commit 28d2dff8b5
2 changed files with 17 additions and 4 deletions

View file

@ -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);
}

View file

@ -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;
},