diff options
author | Aleksey Lim <alsroot@member.fsf.org> | 2009-09-23 11:00:33 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@member.fsf.org> | 2009-09-23 11:00:33 (GMT) |
commit | 11af549cf09ea96c283c8503b0a38ed7b321596e (patch) | |
tree | 1fc68ab93df9e4aa7f9b3748b1cb6191f20ee727 | |
parent | b0113bf67c31dbeaa08cf0f1710c1be8d02a9b25 (diff) |
Progress bar for reading volumes nevers stops if can't read all volume entries #1412
-rw-r--r-- | src/jarabe/journal/model.py | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py index 24acb95..5deff6a 100644 --- a/src/jarabe/journal/model.py +++ b/src/jarabe/journal/model.py @@ -293,18 +293,35 @@ class InplaceResultSet(BaseResultSet): return entries, total_count def _recurse_dir(self, dir_path): + self._pending_directories += 1 + gobject.idle_add(self._idle_recurse_dir, dir_path) + + def _idle_recurse_dir(self, dir_path): + try: + self._real_recurse_dir(dir_path) + finally: + self._pending_directories -= 1 + if self._pending_directories == 0: + self.setup_ready() + + def _real_recurse_dir(self, dir_path): if self._stopped: return - for entry in os.listdir(dir_path): + try: + dirs = os.listdir(dir_path) + except Exception: + logging.exception('Error reading directory %r', dir_path) + dirs = [] + + for entry in dirs: if entry.startswith('.'): continue full_path = dir_path + '/' + entry try: stat = os.stat(full_path) if S_IFMT(stat.st_mode) == S_IFDIR: - self._pending_directories += 1 - gobject.idle_add(lambda s=full_path: self._recurse_dir(s)) + self._recurse_dir(full_path) elif S_IFMT(stat.st_mode) == S_IFREG: add_to_list = True @@ -332,11 +349,6 @@ class InplaceResultSet(BaseResultSet): except Exception: logging.exception('Error reading file %r', full_path) - if self._pending_directories == 0: - self.setup_ready() - else: - self._pending_directories -= 1 - def _get_file_metadata(path, stat): client = gconf.client_get_default() return {'uid': path, |