Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey 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)
commit11af549cf09ea96c283c8503b0a38ed7b321596e (patch)
tree1fc68ab93df9e4aa7f9b3748b1cb6191f20ee727
parentb0113bf67c31dbeaa08cf0f1710c1be8d02a9b25 (diff)
Progress bar for reading volumes nevers stops if can't read all volume entries #1412
-rw-r--r--src/jarabe/journal/model.py28
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,