diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-07-17 21:18:27 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-07-17 21:18:27 +0100 |
commit | b067fd2e773409790cb86cff1f799ad1563ea480 (patch) | |
tree | 7b2f9e292d49bbaac9443537cd7885b6409662c7 /app/querybuilder.py | |
parent | 6a674c3c79437c7b4829947c67dd7f14b32c1941 (diff) | |
download | cheatdb-b067fd2e773409790cb86cff1f799ad1563ea480.tar.xz |
Add support for filtering content warnings
Diffstat (limited to 'app/querybuilder.py')
-rw-r--r-- | app/querybuilder.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/app/querybuilder.py b/app/querybuilder.py index c4823cb..922438e 100644 --- a/app/querybuilder.py +++ b/app/querybuilder.py @@ -1,4 +1,4 @@ -from .models import db, PackageType, Package, ForumTopic, License, MinetestRelease, PackageRelease, User, Tag, Tags +from .models import db, PackageType, Package, ForumTopic, License, MinetestRelease, PackageRelease, User, Tag, Tags, ContentWarning from .utils import isNo, isYes, get_int_or_abort from sqlalchemy.sql.expression import func from flask import abort @@ -27,17 +27,21 @@ class QueryBuilder: # Hide hide_flags = args.getlist("hide") + self.title = title self.types = types self.tags = tags self.random = "random" in args self.lucky = "lucky" in args - self.hide_nonfree = "nonfree" in hide_flags self.limit = 1 if self.lucky else None self.order_by = args.get("sort") self.order_dir = args.get("order") or "desc" + self.hide_nonfree = "nonfree" in hide_flags + self.hide_flags = set(hide_flags) + self.hide_flags.discard("nonfree") + # Filters self.search = args.get("q") @@ -112,6 +116,14 @@ class QueryBuilder: for tag in self.tags: query = query.filter(Package.tags.any(Tag.id == tag.id)) + if "android_default" in self.hide_flags: + query = query.filter(~ Package.content_warnings.any()) + else: + for flag in self.hide_flags: + warning = ContentWarning.query.filter_by(name=flag).first() + if warning: + query = query.filter(~ Package.content_warnings.any(ContentWarning.id == warning.id)) + if self.hide_nonfree: query = query.filter(Package.license.has(License.is_foss == True)) query = query.filter(Package.media_license.has(License.is_foss == True)) |