From fd66d07ac3875d56bb01d00624863d24e6bc12a8 Mon Sep 17 00:00:00 2001 From: kramo <93832451+kra-mo@users.noreply.github.com> Date: Tue, 11 Apr 2023 23:31:16 +0200 Subject: [PATCH] Cleanups --- data/gtk/game.blp | 19 ++- data/gtk/help-overlay.blp | 2 +- data/gtk/style-dark.css | 2 +- data/gtk/style.css | 2 +- data/gtk/window.blp | 26 ++-- po/POTFILES | 8 +- src/game.py | 25 ++-- .../bottles_importer.py} | 4 +- .../heroic_importer.py} | 4 +- .../itch_importer.py} | 4 +- .../lutris_importer.py} | 5 +- .../steam_importer.py} | 6 +- src/main.py | 34 ++--- src/meson.build | 10 +- src/preferences.py | 13 +- src/utils/create_details_window.py | 11 +- src/utils/steamgriddb.py | 4 +- src/window.py | 118 +++++++++--------- 18 files changed, 162 insertions(+), 135 deletions(-) rename src/{utils/bottles_parser.py => importers/bottles_importer.py} (97%) rename src/{utils/heroic_parser.py => importers/heroic_importer.py} (99%) rename src/{utils/itch_parser.py => importers/itch_importer.py} (99%) rename src/{utils/lutris_parser.py => importers/lutris_importer.py} (98%) rename src/{utils/steam_parser.py => importers/steam_importer.py} (98%) diff --git a/data/gtk/game.blp b/data/gtk/game.blp index 2f17aa6..b9717f4 100644 --- a/data/gtk/game.blp +++ b/data/gtk/game.blp @@ -1,7 +1,7 @@ using Gtk 4.0; using Adw 1; -template game : Box { +template Game : Box { orientation: vertical; halign: center; valign: start; @@ -12,11 +12,18 @@ template game : Box { orientation: vertical; Button cover_button { overflow: hidden; - Picture cover { - width-request: 200; - height-request: 300; - hexpand: true; - vexpand: true; + Overlay { + [overlay] + Spinner spinner { + margin-start: 72; + margin-end: 72; + } + Picture cover { + width-request: 200; + height-request: 300; + hexpand: true; + vexpand: true; + } } styles [ diff --git a/data/gtk/help-overlay.blp b/data/gtk/help-overlay.blp index 4b2ecce..5f39ea1 100644 --- a/data/gtk/help-overlay.blp +++ b/data/gtk/help-overlay.blp @@ -61,7 +61,7 @@ ShortcutsWindow help_overlay { ShortcutsShortcut { title: _("Remove game"); - action-name: "app.remove_game_overview"; + action-name: "app.remove_game_details_view"; } } } diff --git a/data/gtk/style-dark.css b/data/gtk/style-dark.css index c9a8430..82650db 100644 --- a/data/gtk/style-dark.css +++ b/data/gtk/style-dark.css @@ -1,7 +1,7 @@ @define-color accent_color @purple_1; @define-color accent_bg_color @purple_4; -#overview_play_button { +#details_view_play_button { color: @dark_5; background-color: @light_1; } \ No newline at end of file diff --git a/data/gtk/style.css b/data/gtk/style.css index 53a8a60..b5a8cd8 100644 --- a/data/gtk/style.css +++ b/data/gtk/style.css @@ -1,7 +1,7 @@ @define-color accent_color @purple_5; @define-color accent_bg_color @purple_3; -#overview_play_button { +#details_view_play_button { color: @light_1; background-color: @dark_5; opacity: 0.8; diff --git a/data/gtk/window.blp b/data/gtk/window.blp index f937bee..89cc315 100644 --- a/data/gtk/window.blp +++ b/data/gtk/window.blp @@ -33,9 +33,9 @@ template CartridgesWindow : Adw.ApplicationWindow { visible-child: library_view; transition-type: over_left; - Overlay overview { + Overlay details_view { [overlay] - Box overview_box { + Box details_view_box { orientation: vertical; Adw.HeaderBar { @@ -47,7 +47,7 @@ template CartridgesWindow : Adw.ApplicationWindow { } [title] - Adw.WindowTitle overview_header_bar_title { + Adw.WindowTitle details_view_header_bar_title { title: _("Game Details"); } @@ -72,12 +72,12 @@ template CartridgesWindow : Adw.ApplicationWindow { maximum-size: 200; Overlay { [overlay] - Spinner overview_spinner { + Spinner details_view_spinner { margin-start: 72; margin-end: 72; } - Picture overview_cover { + Picture details_view_cover { halign: end; valign: start; width-request: 200; @@ -96,7 +96,7 @@ template CartridgesWindow : Adw.ApplicationWindow { vexpand: true; valign: center; - Label overview_title { + Label details_view_title { label: _("Game Title"); hexpand: true; halign: start; @@ -109,7 +109,7 @@ template CartridgesWindow : Adw.ApplicationWindow { ] } - Label overview_developer { + Label details_view_developer { margin-top: 3; hexpand: true; halign: start; @@ -128,12 +128,12 @@ template CartridgesWindow : Adw.ApplicationWindow { hexpand: true; halign: start; - Label overview_added { + Label details_view_added { wrap: true; wrap-mode: word_char; natural-wrap-mode: word; } - Label overview_last_played { + Label details_view_last_played { margin-start: 12; wrap: true; wrap-mode: word_char; @@ -145,8 +145,8 @@ template CartridgesWindow : Adw.ApplicationWindow { vexpand: true; valign: center; - Button overview_play_button { - name: "overview_play_button"; + Button details_view_play_button { + name: "details_view_play_button"; action-name: "app.launch_game"; label: _("Play"); halign: start; @@ -173,7 +173,7 @@ template CartridgesWindow : Adw.ApplicationWindow { "circular", ] } - Button overview_hide_button { + Button details_view_hide_button { action-name: "app.hide_game"; styles [ @@ -218,7 +218,7 @@ template CartridgesWindow : Adw.ApplicationWindow { "background", ] - Picture overview_blurred_cover { + Picture details_view_blurred_cover { can-shrink: true; keep-aspect-ratio: false; hexpand: true; diff --git a/po/POTFILES b/po/POTFILES index 21de87f..3e4efc5 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -2,19 +2,17 @@ data/hu.kramo.Cartridges.desktop.in data/hu.kramo.Cartridges.gschema.xml data/hu.kramo.Cartridges.metainfo.xml.in -data/gtk/window.blp data/gtk/game.blp data/gtk/help-overlay.blp data/gtk/preferences.blp +data/gtk/window.blp src/main.py src/window.py src/game.py src/preferences.py -src/utils/importer.py -src/utils/bottles_parser.py src/utils/create_details_window.py src/utils/create_dialog.py -src/utils/heroic_parser.py -src/utils/steam_parser.py +src/utils/importer.py +src/utils/steamgriddb.py \ No newline at end of file diff --git a/src/game.py b/src/game.py index 64e532a..03b2295 100644 --- a/src/game.py +++ b/src/game.py @@ -30,13 +30,14 @@ from .save_game import save_game @Gtk.Template(resource_path="/hu/kramo/Cartridges/gtk/game.ui") -class game(Gtk.Box): # pylint: disable=invalid-name - __gtype_name__ = "game" +class Game(Gtk.Box): + __gtype_name__ = "Game" overlay = Gtk.Template.Child() title = Gtk.Template.Child() play_button = Gtk.Template.Child() cover = Gtk.Template.Child() + spinner = Gtk.Template.Child() cover_button = Gtk.Template.Child() menu_button = Gtk.Template.Child() play_revealer = Gtk.Template.Child() @@ -58,10 +59,11 @@ class game(Gtk.Box): # pylint: disable=invalid-name self.removed = "removed" in data self.blacklisted = "blacklisted" in data - self.game_cover = GameCover(self.cover, path=self.get_cover_path()) - + self.loading = 0 self.title.set_label(self.name) + self.game_cover = GameCover(self.cover, path=self.get_cover_path()) + self.event_contoller_motion = Gtk.EventControllerMotion.new() self.add_controller(self.event_contoller_motion) self.overlay.set_measure_overlay(self.play_revealer, True) @@ -105,7 +107,9 @@ class game(Gtk.Box): # pylint: disable=invalid-name sys.exit() def toggle_hidden(self): - data = json.loads((self.games_dir / f"{self.game_id}.json").read_text("utf-8")) + data = json.loads( + (self.parent_widget.games_dir / f"{self.game_id}.json").read_text("utf-8") + ) data["hidden"] = not data["hidden"] @@ -139,11 +143,11 @@ class game(Gtk.Box): # pylint: disable=invalid-name if self.parent_widget.schema.get_boolean("cover-launches-game"): self.launch_game(None) else: - self.parent_widget.show_overview(None, self.game_id) + self.parent_widget.show_details_view(None, self.game_id) def play_button_clicked(self, _widget): if self.parent_widget.schema.get_boolean("cover-launches-game"): - self.parent_widget.show_overview(None, self.game_id) + self.parent_widget.show_details_view(None, self.game_id) else: self.launch_game(None) @@ -156,3 +160,10 @@ class game(Gtk.Box): # pylint: disable=invalid-name def schema_changed(self, _settings, key): if key == "cover-launches-game": self.set_play_label() + + def set_loading(self, state): + self.loading += state + loading = self.loading > 0 + + self.cover.set_opacity(int(not loading)) + self.spinner.set_spinning(loading) diff --git a/src/utils/bottles_parser.py b/src/importers/bottles_importer.py similarity index 97% rename from src/utils/bottles_parser.py rename to src/importers/bottles_importer.py index ed45ab7..9e29c34 100644 --- a/src/utils/bottles_parser.py +++ b/src/importers/bottles_importer.py @@ -1,4 +1,4 @@ -# bottles_parser.py +# bottles_importer.py # # Copyright 2022-2023 kramo # @@ -23,7 +23,7 @@ from time import time import yaml -def bottles_parser(parent_widget): +def bottles_importer(parent_widget): schema = parent_widget.schema bottles_dir = Path(schema.get_string("bottles-location")).expanduser() diff --git a/src/utils/heroic_parser.py b/src/importers/heroic_importer.py similarity index 99% rename from src/utils/heroic_parser.py rename to src/importers/heroic_importer.py index 7f27d57..e9a62a5 100644 --- a/src/utils/heroic_parser.py +++ b/src/importers/heroic_importer.py @@ -1,4 +1,4 @@ -# heroic_parser.py +# heroic_importer.py # # Copyright 2022-2023 kramo # @@ -24,7 +24,7 @@ from pathlib import Path from time import time -def heroic_parser(parent_widget): +def heroic_importer(parent_widget): schema = parent_widget.schema heroic_dir = Path(schema.get_string("heroic-location")).expanduser() diff --git a/src/utils/itch_parser.py b/src/importers/itch_importer.py similarity index 99% rename from src/utils/itch_parser.py rename to src/importers/itch_importer.py index 07aa869..cea7111 100644 --- a/src/utils/itch_parser.py +++ b/src/importers/itch_importer.py @@ -1,4 +1,4 @@ -# itch_parser.py +# itch_importer.py # # Copyright 2022-2023 kramo # @@ -115,7 +115,7 @@ def get_games_async(parent_widget, rows, importer): task.run_in_thread(create_func(current_time, parent_widget, row)) -def itch_parser(parent_widget): +def itch_importer(parent_widget): schema = parent_widget.schema database_path = (Path(schema.get_string("itch-location")) / "db").expanduser() diff --git a/src/utils/lutris_parser.py b/src/importers/lutris_importer.py similarity index 98% rename from src/utils/lutris_parser.py rename to src/importers/lutris_importer.py index aadf143..5536dc4 100644 --- a/src/utils/lutris_parser.py +++ b/src/importers/lutris_importer.py @@ -1,4 +1,4 @@ -# lutris_parser.py +# lutris_importer.py # # Copyright 2022-2023 kramo # @@ -23,8 +23,7 @@ from sqlite3 import connect from time import time -def lutris_parser(parent_widget): - +def lutris_importer(parent_widget): schema = parent_widget.schema database_path = (Path(schema.get_string("lutris-location"))).expanduser() diff --git a/src/utils/steam_parser.py b/src/importers/steam_importer.py similarity index 98% rename from src/utils/steam_parser.py rename to src/importers/steam_importer.py index 12df909..0da7108 100644 --- a/src/utils/steam_parser.py +++ b/src/importers/steam_importer.py @@ -1,4 +1,4 @@ -# steam_parser.py +# steam_importer.py # # Copyright 2022-2023 kramo # @@ -123,7 +123,7 @@ def get_games_async(parent_widget, appmanifests, steam_dir, importer): ) -def steam_parser(parent_widget): +def steam_importer(parent_widget): schema = parent_widget.schema steam_dir = Path(schema.get_string("steam-location")).expanduser() @@ -150,7 +150,7 @@ def steam_parser(parent_widget): schema.set_string("steam-location", str(steam_dir / "Steam")) else: steam_not_found() - steam_parser(parent_widget) + steam_importer(parent_widget) return steam_dir = Path(schema.get_string("steam-location")).expanduser() diff --git a/src/main.py b/src/main.py index ef37448..05e22f6 100644 --- a/src/main.py +++ b/src/main.py @@ -28,16 +28,16 @@ gi.require_version("Adw", "1") # pylint: disable=wrong-import-position from gi.repository import Adw, Gio, GLib, Gtk -from .bottles_parser import bottles_parser +from .bottles_importer import bottles_importer from .create_details_window import create_details_window from .get_games import get_games -from .heroic_parser import heroic_parser +from .heroic_importer import heroic_importer from .importer import Importer -from .itch_parser import itch_parser -from .lutris_parser import lutris_parser +from .itch_importer import itch_importer +from .lutris_importer import lutris_importer from .preferences import PreferencesWindow from .save_game import save_game -from .steam_parser import steam_parser +from .steam_importer import steam_importer from .window import CartridgesWindow @@ -57,7 +57,9 @@ class CartridgesApplication(Adw.Application): self.create_action("add_game", self.on_add_game_action, ["n"]) self.create_action("import", self.on_import_action, ["i"]) self.create_action( - "remove_game_overview", self.on_remove_game_overview_action, ["Delete"] + "remove_game_details_view", + self.on_remove_game_details_view_action, + ["Delete"], ) self.create_action("remove_game", self.on_remove_game_action) self.create_action("igdb_search", self.on_igdb_search_action) @@ -121,8 +123,10 @@ class CartridgesApplication(Adw.Application): developers=[ "kramo https://kramo.hu", "Paweł Lidwin https://github.com/imLinguin", + "Domenico https://github.com/Domefemia", "Bananaman https://github.com/Bananaman", "Geoffrey Coulaud https://geoffrey-coulaud.fr", + "Rafael Mardojai CM https://mardojai.com", ], designers=["kramo https://kramo.hu"], copyright="© 2022-2023 kramo", @@ -167,7 +171,7 @@ class CartridgesApplication(Adw.Application): if not game_id: game_id = self.win.active_game_id - if self.win.stack.get_visible_child() == self.win.overview: + if self.win.stack.get_visible_child() == self.win.details_view: self.win.on_go_back_action(None, None) self.win.games[game_id].toggle_hidden() self.win.update_games([game_id]) @@ -200,19 +204,19 @@ class CartridgesApplication(Adw.Application): self.win.importer.blocker = True if self.win.schema.get_boolean("steam"): - steam_parser(self.win) + steam_importer(self.win) if self.win.schema.get_boolean("lutris"): - lutris_parser(self.win) + lutris_importer(self.win) if self.win.schema.get_boolean("heroic"): - heroic_parser(self.win) + heroic_importer(self.win) if self.win.schema.get_boolean("bottles"): - bottles_parser(self.win) + bottles_importer(self.win) if self.win.schema.get_boolean("itch"): - itch_parser(self.win) + itch_importer(self.win) self.win.importer.blocker = False @@ -229,7 +233,7 @@ class CartridgesApplication(Adw.Application): save_game(self.win, data) self.win.update_games([game_id]) - if self.win.stack.get_visible_child() == self.win.overview: + if self.win.stack.get_visible_child() == self.win.details_view: self.win.on_go_back_action(None, None) title = self.win.games[game_id].name @@ -241,8 +245,8 @@ class CartridgesApplication(Adw.Application): self.win.toasts[(game_id, "remove")] = toast self.win.toast_overlay.add_toast(toast) - def on_remove_game_overview_action(self, _widget, _callback=None): - if self.win.stack.get_visible_child() == self.win.overview: + def on_remove_game_details_view_action(self, _widget, _callback=None): + if self.win.stack.get_visible_child() == self.win.details_view: self.on_remove_game_action(None) def on_quit_action(self, _widget, _callback=None): diff --git a/src/meson.build b/src/meson.build index 8ee9640..d2f7708 100644 --- a/src/meson.build +++ b/src/meson.build @@ -23,13 +23,13 @@ cartridges_sources = [ 'preferences.py', 'game.py', 'game_cover.py', + 'importers/steam_importer.py', + 'importers/lutris_importer.py', + 'importers/heroic_importer.py', + 'importers/bottles_importer.py', + 'importers/itch_importer.py', 'utils/importer.py', 'utils/steamgriddb.py', - 'utils/steam_parser.py', - 'utils/lutris_parser.py', - 'utils/heroic_parser.py', - 'utils/bottles_parser.py', - 'utils/itch_parser.py', 'utils/get_games.py', 'utils/save_game.py', 'utils/save_cover.py', diff --git a/src/preferences.py b/src/preferences.py index cfe79d7..426deab 100644 --- a/src/preferences.py +++ b/src/preferences.py @@ -19,7 +19,7 @@ import os from pathlib import Path -from shutil import move +from shutil import move, copyfile from gi.repository import Adw, Gio, GLib, Gtk @@ -367,7 +367,7 @@ class PreferencesWindow(Adw.PreferencesWindow): if not cover_path.is_file(): continue - move(cover_path, self.parent_widget.covers_dir) + move(cover_path, self.parent_widget.covers_dir, copyfile) self.parent_widget.update_games(self.removed_games) self.removed_games = [] @@ -386,12 +386,17 @@ class PreferencesWindow(Adw.PreferencesWindow): save_game(self.parent_widget, game) cover_path = self.parent_widget.games[game["game_id"]].get_cover_path() + if not cover_path: + continue if cover_path.is_file(): - move(cover_path, deleted_covers_dir) + move(cover_path, deleted_covers_dir, copyfile) self.parent_widget.update_games(self.parent_widget.games) - if self.parent_widget.stack.get_visible_child() == self.parent_widget.overview: + if ( + self.parent_widget.stack.get_visible_child() + == self.parent_widget.details_view + ): self.parent_widget.on_go_back_action(None, None) self.add_toast(self.toast) diff --git a/src/utils/create_details_window.py b/src/utils/create_details_window.py index 888a866..2e034a2 100644 --- a/src/utils/create_details_window.py +++ b/src/utils/create_details_window.py @@ -317,9 +317,6 @@ def create_details_window(parent_widget, game_id=None): (parent_widget.covers_dir / f"{game_id}.tiff").unlink(missing_ok=True) (parent_widget.covers_dir / f"{game_id}.gif").unlink(missing_ok=True) - if not game_cover.get_pixbuf(): - SGDBSave(parent_widget, {(game_id, values["name"])}) - save_cover( parent_widget, game_id, @@ -337,9 +334,13 @@ def create_details_window(parent_widget, game_id=None): else: save_game(parent_widget, values) - parent_widget.update_games([game_id]) + if game_cover.get_pixbuf(): + parent_widget.update_games([game_id]) + else: + SGDBSave(parent_widget, {(game_id, values["name"])}) + window.close() - parent_widget.show_overview(None, game_id) + parent_widget.show_details_view(None, game_id) def focus_executable(_widget): window.set_focus(executable) diff --git a/src/utils/steamgriddb.py b/src/utils/steamgriddb.py index efea72e..d112a87 100644 --- a/src/utils/steamgriddb.py +++ b/src/utils/steamgriddb.py @@ -35,7 +35,7 @@ class SGDBSave: ) ): if not self.importer: - self.parent_widget.loading = game[0] + self.parent_widget.games[game[0]].set_loading(1) url = "https://www.steamgriddb.com/api/v2/" headers = { @@ -106,8 +106,6 @@ class SGDBSave: self.importer.queue -= 1 self.importer.done() self.importer.sgdb_exception = self.exception - else: - self.parent_widget.loading = None if self.exception: create_dialog( diff --git a/src/window.py b/src/window.py index 0193f8f..55babfe 100644 --- a/src/window.py +++ b/src/window.py @@ -25,7 +25,7 @@ from shutil import rmtree from gi.repository import Adw, Gdk, GdkPixbuf, Gio, GLib, Gtk -from .game import game +from .game import Game from .game_cover import GameCover from .get_games import get_games from .save_game import save_game @@ -38,7 +38,7 @@ class CartridgesWindow(Adw.ApplicationWindow): toast_overlay = Gtk.Template.Child() primary_menu_button = Gtk.Template.Child() stack = Gtk.Template.Child() - overview = Gtk.Template.Child() + details_view = Gtk.Template.Child() library_view = Gtk.Template.Child() library = Gtk.Template.Child() scrolledwindow = Gtk.Template.Child() @@ -49,17 +49,17 @@ class CartridgesWindow(Adw.ApplicationWindow): search_entry = Gtk.Template.Child() search_button = Gtk.Template.Child() - overview_box = Gtk.Template.Child() - overview_cover = Gtk.Template.Child() - overview_spinner = Gtk.Template.Child() - overview_title = Gtk.Template.Child() - overview_header_bar_title = Gtk.Template.Child() - overview_play_button = Gtk.Template.Child() - overview_blurred_cover = Gtk.Template.Child() - overview_developer = Gtk.Template.Child() - overview_added = Gtk.Template.Child() - overview_last_played = Gtk.Template.Child() - overview_hide_button = Gtk.Template.Child() + details_view_box = Gtk.Template.Child() + details_view_cover = Gtk.Template.Child() + details_view_spinner = Gtk.Template.Child() + details_view_title = Gtk.Template.Child() + details_view_header_bar_title = Gtk.Template.Child() + details_view_play_button = Gtk.Template.Child() + details_view_blurred_cover = Gtk.Template.Child() + details_view_developer = Gtk.Template.Child() + details_view_added = Gtk.Template.Child() + details_view_last_played = Gtk.Template.Child() + details_view_hide_button = Gtk.Template.Child() hidden_library = Gtk.Template.Child() hidden_library_view = Gtk.Template.Child() @@ -100,11 +100,10 @@ class CartridgesWindow(Adw.ApplicationWindow): self.previous_page = self.library_view self.toasts = {} self.active_game_id = None - self.loading = None self.scaled_pixbuf = None - self.overview.set_measure_overlay(self.overview_box, True) - self.overview.set_clip_overlay(self.overview_box, False) + self.details_view.set_measure_overlay(self.details_view_box, True) + self.details_view.set_clip_overlay(self.details_view_box, False) self.schema = Gio.Settings.new("hu.kramo.Cartridges") scale_factor = max( @@ -127,7 +126,12 @@ class CartridgesWindow(Adw.ApplicationWindow): self.update_games(get_games(self)) - self.overview_game_cover = GameCover(self.overview_cover) + self.details_view_game_cover = GameCover(self.details_view_cover) + self.placeholder_pixbuf_scaled = ( + self.details_view_game_cover.placeholder_pixbuf.scale_simple( + 2, 3, GdkPixbuf.InterpType.BILINEAR + ) + ) # Connect signals self.search_entry.connect("search-changed", self.search_changed, False) @@ -138,10 +142,10 @@ class CartridgesWindow(Adw.ApplicationWindow): self.add_controller(back_mouse_button) Adw.StyleManager.get_default().connect( - "notify::dark", self.set_overview_opacity + "notify::dark", self.set_details_view_opacity ) Adw.StyleManager.get_default().connect( - "notify::high-contrast", self.set_overview_opacity + "notify::high-contrast", self.set_details_view_opacity ) def update_games(self, games): @@ -159,7 +163,7 @@ class CartridgesWindow(Adw.ApplicationWindow): current_game = current_games[game_id] - entry = game(self, current_game) + entry = Game(self, current_game) self.games[current_game["game_id"]] = entry if entry.removed: @@ -189,8 +193,8 @@ class CartridgesWindow(Adw.ApplicationWindow): else: self.hidden_library_bin.set_child(self.hidden_scrolledwindow) - if self.stack.get_visible_child() == self.overview: - self.show_overview(None, self.active_game_id) + if self.stack.get_visible_child() == self.details_view: + self.show_details_view(None, self.active_game_id) self.library.invalidate_filter() self.hidden_library.invalidate_filter() @@ -262,46 +266,46 @@ class CartridgesWindow(Adw.ApplicationWindow): return GLib.DateTime.new_from_unix_utc(timestamp).format("%A") return GLib.DateTime.new_from_unix_utc(timestamp).format("%x") - def show_overview(self, _widget, game_id): - loading = game_id == self.loading - self.overview_cover.set_visible(not loading) - self.overview_spinner.set_spinning(loading) - + def show_details_view(self, _widget, game_id): current_game = self.games[game_id] + self.details_view_cover.set_visible(not current_game.loading) + self.details_view_spinner.set_spinning(current_game.loading) + if current_game.developer: - self.overview_developer.set_label(current_game.developer) - self.overview_developer.set_visible(True) + self.details_view_developer.set_label(current_game.developer) + self.details_view_developer.set_visible(True) else: - self.overview_developer.set_visible(False) + self.details_view_developer.set_visible(False) if current_game.hidden: - self.overview_hide_button.set_icon_name("view-reveal-symbolic") - self.overview_hide_button.set_tooltip_text(_("Unhide")) + self.details_view_hide_button.set_icon_name("view-reveal-symbolic") + self.details_view_hide_button.set_tooltip_text(_("Unhide")) else: - self.overview_hide_button.set_icon_name("view-conceal-symbolic") - self.overview_hide_button.set_tooltip_text(_("Hide")) + self.details_view_hide_button.set_icon_name("view-conceal-symbolic") + self.details_view_hide_button.set_tooltip_text(_("Hide")) - if self.stack.get_visible_child() != self.overview: + if self.stack.get_visible_child() != self.details_view: self.stack.set_transition_type(Gtk.StackTransitionType.OVER_LEFT) - self.stack.set_visible_child(self.overview) + self.stack.set_visible_child(self.details_view) self.active_game_id = game_id - self.overview_game_cover.new_pixbuf(path=current_game.get_cover_path()) - pixbuf = ( - self.overview_game_cover.get_pixbuf() - or self.overview_game_cover.placeholder_pixbuf + self.details_view_game_cover.new_pixbuf(path=current_game.get_cover_path()) + pixbuf = self.details_view_game_cover.get_pixbuf() + + self.scaled_pixbuf = ( + pixbuf.scale_simple(2, 3, GdkPixbuf.InterpType.BILINEAR) + if pixbuf + else self.placeholder_pixbuf_scaled ) + self.details_view_blurred_cover.set_pixbuf(self.scaled_pixbuf) + self.set_details_view_opacity() - self.scaled_pixbuf = pixbuf.scale_simple(2, 3, GdkPixbuf.InterpType.BILINEAR) - self.overview_blurred_cover.set_pixbuf(self.scaled_pixbuf) - self.set_overview_opacity() - - self.overview_title.set_label(current_game.name) - self.overview_header_bar_title.set_title(current_game.name) + self.details_view_title.set_label(current_game.name) + self.details_view_header_bar_title.set_title(current_game.name) date = self.get_time(current_game.added) - self.overview_added.set_label( + self.details_view_added.set_label( # The variable is the date when the game was added _("Added: {}").format(date) ) @@ -310,20 +314,20 @@ class CartridgesWindow(Adw.ApplicationWindow): if current_game.last_played != 0 else _("Never") ) - self.overview_last_played.set_label( + self.details_view_last_played.set_label( # The variable is the date when the game was last played _("Last played: {}").format(last_played_date) ) - def set_overview_opacity(self, _widget=None, _unused=None): - if self.stack.get_visible_child() == self.overview: + def set_details_view_opacity(self, _widget=None, _unused=None): + if self.stack.get_visible_child() == self.details_view: style_manager = Adw.StyleManager.get_default() if ( style_manager.get_high_contrast() or not style_manager.get_system_supports_color_schemes() ): - self.overview_blurred_cover.set_opacity(0.2) + self.details_view_blurred_cover.set_opacity(0.2) return pixels = self.scaled_pixbuf.get_pixels() @@ -347,11 +351,11 @@ class CartridgesWindow(Adw.ApplicationWindow): luminances.append((alpha * (luminance - 255)) / 255**2 + 1) if dark_theme: - self.overview_blurred_cover.set_opacity( + self.details_view_blurred_cover.set_opacity( 1.3 - (sum(luminances) / len(luminances) + max(luminances)) / 2 ) else: - self.overview_blurred_cover.set_opacity( + self.details_view_blurred_cover.set_opacity( 0.1 + (sum(luminances) / len(luminances) + min(luminances)) / 2 ) @@ -397,11 +401,11 @@ class CartridgesWindow(Adw.ApplicationWindow): def on_go_back_action(self, _widget, _unused, _x=None, _y=None): if self.stack.get_visible_child() == self.hidden_library_view: self.on_show_library_action(None, None) - elif self.stack.get_visible_child() == self.overview: + elif self.stack.get_visible_child() == self.details_view: self.on_go_to_parent_action(None, None) def on_go_to_parent_action(self, _widget, _unused): - if self.stack.get_visible_child() == self.overview: + if self.stack.get_visible_child() == self.details_view: if self.previous_page == self.library_view: self.on_show_library_action(None, None) else: @@ -469,7 +473,7 @@ class CartridgesWindow(Adw.ApplicationWindow): search_entry.set_text("") def on_escape_action(self, _widget, _unused): - if self.stack.get_visible_child() == self.overview: + if self.stack.get_visible_child() == self.details_view: self.on_go_back_action(None, None) return if self.stack.get_visible_child() == self.library_view: @@ -509,5 +513,5 @@ class CartridgesWindow(Adw.ApplicationWindow): self.toasts.pop((game_id, undo)) def on_open_menu_action(self, _widget, _unused): - if self.stack.get_visible_child() != self.overview: + if self.stack.get_visible_child() != self.details_view: self.primary_menu_button.set_active(True)