diff options
author | rubenwardy <rw@rubenwardy.com> | 2018-12-23 17:34:44 +0000 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2018-12-23 17:34:44 +0000 |
commit | 63969529adf90a49916be56869ed4a63a9667e7c (patch) | |
tree | 953e6fadda76abd50ce2bdf6635f4309cc5b6623 | |
parent | 08434300d872f43e427522ccf31856c327af7f47 (diff) | |
download | cheatdb-63969529adf90a49916be56869ed4a63a9667e7c.tar.xz |
Add random feature
-rw-r--r-- | app/templates/base.html | 4 | ||||
-rw-r--r-- | app/views/packages/__init__.py | 40 |
2 files changed, 25 insertions, 19 deletions
diff --git a/app/templates/base.html b/app/templates/base.html index db6d1f2..522e349 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -49,10 +49,10 @@ {% if type %}<input type="hidden" name="type" value="{{ type }}" />{% endif %} <input class="form-control mr-sm-2" name="q" type="text" placeholder="Search {{ title | lower or 'all packages' }}" value="{{ query or ''}}"> <input class="btn btn-secondary my-2 my-sm-0 mr-sm-2" type="submit" value="Search" /> - <input class="btn btn-secondary my-2 my-sm-0" + <!-- <input class="btn btn-secondary my-2 my-sm-0" data-toggle="tooltip" data-placement="bottom" title="Go to the first found result for this query." - type="submit" name="lucky" value="First" /> + type="submit" name="lucky" value="First" /> --> </form> <ul class="navbar-nav ml-auto"> {% if current_user.is_authenticated %} diff --git a/app/views/packages/__init__.py b/app/views/packages/__init__.py index acd69a8..db6753b 100644 --- a/app/views/packages/__init__.py +++ b/app/views/packages/__init__.py @@ -30,6 +30,7 @@ from wtforms import * from wtforms.validators import * from wtforms.ext.sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField from sqlalchemy import or_, any_ +from sqlalchemy.sql.expression import func class QueryBuilder: @@ -50,7 +51,8 @@ class QueryBuilder: self.title = title self.types = types self.search = request.args.get("q") - self.lucky = "lucky" in request.args + self.random = "random" in request.args + self.lucky = self.random or "lucky" in request.args self.hide_nonfree = isNo(request.args.get("nonfree")) self.limit = 1 if self.lucky else None self.order_by = request.args.get("sort") or "score" @@ -65,22 +67,25 @@ class QueryBuilder: if self.search is not None and self.search.strip() != "": query = query.filter(Package.title.ilike('%' + self.search + '%')) - to_order = None - if self.order_by == "score": - to_order = Package.score - elif self.order_by == "created_at": - to_order = Package.created_at + if self.random: + query = query.order_by(func.random()) else: - abort(400) - - if self.order_dir == "asc": - to_order = db.asc(to_order) - elif self.order_dir == "desc": - to_order = db.desc(to_order) - else: - abort(400) - - query = query.order_by(to_order) + to_order = None + if self.order_by == "score": + to_order = Package.score + elif self.order_by == "created_at": + to_order = Package.created_at + else: + abort(400) + + if self.order_dir == "asc": + to_order = db.asc(to_order) + elif self.order_dir == "desc": + to_order = db.desc(to_order) + else: + abort(400) + + query = query.order_by(to_order) if self.hide_nonfree: query = query.filter(Package.license.has(License.is_foss == True)) @@ -112,6 +117,7 @@ class QueryBuilder: @menu.register_menu(app, ".mods", "Mods", order=11, endpoint_arguments_constructor=lambda: { 'type': 'mod' }) @menu.register_menu(app, ".games", "Games", order=12, endpoint_arguments_constructor=lambda: { 'type': 'game' }) @menu.register_menu(app, ".txp", "Texture Packs", order=13, endpoint_arguments_constructor=lambda: { 'type': 'txp' }) +@menu.register_menu(app, ".random", "Random", order=14, endpoint_arguments_constructor=lambda: { 'random': '1' }) @app.route("/packages/") def packages_page(): if shouldReturnJson(): @@ -127,7 +133,7 @@ def packages_page(): return redirect(package.getDetailsURL()) topic = qb.buildTopicQuery().first() - if topic: + if qb.search and topic: return redirect("https://forum.minetest.net/viewtopic.php?t=" + str(topic.topic_id)) page = int(request.args.get("page") or 1) |