@@ -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