diff options
author | hut <hut@lavabit.com> | 2010-04-16 22:00:53 +0200 |
---|---|---|
committer | hut <hut@lavabit.com> | 2010-04-16 22:02:18 +0200 |
commit | c82e1c27a1033b3d7cbe3dddcfeed126e2632c5f (patch) | |
tree | 79d4042bd2324366d436ff9be03b0bd129420cbc | |
parent | 70c36ff583d1e114f6553013f9a25c2f1533b585 (diff) | |
download | ranger-c82e1c27a1033b3d7cbe3dddcfeed126e2632c5f.tar.gz |
fsobject: lazy calculation of infostring
-rw-r--r-- | ranger/core/environment.py | 4 | ||||
-rw-r--r-- | ranger/fsobject/directory.py | 8 | ||||
-rw-r--r-- | ranger/fsobject/fsobject.py | 47 |
3 files changed, 34 insertions, 25 deletions
diff --git a/ranger/core/environment.py b/ranger/core/environment.py index e5deda07..49d92502 100644 --- a/ranger/core/environment.py +++ b/ranger/core/environment.py @@ -190,6 +190,10 @@ class Environment(SettingsAware, SignalDispatcher): self.cwd = new_cwd self.cwd.load_content_if_outdated() + if self.cwd.files: + for dir in self.cwd.files: + if dir.is_directory and dir.infostring == 'unknown': + dir.determine_infostring() # build the pathway, a tuple of directory objects which lie # on the path to the current directory. diff --git a/ranger/fsobject/directory.py b/ranger/fsobject/directory.py index 29f0042c..1c8355cd 100644 --- a/ranger/fsobject/directory.py +++ b/ranger/fsobject/directory.py @@ -199,9 +199,13 @@ class Directory(FileSystemObject, Accumulator, SettingsAware): self.scroll_offset = 0 self.filenames = filenames - self.infostring = ' %d' % len(self.filenames) # update the infostring self.files = files + if self == self.fm.env.cwd: + for dir in self.files: + if dir.is_directory and dir.infostring == 'unknown': + dir.determine_infostring() + self._clear_marked_items() for item in self.files: if item.path in marked_paths: @@ -219,8 +223,8 @@ class Directory(FileSystemObject, Accumulator, SettingsAware): else: self.filenames = None self.files = None - self.infostring = BAD_INFO + self.determine_infostring() self.cycle_list = None self.content_loaded = True self.last_update_time = time() diff --git a/ranger/fsobject/fsobject.py b/ranger/fsobject/fsobject.py index 94729b9a..4ebec3bc 100644 --- a/ranger/fsobject/fsobject.py +++ b/ranger/fsobject/fsobject.py @@ -156,6 +156,29 @@ class FileSystemObject(MimeTypeAware, FileManagerAware): """Called by directory.mark_item() and similar functions""" self.marked = bool(boolean) + def determine_infostring(self): + if self.is_device: + self.infostring = 'dev' + elif self.is_fifo: + self.infostring = 'fifo' + elif self.is_socket: + self.infostring = 'sock' + elif self.is_link: + self.infostring = '->' + elif self.is_directory: + try: + self.size = len(os.listdir(self.path)) + self.infostring = " %d" % self.size + self.accessible = True + self.runnable = True + except OSError: + self.size = 0 + self.infostring = BAD_INFO + self.accessible = False + elif self.is_file: + self.size = self.stat.st_size + self.infostring = ' ' + human_readable(self.size) + def load(self): """ reads useful information about the filesystem-object from the @@ -188,40 +211,18 @@ class FileSystemObject(MimeTypeAware, FileManagerAware): if self.accessible and os.access(self.path, os.F_OK): self.exists = True self.accessible = True - if os.path.isdir(self.path): self.type = T_DIRECTORY - try: - self.size = len(os.listdir(self.path)) - self.infostring = ' %d' % self.size - self.runnable = True - except OSError: - self.infostring = BAD_INFO - self.runnable = False - self.accessible = False elif os.path.isfile(self.path): self.type = T_FILE - self.size = self.stat.st_size - self.infostring = ' ' + human_readable(self.stat.st_size) else: self.type = T_UNKNOWN - if self.is_device: - self.infostring = 'dev' - elif self.is_fifo: - self.infostring = 'fifo' - elif self.is_socket: - self.infostring = 'sock' - else: - self.infostring = BAD_INFO else: - if self.is_link: - self.infostring = '->' - else: - self.infostring = None self.type = T_NONEXISTANT self.exists = False self.runnable = False + self.determine_infostring() def get_permission_string(self): if self.permissions is not None: |