diff --git a/data/gtk/window.blp b/data/gtk/window.blp index 29b3493..e73d4a8 100644 --- a/data/gtk/window.blp +++ b/data/gtk/window.blp @@ -70,15 +70,23 @@ template CartridgesWindow : Adw.ApplicationWindow { Adw.Clamp { maximum-size: 200; - Picture overview_cover { - halign: end; - valign: start; - width-request: 200; - height-request: 300; + Overlay { + [overlay] + Spinner overview_spinner { + margin-start: 72; + margin-end: 72; + } - styles [ - "card", - ] + Picture overview_cover { + halign: end; + valign: start; + width-request: 200; + height-request: 300; + + styles [ + "card", + ] + } } } diff --git a/src/utils/create_details_window.py b/src/utils/create_details_window.py index 3481503..3f3eb54 100644 --- a/src/utils/create_details_window.py +++ b/src/utils/create_details_window.py @@ -71,7 +71,7 @@ def create_details_window(parent_widget, game_id=None): cover_button_delete_revealer = Gtk.Revealer( child=cover_button_delete, transition_type=Gtk.RevealerTransitionType.CROSSFADE, - margin_end=42, + margin_end=40, ) if not game_id: diff --git a/src/utils/steamgriddb.py b/src/utils/steamgriddb.py index 27fc76a..c26ad75 100644 --- a/src/utils/steamgriddb.py +++ b/src/utils/steamgriddb.py @@ -38,6 +38,9 @@ class SGDBSave: / f"{game[0]}.tiff" ).is_file() ): + if not self.importer: + self.parent_widget.loading = game[0] + try: search_result = self.sgdb.search_game(game[1]) except requests.exceptions.RequestException: @@ -70,20 +73,24 @@ class SGDBSave: task.return_value(game[0]) def task_done(self, _task, result): - game_id = result.propagate_value()[1] - self.parent_widget.update_games([game_id]) if self.importer: self.importer.queue -= 1 self.importer.done() self.importer.sgdb_exception = self.exception - elif self.exception: - create_dialog( - self.parent_widget, - _("Couldn't Connect to SteamGridDB"), - self.exception, - "open_preferences", - _("Preferences"), - ).connect("response", self.response) + else: + self.parent_widget.loading = None + + if self.exception: + create_dialog( + self.parent_widget, + _("Couldn't Connect to SteamGridDB"), + self.exception, + "open_preferences", + _("Preferences"), + ).connect("response", self.response) + + game_id = result.propagate_value()[1] + self.parent_widget.update_games([game_id]) def response(self, _widget, response): if response == "open_preferences": diff --git a/src/window.py b/src/window.py index dc1c713..832699f 100644 --- a/src/window.py +++ b/src/window.py @@ -48,6 +48,7 @@ class CartridgesWindow(Adw.ApplicationWindow): 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_launch = Gtk.Template.Child() @@ -94,6 +95,7 @@ class CartridgesWindow(Adw.ApplicationWindow): self.toasts = {} self.pixbufs = {} self.active_game_id = None + self.loading = None self.overview.set_measure_overlay(self.overview_box, True) self.overview.set_clip_overlay(self.overview_box, False) @@ -244,6 +246,10 @@ class CartridgesWindow(Adw.ApplicationWindow): 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) + current_game = self.games[game_id] if current_game.developer: