This commit is contained in:
kramo
2023-09-26 19:47:03 +02:00
parent c3226e33e8
commit 38e71e32b9
6 changed files with 31 additions and 31 deletions

View File

@@ -31,7 +31,7 @@ from src.errors.friendly_error import FriendlyError
from src.game import Game from src.game import Game
from src.game_cover import GameCover from src.game_cover import GameCover
from src.store.managers.cover_manager import CoverManager from src.store.managers.cover_manager import CoverManager
from src.store.managers.sgdb_manager import SGDBManager from src.store.managers.sgdb_manager import SgdbManager
from src.utils.create_dialog import create_dialog from src.utils.create_dialog import create_dialog
from src.utils.save_cover import convert_cover, save_cover from src.utils.save_cover import convert_cover, save_cover
@@ -245,7 +245,7 @@ class DetailsWindow(Adw.Window):
# Get a cover from SGDB if none is present # Get a cover from SGDB if none is present
if not self.game_cover.get_texture(): if not self.game_cover.get_texture():
self.game.set_loading(1) self.game.set_loading(1)
sgdb_manager = shared.store.managers[SGDBManager] sgdb_manager = shared.store.managers[SgdbManager]
sgdb_manager.reset_cancellable() sgdb_manager.reset_cancellable()
sgdb_manager.process_game(self.game, {}, self.update_cover_callback) sgdb_manager.process_game(self.game, {}, self.update_cover_callback)
@@ -254,7 +254,7 @@ class DetailsWindow(Adw.Window):
self.close() self.close()
shared.win.show_details_page(self.game) shared.win.show_details_page(self.game)
def update_cover_callback(self, manager: SGDBManager) -> None: def update_cover_callback(self, manager: SgdbManager) -> None:
# Set the game as not loading # Set the game as not loading
self.game.set_loading(-1) self.game.set_loading(-1)
self.game.update() self.game.update()

View File

@@ -51,7 +51,7 @@ from src.preferences import PreferencesWindow
from src.store.managers.cover_manager import CoverManager from src.store.managers.cover_manager import CoverManager
from src.store.managers.display_manager import DisplayManager from src.store.managers.display_manager import DisplayManager
from src.store.managers.file_manager import FileManager from src.store.managers.file_manager import FileManager
from src.store.managers.sgdb_manager import SGDBManager from src.store.managers.sgdb_manager import SgdbManager
from src.store.managers.steam_api_manager import SteamAPIManager from src.store.managers.steam_api_manager import SteamAPIManager
from src.store.store import Store from src.store.store import Store
from src.utils.migrate_files_v1_to_v2 import migrate_files_v1_to_v2 from src.utils.migrate_files_v1_to_v2 import migrate_files_v1_to_v2
@@ -107,7 +107,7 @@ class CartridgesApplication(Adw.Application):
# Add rest of the managers for game imports # Add rest of the managers for game imports
shared.store.add_manager(CoverManager()) shared.store.add_manager(CoverManager())
shared.store.add_manager(SteamAPIManager()) shared.store.add_manager(SteamAPIManager())
shared.store.add_manager(SGDBManager()) shared.store.add_manager(SgdbManager())
shared.store.toggle_manager_in_pipelines(FileManager, True) shared.store.toggle_manager_in_pipelines(FileManager, True)
# Create actions # Create actions

View File

@@ -38,7 +38,7 @@ from src.importer.sources.lutris_source import LutrisSource
from src.importer.sources.retroarch_source import RetroarchSource from src.importer.sources.retroarch_source import RetroarchSource
from src.importer.sources.source import Source from src.importer.sources.source import Source
from src.importer.sources.steam_source import SteamSource from src.importer.sources.steam_source import SteamSource
from src.store.managers.sgdb_manager import SGDBManager from src.store.managers.sgdb_manager import SgdbManager
from src.utils.create_dialog import create_dialog from src.utils.create_dialog import create_dialog
@@ -175,15 +175,15 @@ class PreferencesWindow(Adw.PreferencesWindow):
) )
) )
def redownload_sgdb(*_args) -> None: def update_sgdb(*_args: Any) -> None:
counter = 0 counter = 0
games_len = len(shared.store) games_len = len(shared.store)
sgdb_manager = shared.store.managers[SGDBManager] sgdb_manager = shared.store.managers[SgdbManager]
sgdb_manager.reset_cancellable() sgdb_manager.reset_cancellable()
self.add_toast(download_toast := Adw.Toast.new(_("Downloading covers…"))) self.add_toast(download_toast := Adw.Toast.new(_("Downloading covers…")))
def update_cover_callback(manager: SGDBManager) -> None: def update_cover_callback(manager: SgdbManager) -> None:
nonlocal counter nonlocal counter
nonlocal games_len nonlocal games_len
nonlocal download_toast nonlocal download_toast
@@ -208,7 +208,7 @@ class PreferencesWindow(Adw.PreferencesWindow):
for game in shared.store: for game in shared.store:
sgdb_manager.process_game(game, {}, update_cover_callback) sgdb_manager.process_game(game, {}, update_cover_callback)
self.sgdb_fetch_button.connect("clicked", redownload_sgdb) self.sgdb_fetch_button.connect("clicked", update_sgdb)
# Switches # Switches
self.bind_switches( self.bind_switches(

View File

@@ -21,14 +21,14 @@ from src import shared
from src.game import Game from src.game import Game
from src.game_cover import GameCover from src.game_cover import GameCover
from src.store.managers.manager import Manager from src.store.managers.manager import Manager
from src.store.managers.sgdb_manager import SGDBManager from src.store.managers.sgdb_manager import SgdbManager
from src.store.managers.steam_api_manager import SteamAPIManager from src.store.managers.steam_api_manager import SteamAPIManager
class DisplayManager(Manager): class DisplayManager(Manager):
"""Manager in charge of adding a game to the UI""" """Manager in charge of adding a game to the UI"""
run_after = (SteamAPIManager, SGDBManager) run_after = (SteamAPIManager, SgdbManager)
signals = {"update-ready"} signals = {"update-ready"}
def main(self, game: Game, _additional_data: dict) -> None: def main(self, game: Game, _additional_data: dict) -> None:

View File

@@ -26,10 +26,10 @@ from src.game import Game
from src.store.managers.async_manager import AsyncManager from src.store.managers.async_manager import AsyncManager
from src.store.managers.cover_manager import CoverManager from src.store.managers.cover_manager import CoverManager
from src.store.managers.steam_api_manager import SteamAPIManager from src.store.managers.steam_api_manager import SteamAPIManager
from src.utils.steamgriddb import SGDBAuthError, SGDBHelper from src.utils.steamgriddb import SgdbAuthError, SgdbHelper
class SGDBManager(AsyncManager): class SgdbManager(AsyncManager):
"""Manager in charge of downloading a game's cover from SteamGridDB""" """Manager in charge of downloading a game's cover from SteamGridDB"""
run_after = (SteamAPIManager, CoverManager) run_after = (SteamAPIManager, CoverManager)
@@ -37,9 +37,9 @@ class SGDBManager(AsyncManager):
def main(self, game: Game, _additional_data: dict) -> None: def main(self, game: Game, _additional_data: dict) -> None:
try: try:
sgdb = SGDBHelper() sgdb = SgdbHelper()
sgdb.conditionaly_update_cover(game) sgdb.conditionaly_update_cover(game)
except SGDBAuthError as error: except SgdbAuthError as error:
# If invalid auth, cancel all SGDBManager tasks # If invalid auth, cancel all SGDBManager tasks
self.cancellable.cancel() self.cancellable.cancel()
raise FriendlyError( raise FriendlyError(

View File

@@ -31,27 +31,27 @@ from src.game import Game
from src.utils.save_cover import convert_cover, save_cover from src.utils.save_cover import convert_cover, save_cover
class SGDBError(Exception): class SgdbError(Exception):
pass pass
class SGDBAuthError(SGDBError): class SgdbAuthError(SgdbError):
pass pass
class SGDBGameNotFoundError(SGDBError): class SgdbGameNotFound(SgdbError):
pass pass
class SGDBBadRequestError(SGDBError): class SgdbBadRequest(SgdbError):
pass pass
class SGDBNoImageFoundError(SGDBError): class SgdbNoImageFound(SgdbError):
pass pass
class SGDBHelper: class SgdbHelper:
"""Helper class to make queries to SteamGridDB""" """Helper class to make queries to SteamGridDB"""
base_url = "https://www.steamgriddb.com/api/v2/" base_url = "https://www.steamgriddb.com/api/v2/"
@@ -70,9 +70,9 @@ class SGDBHelper:
case 200: case 200:
return res.json()["data"][0]["id"] return res.json()["data"][0]["id"]
case 401: case 401:
raise SGDBAuthError(res.json()["errors"][0]) raise SgdbAuthError(res.json()["errors"][0])
case 404: case 404:
raise SGDBGameNotFoundError(res.status_code) raise SgdbGameNotFound(res.status_code)
case _: case _:
res.raise_for_status() res.raise_for_status()
@@ -86,12 +86,12 @@ class SGDBHelper:
case 200: case 200:
data = res.json()["data"] data = res.json()["data"]
if len(data) == 0: if len(data) == 0:
raise SGDBNoImageFoundError() raise SgdbNoImageFound()
return data[0]["url"] return data[0]["url"]
case 401: case 401:
raise SGDBAuthError(res.json()["errors"][0]) raise SgdbAuthError(res.json()["errors"][0])
case 404: case 404:
raise SGDBGameNotFoundError(res.status_code) raise SgdbGameNotFound(res.status_code)
case _: case _:
res.raise_for_status() res.raise_for_status()
@@ -115,7 +115,7 @@ class SGDBHelper:
# Get ID for the game # Get ID for the game
try: try:
sgdb_id = self.get_game_id(game) sgdb_id = self.get_game_id(game)
except (HTTPError, SGDBError) as error: except (HTTPError, SgdbError) as error:
logging.warning( logging.warning(
"%s while getting SGDB ID for %s", type(error).__name__, game.name "%s while getting SGDB ID for %s", type(error).__name__, game.name
) )
@@ -135,10 +135,10 @@ class SGDBHelper:
tmp_file_path = tmp_file.get_path() tmp_file_path = tmp_file.get_path()
Path(tmp_file_path).write_bytes(response.content) Path(tmp_file_path).write_bytes(response.content)
save_cover(game.game_id, convert_cover(tmp_file_path)) save_cover(game.game_id, convert_cover(tmp_file_path))
except SGDBAuthError as error: except SgdbAuthError as error:
# Let caller handle auth errors # Let caller handle auth errors
raise error raise error
except (HTTPError, SGDBError) as error: except (HTTPError, SgdbError) as error:
logging.warning( logging.warning(
"%s while getting image for %s kwargs=%s", "%s while getting image for %s kwargs=%s",
type(error).__name__, type(error).__name__,
@@ -156,4 +156,4 @@ class SGDBHelper:
game.name, game.name,
sgdb_id, sgdb_id,
) )
raise SGDBNoImageFoundError() raise SgdbNoImageFound()