Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-06-29 15:35:26 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-06-29 15:35:26 (GMT)
commit987b48bb194acf301a968823ccbc079d3f734997 (patch)
treeed253cce0fe4ed7e9ab9093317456f5715aec45a
parent9b9637dfc042fd0afeea57dfa5e5f1367b55cff0 (diff)
Implement sorting by timestamp and title
-rw-r--r--src/carquinyol/datastore.py5
-rw-r--r--src/carquinyol/indexstore.py25
2 files changed, 25 insertions, 5 deletions
diff --git a/src/carquinyol/datastore.py b/src/carquinyol/datastore.py
index 343f9ba..369eff7 100644
--- a/src/carquinyol/datastore.py
+++ b/src/carquinyol/datastore.py
@@ -56,7 +56,10 @@ class DataStore(dbus.service.Object):
layout_manager = layoutmanager.get_instance()
if layout_manager.get_version() == 0:
migration.migrate_from_0()
- layout_manager.set_version(1)
+ layout_manager.set_version(2)
+ layout_manager.index_updated = False
+ elif layout_manager.get_version() == 1:
+ layout_manager.set_version(2)
layout_manager.index_updated = False
self._metadata_store = MetadataStore()
diff --git a/src/carquinyol/indexstore.py b/src/carquinyol/indexstore.py
index 62aebb4..e4f2263 100644
--- a/src/carquinyol/indexstore.py
+++ b/src/carquinyol/indexstore.py
@@ -26,6 +26,7 @@ from carquinyol.layoutmanager import MAX_QUERY_LIMIT
_VALUE_UID = 0
_VALUE_TIMESTAMP = 1
+_VALUE_TITLE = 2
_PREFIX_UID = 'Q'
_PREFIX_ACTIVITY = 'A'
@@ -85,6 +86,7 @@ class IndexStore(object):
document.add_value(_VALUE_UID, uid)
document.add_value(_VALUE_TIMESTAMP, str(properties['timestamp']))
+ document.add_value(_VALUE_TITLE, properties.get('title', '').trim())
term_generator = xapian.TermGenerator()
@@ -123,16 +125,31 @@ class IndexStore(object):
return text
def find(self, query):
+ offset = query.pop('offset', 0)
+ limit = query.pop('limit', MAX_QUERY_LIMIT)
+ order_by = query.pop('order_by', [])
+
enquire = Enquire(self._database)
enquire.set_query(self._parse_query(query))
- offset = query.get('offset', 0)
- limit = query.get('limit', MAX_QUERY_LIMIT)
-
# This will assure that the results count is exact.
check_at_least = offset + limit + 1
- enquire.set_sort_by_value(_VALUE_TIMESTAMP, True)
+ if not order_by:
+ order_by = '+timestamp'
+ else:
+ order_by = order_by[0]
+
+ if order_by == '+timestamp':
+ enquire.set_sort_by_value(_VALUE_TIMESTAMP, True)
+ elif order_by == '-timestamp':
+ enquire.set_sort_by_value(_VALUE_TIMESTAMP, False)
+ elif order_by == '+title':
+ enquire.set_sort_by_value(_VALUE_TITLE, True)
+ elif order_by == '-title':
+ enquire.set_sort_by_value(_VALUE_TITLE, False)
+ else:
+ logging.warning('Unsupported property for sorting: %s' % order_by)
query_result = enquire.get_mset(offset, limit, check_at_least)
total_count = query_result.get_matches_estimated()