@@ -244,9 +244,9 @@ def installer_progress(self, pkginfo, progress, estimating, status_text=None):
244244 self .spinner .show ()
245245
246246class SaneProgressBar (Gtk .DrawingArea ):
247- def __init__ (self ):
248- super (Gtk .DrawingArea , self ).__init__ (width_request = - 1 ,
249- height_request = 8 ,
247+ def __init__ (self , width = - 1 , height = 8 ):
248+ super (Gtk .DrawingArea , self ).__init__ (width_request = width ,
249+ height_request = height ,
250250 margin_top = 1 , #??? to align better with the stars and count
251251 hexpand = True ,
252252 valign = Gtk .Align .CENTER ,
@@ -692,7 +692,7 @@ def do_activate(self):
692692
693693 def _init_installer_thread (self ):
694694 if self .installer .init_sync ():
695- GLib . idle_add ( self .on_installer_ready )
695+ self .on_installer_ready ( )
696696 else :
697697 self .page_stack .set_visible_child_name (self .PAGE_GENERATING_CACHE )
698698 self .installer .init (self .on_installer_ready )
@@ -860,6 +860,12 @@ def create_window(self, starting_page):
860860 self .progress_box .pack_start (self .progress_label , False , False , 0 )
861861 self .progress_label .show ()
862862
863+ # self.progress_bar = self.builder.get_object('search_progress_bar')
864+ box_searching = self .builder .get_object ('search_progress_bar' )
865+ self .progress_bar = SaneProgressBar (- 1 , 12 )
866+ box_searching .pack_start (self .progress_bar , True , True , 0 )
867+ self .progress_bar .show ()
868+
863869 box_reviews = self .builder .get_object ("box_reviews" )
864870
865871 def list_header_func (row , before , user_data = None ):
@@ -1060,7 +1066,10 @@ def on_appstream_changed(self, installer):
10601066
10611067
10621068 def on_installer_ready (self ):
1063- self .page_stack .set_visible_child_name (self .PAGE_LOADING )
1069+ def set_loading_page ():
1070+ self .page_stack .set_visible_child_name (self .PAGE_LOADING )
1071+ GLib .idle_add (set_loading_page )
1072+
10641073 try :
10651074 self .process_matching_packages ()
10661075
@@ -2406,11 +2415,15 @@ def show_search_results(self, terms):
24062415 hidden_packages = set ()
24072416 allow_unverified_flatpaks = self .settings .get_boolean (prefs .ALLOW_UNVERIFIED_FLATPAKS )
24082417
2409- def idle_search_one_package (pkginfos ):
2418+ list_size = len (listing )
2419+ self .search_progress = 0
2420+
2421+ def idle_search_one_package (pkginfos , list_size ):
24102422 try :
24112423 pkginfo = next (pkginfos )
24122424 except StopIteration :
24132425 self .search_idle_timer = 0
2426+ self .search_progress = 0
24142427
24152428 if package_type_preference == prefs .PACKAGE_TYPE_PREFERENCE_APT :
24162429 results = [p for p in searched_packages if not (p .pkg_hash .startswith ("f" ) and p .name in hidden_packages )]
@@ -2421,6 +2434,12 @@ def idle_search_one_package(pkginfos):
24212434
24222435 GLib .idle_add (self .on_search_results_complete , results )
24232436 return False
2437+ except RuntimeError : # dictionary changed size during iteration
2438+ self .search_idle_timer = 0
2439+ self .search_progress = 0
2440+
2441+ self .go_back_action ()
2442+ return False
24242443
24252444 flatpak = pkginfo .pkg_hash .startswith ("f" )
24262445 is_match = False
@@ -2468,9 +2487,21 @@ def idle_search_one_package(pkginfos):
24682487 elif package_type_preference == prefs .PACKAGE_TYPE_PREFERENCE_FLATPAK and flatpak :
24692488 hidden_packages .add (DEB_EQUIVS .get (pkginfo .name ))
24702489
2490+ self .search_progress = self .search_progress + 1
2491+ self .update_progress (self .search_progress / list_size )
2492+
24712493 return True
24722494
2473- self .search_idle_timer = GLib .idle_add (idle_search_one_package , iter (listing ))
2495+ self .search_idle_timer = GLib .idle_add (idle_search_one_package , iter (listing ), list_size )
2496+
2497+ def update_progress (self , progress ):
2498+ progress = max (0.0 , min (1.0 , progress ))
2499+
2500+ def update_progress_ui ():
2501+ self .progress_bar .set_fraction (progress )
2502+ return False
2503+
2504+ GLib .idle_add (update_progress_ui )
24742505
24752506 def on_search_results_complete (self , results ):
24762507 self .page_stack .set_visible_child_name (self .PAGE_LIST )
0 commit comments