Pre-compile EQL expressions for episode filtering

This commit is contained in:
Thomas Perl 2011-02-01 20:01:35 +01:00
parent ae41616aa0
commit 6924210ab8
2 changed files with 15 additions and 2 deletions

View file

@ -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())

View file

@ -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: