Browse Source

[enh] storing search categories in cookies

asciimoo 11 years ago
parent
commit
9bc6865ddc
1 changed files with 17 additions and 4 deletions
  1. 17
    4
      searx/webapp.py

+ 17
- 4
searx/webapp.py View File

22
     from os.path import realpath, dirname
22
     from os.path import realpath, dirname
23
     path.append(realpath(dirname(realpath(__file__))+'/../'))
23
     path.append(realpath(dirname(realpath(__file__))+'/../'))
24
 
24
 
25
-from flask import Flask, request, flash, render_template, url_for, Response
25
+from flask import Flask, request, flash, render_template, url_for, Response, make_response
26
 import ConfigParser
26
 import ConfigParser
27
 from os import getenv
27
 from os import getenv
28
 from searx.engines import search, categories
28
 from searx.engines import search, categories
54
     global categories
54
     global categories
55
     kwargs['categories'] = categories.keys()
55
     kwargs['categories'] = categories.keys()
56
     if not 'selected_categories' in kwargs:
56
     if not 'selected_categories' in kwargs:
57
-        kwargs['selected_categories'] = ['general']
57
+        kwargs['selected_categories'] = []
58
+        cookie_categories = request.cookies.get('categories', '').split(',')
59
+        for ccateg in cookie_categories:
60
+            if ccateg in categories:
61
+                kwargs['selected_categories'].append(ccateg)
62
+        if not len(kwargs['selected_categories']):
63
+            kwargs['selected_categories'] = ['general']
58
     return render_template(template_name, **kwargs)
64
     return render_template(template_name, **kwargs)
59
 
65
 
60
 @app.route('/', methods=['GET', 'POST'])
66
 @app.route('/', methods=['GET', 'POST'])
74
                 selected_categories.append(category)
80
                 selected_categories.append(category)
75
                 selected_engines.extend(x.name for x in categories[category])
81
                 selected_engines.extend(x.name for x in categories[category])
76
         if not len(selected_engines):
82
         if not len(selected_engines):
77
-            selected_engines = [x.name for x in categories['general']]
83
+            cookie_categories = request.cookies.get('categories', '').split(',')
84
+            for ccateg in cookie_categories:
85
+                if ccateg in categories:
86
+                    selected_categories.append(ccateg)
87
+                    selected_engines.extend(x.name for x in categories[ccateg])
78
         query = request.form['q'].encode('utf-8')
88
         query = request.form['q'].encode('utf-8')
79
         results = search(query, request, selected_engines)
89
         results = search(query, request, selected_engines)
80
         if request.form.get('format') == 'json':
90
         if request.form.get('format') == 'json':
81
             # TODO HTTP headers
91
             # TODO HTTP headers
82
             return json.dumps({'query': query, 'results': results})
92
             return json.dumps({'query': query, 'results': results})
83
-        return render('results.html', results=results, q=query.decode('utf-8'), selected_categories=selected_categories)
93
+        template = render('results.html', results=results, q=query.decode('utf-8'), selected_categories=selected_categories)
94
+        resp = make_response(template)
95
+        resp.set_cookie('categories', ','.join(selected_categories))
96
+        return resp
84
     return render('index.html')
97
     return render('index.html')
85
 
98
 
86
 @app.route('/favicon.ico', methods=['GET'])
99
 @app.route('/favicon.ico', methods=['GET'])