usable. Needs new svg icon

This commit is contained in:
Jean-Francois Dockes 2012-03-22 13:54:14 +01:00
parent 721653634b
commit 7ee3039f7a
2 changed files with 67 additions and 33 deletions

View File

@ -55,9 +55,9 @@ def create_lens ():
# Populate categories TODO FIX THIS # Populate categories TODO FIX THIS
cats = [] cats = []
cats.append (Unity.Category.new ("Applications", cats.append (Unity.Category.new ("Documents",
Gio.ThemedIcon.new("keyboard"), Gio.ThemedIcon.new("document"),
Unity.CategoryRenderer.VERTICAL_TILE)) Unity.CategoryRenderer.HORIZONTAL_TILE))
lens.props.categories = cats lens.props.categories = cats
# Populate filters # Populate filters

View File

@ -8,6 +8,11 @@ import recoll
# These category ids must match the order in which we add them to the lens # These category ids must match the order in which we add them to the lens
CATEGORY_ALL = 0 CATEGORY_ALL = 0
# typing timeout: we don't want to start a search for every
# char. Unity does batch on its side, but we may want more control ?
# Or not ? Set to 0 to not use it.
TYPING_TIMEOUT = 0
class Scope (Unity.Scope): class Scope (Unity.Scope):
def __init__ (self): def __init__ (self):
@ -16,13 +21,14 @@ class Scope (Unity.Scope):
# Listen for changes and requests # Listen for changes and requests
self.connect ("notify::active-search", self._on_search_changed) self.connect ("notify::active-search", self._on_search_changed)
self.connect ("notify::active-global-search", self._on_global_search_changed) self.connect ("notify::active-global-search", self._on_global_search_changed)
self.connect ("activate-uri", self.activate_uri)
# Bliss loaded the apps_tree menu here, let's connect to # Bliss loaded the apps_tree menu here, let's connect to
# the index # the index
self.db = recoll.connect() self.db = recoll.connect()
self.db.setAbstractParams(maxchars=200,
contextwords=4)
self._current_browse_node = None self.timeout_id = None
def get_search_string (self): def get_search_string (self):
search = self.props.active_search search = self.props.active_search
@ -42,20 +48,7 @@ class Scope (Unity.Scope):
if search: if search:
search.emit("finished") search.emit("finished")
def activate_uri (self, scope, uri):
"""Activation handler to enable browsing of app directories"""
print "Activate: %s" % uri
# Defer all activations to Unity
# Reset browsing state when an app is launched
self.reset ()
return Unity.ActivationResponse.new (Unity.HandledType.NOT_HANDLED,
uri)
def reset (self): def reset (self):
self._current_browse_node = None
self._do_browse (self.props.results_model) self._do_browse (self.props.results_model)
self._do_browse (self.props.global_results_model) self._do_browse (self.props.global_results_model)
@ -63,19 +56,17 @@ class Scope (Unity.Scope):
search = self.get_search_string() search = self.get_search_string()
results = scope.props.results_model results = scope.props.results_model
print "Search changed to: '%s'" % search # print "Search changed to: '%s'" % search
self._update_results_model (search, results) self._update_results_model (search, results)
self.search_finished()
def _on_global_search_changed (self, scope, param_spec): def _on_global_search_changed (self, scope, param_spec):
search = self.get_global_search_string() search = self.get_global_search_string()
results = scope.props.global_results_model results = scope.props.global_results_model
print "Global search changed to: '%s'" % search # print "Global search changed to: '%s'" % search
self._update_results_model (search, results) self._update_results_model (search, results)
self.global_search_finished()
def _update_results_model (self, search_string, model): def _update_results_model (self, search_string, model):
if search_string: if search_string:
@ -84,30 +75,73 @@ class Scope (Unity.Scope):
self._do_browse (model) self._do_browse (model)
def _do_browse (self, model): def _do_browse (self, model):
if self.timeout_id is not None:
GObject.source_remove(self.timeout_id)
model.clear () model.clear ()
self.search_finished()
if model is self.props.results_model:
self.search_finished()
else:
self.global_search_finished()
def _on_timeout(self, search_string, model):
if self.timeout_id is not None:
GObject.source_remove(self.timeout_id)
self.timeout_id = None
self._really_do_search(search_string, model)
if model is self.props.results_model:
self.search_finished()
else:
self.global_search_finished()
def _do_search (self, search_string, model): def _do_search (self, search_string, model):
model.clear () if TYPING_TIMEOUT == 0:
self._really_do_search(search_string, model)
# Reset browsing mode return True
self._current_browse_node = None
if self.timeout_id is not None:
GObject.source_remove(self.timeout_id)
self.timeout_id = \
GObject.timeout_add(TYPING_TIMEOUT, self._on_timeout,
search_string, model)
def _really_do_search(self, search_string, model):
# print "really_do_search:", search_string
model.clear ()
if search_string == "":
return True
# Do the recoll thing # Do the recoll thing
query = self.db.query() query = self.db.query()
nres = query.execute(search_string) nres = query.execute(search_string)
if nres > 20: actual_results = 0
nres = 20
while query.next >= 0 and query.next < nres: while query.next >= 0 and query.next < nres:
doc = query.fetchone() doc = query.fetchone()
# No sense in returning unusable results (until
# I get an idea of what to do with them)
if doc.ipath != "":
continue
titleorfilename = doc.title titleorfilename = doc.title
if titleorfilename == "": if titleorfilename == "":
titleorfilename = doc.filename titleorfilename = doc.filename
icon = Gio.content_type_get_icon(doc.mimetype)
if icon:
iconname = icon.get_names()[0]
abstract = self.db.makeDocAbstract(doc, query).encode('utf-8')
model.append (doc.url, model.append (doc.url,
"", iconname,
CATEGORY_ALL, CATEGORY_ALL,
doc.mimetype, doc.mimetype,
titleorfilename, titleorfilename,
titleorfilename, abstract,
doc.url) doc.url)
actual_results += 1
if actual_results >= 20:
break