Add a "source:" tag that matches service names, and also "service:" as an alias.

This commit is contained in:
Daniel Johnson 2024-04-20 09:58:26 -04:00 committed by Mathieu Comandon
parent acd7f7f07d
commit 5f1c135cdb
2 changed files with 22 additions and 0 deletions

View file

@ -9,6 +9,7 @@ from lutris.database.categories import (
normalized_category_names,
)
from lutris.runners.runner import Runner
from lutris.services import SERVICES
from lutris.util.strings import parse_playtime_parts, strip_accents
from lutris.util.tokenization import (
TokenReader,
@ -197,6 +198,8 @@ class GameSearch(BaseSearch):
"favorite",
"categorized",
"category",
"source",
"service", # an alias for source
"runner",
"platform",
"playtime",
@ -217,6 +220,10 @@ class GameSearch(BaseSearch):
category = tokens.get_cleaned_token() or ""
return self.get_category_predicate(category)
if name in ("source", "service"):
service_name = tokens.get_cleaned_token() or ""
return self.get_service_predicate(service_name)
if name == "runner":
runner_name = tokens.get_cleaned_token() or ""
return self.get_runner_predicate(runner_name)
@ -360,6 +367,20 @@ class GameSearch(BaseSearch):
return match_categorized
def get_service_predicate(self, service_name: str) -> Callable:
service_name = service_name.casefold()
def match_service(db_game):
game_service = db_game.get("service")
if game_service:
if game_service.casefold() == service_name:
return True
service = SERVICES.get(game_service)
return service and service_name == service.name.casefold()
return match_service
def get_runner_predicate(self, runner_name: str) -> Callable:
runner_name = runner_name.casefold()

View file

@ -311,6 +311,7 @@
<b>hidden:</b><i>true</i> Only hidden games.
<b>favorite:</b><i>true</i> Only favorite games.
<b>category:</b><i>x</i> Only games in cateogry <i>x</i>.
<b>source:</b><i>steam</i> Only Steam games
<b>runner:</b><i>wine</i> Only Wine games
<b>platform:</b><i>windows</i> Only Windows games
<b>playtime:</b><i>>2 hours</i> Only games played for more than 2 hours.