diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-11 11:18:27 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-11 11:18:27 (GMT) |
commit | f583b08ca882d127f1df75d893cb5884649f21c7 (patch) | |
tree | 42b3a2f56d3a66bff896105a2e254291c74f70d9 /src/jarabe/journal/model.py | |
parent | dca9571f19408b92f83cfca99a1da843e5e04dc8 (diff) |
Add support for text queries on removable devices
Diffstat (limited to 'src/jarabe/journal/model.py')
-rw-r--r-- | src/jarabe/journal/model.py | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py index d0e4766..920fa1f 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 traceback +import re import gobject import dbus @@ -208,6 +209,18 @@ class DatastoreResultSet(BaseResultSet): """Encapsulates the result of a query on the datastore """ def __init__(self, query): + + if query.get('query', '') and not query['query'].startswith('"'): + query_text = '' + words = query['query'].split(' ') + for word in words: + if word: + if query_text: + query_text += ' ' + query_text += word + '*' + + query['query'] = query_text + BaseResultSet.__init__(self, query) def find(self, query): @@ -229,6 +242,19 @@ class InplaceResultSet(BaseResultSet): self._pending_directories = 0 self._stopped = False + query_text = query.get('query', '') + if query_text.startswith('"') and query_text.endswith('"'): + self._regex = re.compile('*%s*' % query_text.strip(['"'])) + elif query_text: + expression = '' + for word in query_text.split(' '): + if expression: + expression += '|' + expression += '.*%s.*' % word + self._regex = re.compile(expression, re.IGNORECASE) + else: + self._regex = None + def setup(self): self._file_list = [] self._recurse_dir(self._mount_point) @@ -278,7 +304,9 @@ class InplaceResultSet(BaseResultSet): gobject.idle_add(lambda s=full_path: self._recurse_dir(s)) elif S_IFMT(stat.st_mode) == S_IFREG: - self._file_list.append((full_path, stat, int(stat.st_mtime))) + if self._regex is None or self._regex.match(full_path): + file_info = (full_path, stat, int(stat.st_mtime)) + self._file_list.append(file_info) self.progress.send(self) except Exception, e: @@ -298,7 +326,8 @@ def _get_file_metadata(path, stat): 'mime_type': gio.content_type_guess(filename=path), 'activity': '', 'activity_id': '', - 'icon-color': client.get_string('/desktop/sugar/user/color')} + 'icon-color': client.get_string('/desktop/sugar/user/color'), + 'description': path} _datastore = None def _get_datastore(): |