From fc8cd3cfb857f907748b326c391fa14e91a17fb3 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 14 Dec 2020 11:48:07 +0000 Subject: [PATCH] Add top reviewed section to homepage --- app/blueprints/homepage/__init__.py | 6 ++++-- app/flatpages/help/api.md | 2 +- app/querybuilder.py | 5 ++++- app/templates/index.html | 7 +++++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/blueprints/homepage/__init__.py b/app/blueprints/homepage/__init__.py index 890bf63..bda697b 100644 --- a/app/blueprints/homepage/__init__.py +++ b/app/blueprints/homepage/__init__.py @@ -22,12 +22,14 @@ def home(): pop_mod = join(query.filter_by(type=PackageType.MOD).order_by(db.desc(Package.score))).limit(8).all() pop_gam = join(query.filter_by(type=PackageType.GAME).order_by(db.desc(Package.score))).limit(4).all() pop_txp = join(query.filter_by(type=PackageType.TXP).order_by(db.desc(Package.score))).limit(4).all() + high_reviewed = join(query.order_by(db.desc(Package.score - Package.score_downloads))) \ + .filter(Package.reviews.any()).limit(4).all() updated = db.session.query(Package).select_from(PackageRelease).join(Package) \ .filter_by(state=PackageState.APPROVED) \ .order_by(db.desc(PackageRelease.releaseDate)) \ .limit(20).all() - updated = updated[:8] + updated = updated[:4] reviews = PackageReview.query.filter_by(recommends=True).order_by(db.desc(PackageReview.created_at)).limit(5).all() @@ -38,4 +40,4 @@ def home(): .select_from(Tag).outerjoin(Tags).group_by(Tag.id).order_by(db.asc(Tag.title)).all() return render_template("index.html", count=count, downloads=downloads, tags=tags, - new=new, updated=updated, pop_mod=pop_mod, pop_txp=pop_txp, pop_gam=pop_gam, reviews=reviews) + new=new, updated=updated, pop_mod=pop_mod, pop_txp=pop_txp, pop_gam=pop_gam, high_reviewed=high_reviewed, reviews=reviews) diff --git a/app/flatpages/help/api.md b/app/flatpages/help/api.md index e695f21..ec59849 100644 --- a/app/flatpages/help/api.md +++ b/app/flatpages/help/api.md @@ -66,7 +66,7 @@ Supported query parameters: * `random` - When present, enable random ordering and ignore `sort`. * `limit` - Return at most `limit` packages. * `hide` - Hide content based on [Content Flags](/help/content_flags/). -* `sort` - Sort by (`name`, `title`, `score`, `downloads`, `created_at`, `approved_at`, `last_release`). +* `sort` - Sort by (`name`, `title`, `score`, `reviews`, `downloads`, `created_at`, `approved_at`, `last_release`). * `order` - Sort ascending (`asc`) or descending (`desc`). * `protocol_version` - Only show packages supported by this Minetest protocol version. * `engine_version` - Only show packages supported by this Minetest engine version, eg: `5.3.0`. diff --git a/app/querybuilder.py b/app/querybuilder.py index c0efb7c..d29bc41 100644 --- a/app/querybuilder.py +++ b/app/querybuilder.py @@ -131,6 +131,9 @@ class QueryBuilder: pass elif self.order_by is None or self.order_by == "score": to_order = Package.score + elif self.order_by == "reviews": + query = query.filter(Package.reviews.any()) + to_order = (Package.score - Package.score_downloads) elif self.order_by == "name": to_order = Package.name elif self.order_by == "title": @@ -146,7 +149,7 @@ class QueryBuilder: else: abort(400) - if to_order: + if to_order is not None: if self.order_dir == "asc": to_order = db.asc(to_order) elif self.order_dir == "desc": diff --git a/app/templates/index.html b/app/templates/index.html index b107e8b..05ea824 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -73,6 +73,13 @@
+ + {{ _("See more") }} + +

{{ _("Top Reviewed") }}

+ {{ render_pkggrid(high_reviewed) }} + + {{ _("See more") }}