From 9fd58e6ba3391a2cbc376b8fcb4a4185a8742f87 Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Sun, 21 May 2023 18:29:26 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A7=20More=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/importer/importer.py | 21 ++++++++++----------- src/importer/source.py | 6 ------ src/importer/sources/lutris_source.py | 8 ++++---- src/importer/sources/steam_source.py | 6 ++---- src/main.py | 16 ++++++++-------- src/utils/decorators.py | 5 +++-- src/utils/steamgriddb.py | 18 ++++++------------ 7 files changed, 33 insertions(+), 47 deletions(-) diff --git a/src/importer/importer.py b/src/importer/importer.py index 2f1e5ae..50f2bd5 100644 --- a/src/importer/importer.py +++ b/src/importer/importer.py @@ -3,6 +3,7 @@ import logging from gi.repository import Adw, Gio, Gtk from requests import HTTPError +import src.shared as shared from src.utils.create_dialog import create_dialog from src.utils.steamgriddb import SGDBAuthError, SGDBError, SGDBHelper from src.utils.task import Task @@ -16,7 +17,6 @@ class Importer: import_statuspage = None import_dialog = None - win = None sources = None n_games_added = 0 @@ -27,8 +27,7 @@ class Importer: sgdb_cancellable = None sgdb_error = None - def __init__(self, win): - self.win = win + def __init__(self): self.sources = set() @property @@ -82,7 +81,7 @@ class Importer: modal=True, default_width=350, default_height=-1, - transient_for=self.win, + transient_for=shared.win, deletable=False, ) self.import_dialog.present() @@ -123,14 +122,14 @@ class Importer: # Avoid duplicates if ( - game.game_id in self.win.games - and not self.win.games[game.game_id].removed + game.game_id in shared.win.games + and not shared.win.games[game.game_id].removed ): continue # Register game logging.info("New game registered %s (%s)", game.name, game.game_id) - self.win.games[game.game_id] = game + shared.win.games[game.game_id] = game game.save() self.n_games_added += 1 @@ -156,7 +155,7 @@ class Importer: """SGDB query code""" game, *_rest = data game.set_loading(1) - sgdb = SGDBHelper(self.win) + sgdb = SGDBHelper() try: sgdb.conditionaly_update_cover(game) except SGDBAuthError as error: @@ -208,12 +207,12 @@ class Importer: # The variable is the number of games toast.set_title(_("{} games imported").format(self.n_games_added)) - self.win.toast_overlay.add_toast(toast) + shared.win.toast_overlay.add_toast(toast) def create_sgdb_error_dialog(self): """SGDB error dialog""" create_dialog( - self.win, + shared.win, _("Couldn't Connect to SteamGridDB"), str(self.sgdb_error), "open_preferences", @@ -221,7 +220,7 @@ class Importer: ).connect("response", self.dialog_response_callback, "sgdb") def open_preferences(self, page=None, expander_row=None): - self.win.get_application().on_preferences_action( + shared.win.get_application().on_preferences_action( page_name=page, expander_row=expander_row ) diff --git a/src/importer/source.py b/src/importer/source.py index 25da61c..a45667a 100644 --- a/src/importer/source.py +++ b/src/importer/source.py @@ -3,7 +3,6 @@ from collections.abc import Iterable, Iterator, Sized from typing import Optional from src.game import Game -from src.window import CartridgesWindow class SourceIterator(Iterator, Sized): @@ -33,14 +32,9 @@ class SourceIterator(Iterator, Sized): class Source(Iterable): """Source of games. E.g an installed app with a config file that lists game directories""" - win: "CartridgesWindow" = None name: str variant: str - def __init__(self, win) -> None: - super().__init__() - self.win = win - @property def full_name(self) -> str: """The source's full name""" diff --git a/src/importer/sources/lutris_source.py b/src/importer/sources/lutris_source.py index 03afa01..ccd3488 100644 --- a/src/importer/sources/lutris_source.py +++ b/src/importer/sources/lutris_source.py @@ -4,6 +4,7 @@ from sqlite3 import connect from time import time from pathlib import Path +import src.shared as shared from src.game import Game from src.importer.source import Source, SourceIterator from src.utils.decorators import replaced_by_path, replaced_by_schema_key @@ -41,7 +42,7 @@ class LutrisSourceIterator(SourceIterator): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.import_steam = self.source.win.schema.get_boolean("lutris-import-steam") + self.import_steam = shared.schema.get_boolean("lutris-import-steam") self.db_location = self.source.location / "pga.db" self.db_connection = connect(self.db_location) self.db_request_params = {"import_steam": self.import_steam} @@ -77,13 +78,12 @@ class LutrisSourceIterator(SourceIterator): "executable": self.source.executable_format.format(game_id=row[2]), "developer": None, # TODO get developer metadata on Lutris } - game = Game(self.source.win, values, allow_side_effects=False) + game = Game(values, allow_side_effects=False) # Save official image image_path = self.source.location / "covers" / "coverart" / f"{row[2]}.jpg" if image_path.exists(): - resized = resize_cover(self.source.win, image_path) - save_cover(self.source.win, values["game_id"], resized) + save_cover(values["game_id"], resize_cover(image_path)) return game diff --git a/src/importer/sources/steam_source.py b/src/importer/sources/steam_source.py index 238c714..30ada4d 100644 --- a/src/importer/sources/steam_source.py +++ b/src/importer/sources/steam_source.py @@ -84,7 +84,7 @@ class SteamSourceIterator(SourceIterator): "game_id": self.source.game_id_format.format(game_id=appid), "executable": self.source.executable_format.format(game_id=appid), } - game = Game(self.source.win, values, allow_side_effects=False) + game = Game(values, allow_side_effects=False) # Add official cover image cover_path = ( @@ -94,9 +94,7 @@ class SteamSourceIterator(SourceIterator): / f"{appid}_library_600x900.jpg" ) if cover_path.is_file(): - save_cover( - self.source.win, game.game_id, resize_cover(self.source.win, cover_path) - ) + save_cover(game.game_id, resize_cover(cover_path)) # Get online metadata # TODO move to its own manager diff --git a/src/main.py b/src/main.py index 05e4c4e..647fb14 100644 --- a/src/main.py +++ b/src/main.py @@ -157,14 +157,14 @@ class CartridgesApplication(Adw.Application): DetailsWindow() def on_import_action(self, *_args): - importer = Importer(self.win) - if self.win.schema.get_boolean("lutris"): - importer.add_source(LutrisNativeSource(self.win)) - importer.add_source(LutrisFlatpakSource(self.win)) - if self.win.schema.get_boolean("steam"): - importer.add_source(SteamNativeSource(self.win)) - importer.add_source(SteamFlatpakSource(self.win)) - importer.add_source(SteamWindowsSource(self.win)) + importer = Importer() + if shared.schema.get_boolean("lutris"): + importer.add_source(LutrisNativeSource()) + importer.add_source(LutrisFlatpakSource()) + if shared.schema.get_boolean("steam"): + importer.add_source(SteamNativeSource()) + importer.add_source(SteamFlatpakSource()) + importer.add_source(SteamWindowsSource()) importer.run() def on_remove_game_action(self, *_args): diff --git a/src/utils/decorators.py b/src/utils/decorators.py index 456c450..d9a8433 100644 --- a/src/utils/decorators.py +++ b/src/utils/decorators.py @@ -17,6 +17,8 @@ from pathlib import Path from os import PathLike, environ from functools import wraps +import src.shared as shared + def replaced_by_path(override: PathLike): # Decorator builder """Replace the method's returned path with the override @@ -42,9 +44,8 @@ def replaced_by_schema_key(key: str): # Decorator builder def decorator(original_function): # Built decorator (closure) @wraps(original_function) def wrapper(*args, **kwargs): # func's override - schema = args[0].win.schema try: - override = schema.get_string(key) + override = shared.schema.get_string(key) except Exception: # pylint: disable=broad-exception-caught return original_function(*args, **kwargs) return replaced_by_path(override)(original_function)(*args, **kwargs) diff --git a/src/utils/steamgriddb.py b/src/utils/steamgriddb.py index abf268c..b685918 100644 --- a/src/utils/steamgriddb.py +++ b/src/utils/steamgriddb.py @@ -34,14 +34,10 @@ class SGDBHelper: """Helper class to make queries to SteamGridDB""" base_url = "https://www.steamgriddb.com/api/v2/" - win = None - - def __init__(self, win): - self.win = win @property def auth_headers(self): - key = self.win.schema.get_string("sgdb-key") + key = shared.schema.get_string("sgdb-key") headers = {"Authorization": f"Bearer {key}"} return headers @@ -82,14 +78,14 @@ class SGDBHelper: """Update the game's cover if appropriate""" # Obvious skips - use_sgdb = self.win.schema.get_boolean("sgdb") + use_sgdb = shared.schema.get_boolean("sgdb") if not use_sgdb or game.blacklisted: return - image_trunk = self.win.covers_dir / game.game_id + image_trunk = shared.covers_dir / game.game_id still = image_trunk.with_suffix(".tiff") uri_kwargs = image_trunk.with_suffix(".gif") - prefer_sgdb = self.win.schema.get_boolean("sgdb-prefer") + prefer_sgdb = shared.schema.get_boolean("sgdb-prefer") # Do nothing if file present and not prefer SGDB if not prefer_sgdb and (still.is_file() or uri_kwargs.is_file()): @@ -106,7 +102,7 @@ class SGDBHelper: # Build different SGDB options to try image_uri_kwargs_sets = [{"animated": False}] - if self.win.schema.get_boolean("sgdb-animated"): + if shared.schema.get_boolean("sgdb-animated"): image_uri_kwargs_sets.insert(0, {"animated": True}) # Download covers @@ -117,9 +113,7 @@ class SGDBHelper: tmp_file = Gio.File.new_tmp()[0] tmp_file_path = tmp_file.get_path() Path(tmp_file_path).write_bytes(response.content) - save_cover( - self.win, game.game_id, resize_cover(self.win, tmp_file_path) - ) + save_cover(game.game_id, resize_cover(tmp_file_path)) except SGDBAuthError as error: # Let caller handle auth errors raise error