diff frontends/src/quick_frontend/quick_app.py @ 1939:e68483c5a999

quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
author Goffi <goffi@goffi.org>
date Mon, 18 Apr 2016 18:33:55 +0200
parents 011eff37e21d
children 633b5c21aefd
line wrap: on
line diff
--- a/frontends/src/quick_frontend/quick_app.py	Mon Apr 18 18:31:13 2016 +0200
+++ b/frontends/src/quick_frontend/quick_app.py	Mon Apr 18 18:33:55 2016 +0200
@@ -215,6 +215,7 @@
         self.menus = quick_menus.QuickMenusManager(self)
         ProfileManager.host = self
         self.profiles = ProfilesManager()
+        self._plugs_in_progress = set() # profiles currently being plugged, used to (un)lock contact list updates
         self.ready_profiles = set() # profiles which are connected and ready
         self.signals_cache = {} # used to keep signal received between start of plug_profile and when the profile is actualy ready
         self.contact_lists = quick_contact_list.QuickContactListHandler(self)
@@ -401,6 +402,7 @@
 
         @param profile(unicode): %(doc_profile)s
         """
+        self._plugs_in_progress.remove(profile)
         self.ready_profiles.add(profile)
 
         # profile is ready, we can call send signals that where is cache
@@ -410,6 +412,8 @@
             handler(*args, **kwargs)
 
         self.callListeners('profilePlugged', profile=profile)
+        if not self._plugs_in_progress:
+            self.contact_lists.lockUpdate(False)
 
     def asyncConnect(self, profile, callback=None, errback=None):
         if not callback:
@@ -428,6 +432,8 @@
 
         @param profiles: list of valid profile names
         """
+        self.contact_lists.lockUpdate()
+        self._plugs_in_progress.update(profiles)
         self.plugging_profiles()
         for profile in profiles:
             self.profiles.plug(profile)