Skip to content

Commit ae49b6d

Browse files
only show provider selection listing when all images are loaded
1 parent d192358 commit ae49b6d

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

gradia/ui/provider_selection_window.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,24 @@ class ProviderListPage(Adw.NavigationPage):
3939

4040
PROVIDERS_DATA_URL = f"https://gradia.alexandervanhee.be/upload-providers/{rel_ver}.json"
4141

42-
def __init__(self, preferences_dialog=None,on_provider_selected=None, **kwargs):
42+
def __init__(self, preferences_dialog=None, on_provider_selected=None, **kwargs):
4343
super().__init__(**kwargs)
4444

4545
self.preferences_dialog = preferences_dialog
4646
self.on_provider_selected = on_provider_selected
47-
self.session = Soup.Session()
47+
self.session = None
4848
self.providers_data = None
49+
self.pending_images = 0
50+
self.providers_populated = False
51+
52+
self.view_stack.set_visible_child_name("loading")
53+
GLib.idle_add(self._start_loading)
54+
55+
def _start_loading(self):
56+
if not self.session:
57+
self.session = Soup.Session()
4958
self._load_providers_data()
59+
return False
5060

5161
def _show_error_message(self, message: str):
5262
self.error_status.set_description(message)
@@ -72,15 +82,28 @@ def on_response(session, result, msg):
7282
self.session.send_and_read_async(message, GLib.PRIORITY_DEFAULT, None, on_response, message)
7383

7484
def _populate_providers_list(self):
75-
7685
for provider_id, provider_data in self.providers_data.items():
7786
row = self._create_provider_row(provider_id, provider_data)
7887
self.providers_group.add(row)
7988

8089
custom_row = self._create_custom_provider_row()
8190
self.providers_group.add(custom_row)
8291

83-
self.view_stack.set_visible_child_name("content")
92+
self.providers_populated = True
93+
self._check_if_ready_to_show()
94+
95+
def _check_if_ready_to_show(self):
96+
if self.providers_populated and self.pending_images == 0:
97+
self.view_stack.set_visible_child_name("content")
98+
99+
def _increment_pending_images(self):
100+
self.pending_images += 1
101+
102+
def _decrement_pending_images(self):
103+
self.pending_images -= 1
104+
if self.pending_images < 0:
105+
self.pending_images = 0
106+
self._check_if_ready_to_show()
84107

85108
def _create_provider_row(self, provider_id: str, provider_data: dict) -> Adw.ActionRow:
86109
row = Adw.ActionRow(
@@ -148,6 +171,7 @@ def _load_picture_from_url(self, picture: Gtk.Picture, url: str, size_px: int, f
148171
GLib.idle_add(self._set_fallback_icon, picture, fallback_icon_name)
149172
return
150173

174+
self._increment_pending_images()
151175
message = Soup.Message.new("GET", url)
152176

153177
def on_response(session, result, msg):
@@ -175,6 +199,8 @@ def on_response(session, result, msg):
175199
except Exception as e:
176200
logger.warning(f"Failed to load image from {url}: {e}")
177201
GLib.idle_add(self._set_fallback_icon, picture, fallback_icon_name)
202+
finally:
203+
GLib.idle_add(self._decrement_pending_images)
178204

179205
self.session.send_and_read_async(message, GLib.PRIORITY_DEFAULT, None, on_response, message)
180206

0 commit comments

Comments
 (0)