From f22911b4a05cb4a95cce87ec1a1a8103efbeaf8b Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 24 Jun 2022 23:18:00 +0100 Subject: [PATCH] Fix and reenable game support --- app/logic/game_support.py | 26 ++++++++++++++++++-------- app/models/packages.py | 3 ++- app/tasks/importtasks.py | 6 +++--- app/templates/packages/view.html | 4 ++-- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/logic/game_support.py b/app/logic/game_support.py index 708fd87..23d1173 100644 --- a/app/logic/game_support.py +++ b/app/logic/game_support.py @@ -163,26 +163,36 @@ class GameSupportResolver: for package in Package.query.filter(Package.type == PackageType.MOD, Package.state != PackageState.DELETED).all(): retval = self.resolve(package, []) for game in retval: - support = PackageGameSupport(package, game) + support = PackageGameSupport(package, game, 1) db.session.add(support) - def update(self, package: Package) -> None: + """ + Add supported game to a package, given the confidence. + + Higher confidences outweigh lower ones. + """ + def add_supported(self, package: Package, supported_games: PackageSet, confidence: int): previous_supported: Dict[str, PackageGameSupport] = {} for support in package.supported_games.all(): + db.session.merge(support.game) previous_supported[support.game.getId()] = support - retval = self.resolve(package, []) - for game in retval: + for game in supported_games: assert game lookup = previous_supported.pop(game.getId(), None) if lookup is None: - support = PackageGameSupport(package, game) + support = PackageGameSupport(package, game, confidence) db.session.add(support) - elif lookup.confidence == 0: + elif lookup.confidence <= confidence: lookup.supports = True + lookup.confidence = confidence db.session.merge(lookup) for game, support in previous_supported.items(): - if support.confidence == 0: - db.session.remove(support) + if support.confidence == confidence: + db.session.delete(support) + + def update(self, package: Package) -> None: + retval = self.resolve(package, []) + self.add_supported(package, retval, 1) diff --git a/app/models/packages.py b/app/models/packages.py index 681e218..783485a 100644 --- a/app/models/packages.py +++ b/app/models/packages.py @@ -358,9 +358,10 @@ class PackageGameSupport(db.Model): __table_args__ = (db.UniqueConstraint("game_id", "package_id", name="_package_game_support_uc"),) - def __init__(self, package, game): + def __init__(self, package, game, confidence): self.package = package self.game = game + self.confidence = confidence class Package(db.Model): diff --git a/app/tasks/importtasks.py b/app/tasks/importtasks.py index d9f394b..2ef9a6c 100644 --- a/app/tasks/importtasks.py +++ b/app/tasks/importtasks.py @@ -116,9 +116,9 @@ def postReleaseCheckUpdate(self, release: PackageRelease, path): db.session.add(Dependency(package, meta=meta, optional=True)) # Update game supports - # if package.type == PackageType.MOD: - # resolver = GameSupportResolver() - # resolver.update(package) + if package.type == PackageType.MOD: + resolver = GameSupportResolver() + resolver.update(package) # Update min/max if tree.meta.get("min_minetest_version"): diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html index 019a99a..e252c6d 100644 --- a/app/templates/packages/view.html +++ b/app/templates/packages/view.html @@ -323,7 +323,7 @@ {{ render_pkggrid(packages_uses) }} {% endif %} - {% if false %} + {% if package.type == package.type.GAME %}

{{ _("Content") }}

{{ _("View content for game") }} @@ -432,7 +432,7 @@ {% endif %} - {% if false %} + {% if package.type == package.type.MOD %}

{{ _("Compatible Games") }}

{% for support in package.getSortedSupportedGames() %}