From 346cd1ce631cbc6ecbb0783e0242e75219c318c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Canek=20Pel=C3=A1ez=20Vald=C3=A9s?= Date: Fri, 17 Dec 2021 02:04:35 -0600 Subject: [PATCH] Models: Add quoted searches. A quoted search is a term or phrase between quotation marks; there is no escaping of quotation marks. A quoted phrase is searched as-is (but ignoring casing). --- fotos/models.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/fotos/models.py b/fotos/models.py index 92c643a..0d69c5e 100644 --- a/fotos/models.py +++ b/fotos/models.py @@ -14,7 +14,7 @@ from babel.dates import format_datetime from datetime import datetime, timezone, timedelta from fotos.util import get_image_metadata, get_month_name, get_year_name, \ - normalize, free, restrict + normalize, free, restrict, getquote def float2degrees(d): i = math.floor(d) @@ -486,12 +486,26 @@ class Album(models.Model): if s == '': return empty photos = Photo.objects.all().order_by('timestamp') + phrases = [] + query = None + while '"' in s: + p = getquote(s) + if p is None: + break + s = s.replace(p, '', 1) + p = p[1:-1].strip() + if p == '': + continue + phrases.append(p) + query = Album._add_query_term(query, p) terms = s.split(' ') - before = after = query = None - sterms = [] + before = after = None + sterms = phrases try: for t in terms: - if t.startswith('before:'): + if t == '': + continue + elif t.startswith('before:'): before = Album._get_bound_time(t) elif t.startswith('after:'): after = Album._get_bound_time(t) -- GitLab