From ba306490c248fada6bc7858ae4660b9aca9bcfcd Mon Sep 17 00:00:00 2001 Message-Id: In-Reply-To: References: From: =?UTF-8?q?Andr=C3=A9s=20Ambrois?= Date: Sun, 23 May 2010 04:23:12 -0300 Subject: [PATCH v2 08/10] Implement sorting for removable devices. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Andrés Ambrois --- src/jarabe/journal/model.py | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py index 874d7bd..4fd81ac 100644 --- a/src/jarabe/journal/model.py +++ b/src/jarabe/journal/model.py @@ -21,6 +21,7 @@ import time import shutil from stat import S_IFMT, S_IFDIR, S_IFREG import re +from operator import itemgetter import gobject import dbus @@ -246,6 +247,8 @@ class InplaceResultSet(BaseResultSet): self._mime_types = query.get('mime_type', []) + self._sort = query.get('order_by', ['+timestamp'])[0] + def setup(self): self._file_list = [] self._recurse_dir(self._mount_point) @@ -254,7 +257,13 @@ class InplaceResultSet(BaseResultSet): self._stopped = True def setup_ready(self): - self._file_list.sort(lambda a, b: cmp(b[2], a[2])) + if self._sort[1:] == 'filesize': + keygetter = itemgetter(3) + else: + keygetter = itemgetter(2) # timestamp + self._file_list.sort(lambda a, b: cmp(b, a), + key=keygetter, + reverse=self._sort[0]=='-') self.ready.send(self) def find(self, query): @@ -273,7 +282,7 @@ class InplaceResultSet(BaseResultSet): files = self._file_list[offset:offset + limit] entries = [] - for file_path, stat, mtime_ in files: + for file_path, stat, mtime_, size_ in files: metadata = _get_file_metadata(file_path, stat) metadata['mountpoint'] = self._mount_point entries.append(metadata) @@ -331,7 +340,7 @@ class InplaceResultSet(BaseResultSet): add_to_list = False if add_to_list: - file_info = (full_path, stat, int(stat.st_mtime)) + file_info = (full_path, stat, int(stat.st_mtime), stat.st_size) self._file_list.append(file_info) self.progress.send(self) @@ -344,6 +353,7 @@ def _get_file_metadata(path, stat): return {'uid': path, 'title': os.path.basename(path), 'timestamp': stat.st_mtime, + 'filesize': stat.st_size, 'mime_type': gio.content_type_guess(filename=path), 'activity': '', 'activity_id': '', -- 1.7.0.4