@@ -0,0 +1,104 @@
2+ Recoll (local search engine)
7+ @parse url, content, size, abstract, author, mtype, subtype, time, \
8+ filename, label, type, embedded
11+from datetime import date, timedelta
12+from json import loads
13+from urllib.parse import urlencode, quote
15+# engine dependent config
16+time_range_support = True
18+# parameters from settings.yml
25+embedded_url = '<{ttype} controls height="166px" ' +\
26+ 'src="{url}" type="{mtype}"></{ttype}>'
30+def get_time_range(time_range):
38+ offset = sw.get(time_range, 0)
42+ return (date.today() - timedelta(days=offset)).isoformat()
46+def request(query, params):
47+ search_after = get_time_range(params['time_range'])
48+ search_url = base_url + 'json?{query}&highlight=0'
49+ params['url'] = search_url.format(query=urlencode({
51+ 'after': search_after,
57+# get response from search-request
61+ response_json = loads(resp.text)
63+ if not response_json:
66+ for result in response_json.get('results', []):
67+ title = result['label']
68+ url = result['url'].replace('file://' + mount_prefix, dl_prefix)
69+ content = '{}'.format(result['snippet'])
75+ 'template': 'files.html'}
78+ item['size'] = int(result['size'])
80+ for parameter in ['filename', 'abstract', 'author', 'mtype', 'time']:
81+ if result[parameter]:
82+ item[parameter] = result[parameter]
84+ # facilitate preview support for known mime types
85+ if 'mtype' in result and '/' in result['mtype']:
86+ (mtype, subtype) = result['mtype'].split('/')
87+ item['mtype'] = mtype
88+ item['subtype'] = subtype
90+ if mtype in ['audio', 'video']:
91+ item['embedded'] = embedded_url.format(
93+ url=quote(url.encode('utf8'), '/:'),
94+ mtype=result['mtype'])
96+ if mtype in ['image'] and subtype in ['bmp', 'gif', 'jpeg', 'png']:
97+ item['img_src'] = url
101+ if 'nres' in response_json:
102+ results.append({'number_of_results': response_json['nres']})