Pre-compile EQL expressions for episode filtering
This commit is contained in:
parent
ae41616aa0
commit
6924210ab8
2 changed files with 15 additions and 2 deletions
|
@ -71,6 +71,7 @@ class EpisodeListModel(gtk.ListStore):
|
|||
self._sorter = gtk.TreeModelSort(self._filter)
|
||||
self._view_mode = self.VIEW_ALL
|
||||
self._search_term = None
|
||||
self._search_term_eql = None
|
||||
self._filter.set_visible_func(self._filter_visible_func)
|
||||
|
||||
# Are we currently showing the "all episodes" view?
|
||||
|
@ -114,8 +115,7 @@ class EpisodeListModel(gtk.ListStore):
|
|||
return False
|
||||
|
||||
try:
|
||||
q = query.UserEQL(self._search_term)
|
||||
return q.match(episode)
|
||||
return self._search_term_eql.match(episode)
|
||||
except Exception, e:
|
||||
return True
|
||||
|
||||
|
@ -164,6 +164,7 @@ class EpisodeListModel(gtk.ListStore):
|
|||
def set_search_term(self, new_term):
|
||||
if self._search_term != new_term:
|
||||
self._search_term = new_term
|
||||
self._search_term_eql = query.UserEQL(new_term)
|
||||
self._filter.refilter()
|
||||
self._on_filter_changed(self.has_episodes())
|
||||
|
||||
|
|
|
@ -130,7 +130,19 @@ class EQL(object):
|
|||
a, query, b = match.groups()
|
||||
self._query = query.lower()
|
||||
|
||||
# For everything else, compile the expression
|
||||
if not self._regex and not self._string:
|
||||
try:
|
||||
self._query = compile(query, '<eql-string>', 'eval')
|
||||
except Exception, e:
|
||||
print e
|
||||
self._query = None
|
||||
|
||||
|
||||
def match(self, episode):
|
||||
if self._query is None:
|
||||
return False
|
||||
|
||||
if self._regex:
|
||||
return re.search(self._query, episode.title, self._flags) is not None
|
||||
elif self._string:
|
||||
|
|
Loading…
Reference in a new issue