From 070d875ff89e758f4c16b7f362309dbeed6e23ac Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Fri, 9 Jun 2023 17:06:33 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Improved=20Legendary=20source?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed wrong library iteration - Fixed executable format - Added toggle in the preferences - Added legendary to on_import_action --- data/gtk/preferences.blp | 14 ++++++++++++++ data/hu.kramo.Cartridges.gschema.xml.in | 6 ++++++ src/importer/sources/legendary_source.py | 12 +++++++----- src/main.py | 3 +++ src/preferences.py | 7 +++++++ 5 files changed, 37 insertions(+), 5 deletions(-) diff --git a/data/gtk/preferences.blp b/data/gtk/preferences.blp index 5026889..f7a71b9 100644 --- a/data/gtk/preferences.blp +++ b/data/gtk/preferences.blp @@ -186,6 +186,20 @@ template $PreferencesWindow : Adw.PreferencesWindow { } } } + + Adw.ExpanderRow legendary_expander_row { + title: _("Legendary"); + show-enable-switch: true; + + Adw.ActionRow legendary_action_row { + title: _("Legendary Install Location"); + + Button legendary_file_chooser_button { + icon-name: "folder-symbolic"; + valign: center; + } + } + } } } diff --git a/data/hu.kramo.Cartridges.gschema.xml.in b/data/hu.kramo.Cartridges.gschema.xml.in index 9de7f7b..4738807 100644 --- a/data/hu.kramo.Cartridges.gschema.xml.in +++ b/data/hu.kramo.Cartridges.gschema.xml.in @@ -55,6 +55,12 @@ "~/.var/app/io.itch.itch/config/itch/" + + true + + + "~/.config/legendary/" + "" diff --git a/src/importer/sources/legendary_source.py b/src/importer/sources/legendary_source.py index 73ad76f..bbc5b5e 100644 --- a/src/importer/sources/legendary_source.py +++ b/src/importer/sources/legendary_source.py @@ -32,7 +32,7 @@ class LegendarySourceIterator(SourceIterator): "source": self.source.id, "name": entry["title"], "game_id": self.source.game_id_format.format(game_id=app_name), - "executable": self.source.game_id_format.format(app_name=app_name), + "executable": self.source.executable_format.format(app_name=app_name), } data = {} @@ -55,17 +55,19 @@ class LegendarySourceIterator(SourceIterator): # Open library file = self.source.location / "installed.json" try: - library = json.load(file.open()) + library: dict = json.load(file.open()) except (JSONDecodeError, OSError): logging.warning("Couldn't open Legendary file: %s", str(file)) return # Generate games from library - for entry in library: + for entry in library.values(): try: result = self.game_from_library_entry(entry) - except KeyError: + except KeyError as error: # Skip invalid games - logging.warning("Invalid Legendary game skipped in %s", str(file)) + logging.warning( + "Invalid Legendary game skipped in %s", str(file), exc_info=error + ) continue yield result diff --git a/src/main.py b/src/main.py index 834e204..52dd8e5 100644 --- a/src/main.py +++ b/src/main.py @@ -37,6 +37,7 @@ from src.importer.importer import Importer from src.importer.sources.bottles_source import BottlesLinuxSource from src.importer.sources.heroic_source import HeroicLinuxSource, HeroicWindowsSource from src.importer.sources.itch_source import ItchLinuxSource, ItchWindowsSource +from src.importer.sources.legendary_source import LegendaryLinuxSource from src.importer.sources.lutris_source import LutrisLinuxSource from src.importer.sources.steam_source import SteamLinuxSource, SteamWindowsSource from src.preferences import PreferencesWindow @@ -202,6 +203,8 @@ class CartridgesApplication(Adw.Application): if shared.schema.get_boolean("itch"): importer.add_source(ItchLinuxSource()) importer.add_source(ItchWindowsSource()) + if shared.schema.get_boolean("legendary"): + importer.add_source(LegendaryLinuxSource()) importer.run() def on_remove_game_action(self, *_args): diff --git a/src/preferences.py b/src/preferences.py index e0a5aff..784fab9 100644 --- a/src/preferences.py +++ b/src/preferences.py @@ -76,6 +76,10 @@ class PreferencesWindow(Adw.PreferencesWindow): itch_action_row = Gtk.Template.Child() itch_file_chooser_button = Gtk.Template.Child() + legendary_expander_row = Gtk.Template.Child() + legendary_action_row = Gtk.Template.Child() + legendary_file_chooser_button = Gtk.Template.Child() + sgdb_key_group = Gtk.Template.Child() sgdb_key_entry_row = Gtk.Template.Child() sgdb_switch = Gtk.Template.Child() @@ -156,6 +160,9 @@ class PreferencesWindow(Adw.PreferencesWindow): # itch self.create_preferences(self, "itch", "itch", True) + # Legendary + self.create_preferences(self, "legendary", "Legendary", True) + # SteamGridDB def sgdb_key_changed(*_args): shared.schema.set_string("sgdb-key", self.sgdb_key_entry_row.get_text())