mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-01 06:01:04 +00:00
Move search matching logic into the SearchOperation object
This commit is contained in:
parent
a9fd7fe84c
commit
d4dcc1be13
1 changed files with 22 additions and 9 deletions
|
@ -35,6 +35,21 @@ class SearchOperation (object):
|
||||||
self.search_forward = search_forward
|
self.search_forward = search_forward
|
||||||
self.start_position = start_position
|
self.start_position = start_position
|
||||||
|
|
||||||
|
col_id = GUI.LogModelBase.COL_MESSAGE
|
||||||
|
len_search_string = len (search_string)
|
||||||
|
|
||||||
|
def match_func (model_row):
|
||||||
|
|
||||||
|
message = model_row[col_id]
|
||||||
|
if search_string in message:
|
||||||
|
# TODO: Return all match ranges here.
|
||||||
|
pos = message.find (search_string)
|
||||||
|
return ((pos, pos + len_search_string,),)
|
||||||
|
else:
|
||||||
|
return ()
|
||||||
|
|
||||||
|
self.match_func = match_func
|
||||||
|
|
||||||
class SearchSentinel (object):
|
class SearchSentinel (object):
|
||||||
|
|
||||||
def __init__ (self):
|
def __init__ (self):
|
||||||
|
@ -63,9 +78,7 @@ class SearchSentinel (object):
|
||||||
# FIXME:
|
# FIXME:
|
||||||
raise NotImplementedError ("backward search not supported yet")
|
raise NotImplementedError ("backward search not supported yet")
|
||||||
|
|
||||||
search_string = operation.search_string
|
match_func = operation.match_func
|
||||||
col_id = model.COL_MESSAGE
|
|
||||||
model_get = model.get_value
|
|
||||||
iter_next = model.iter_next
|
iter_next = model.iter_next
|
||||||
|
|
||||||
YIELD_LIMIT = 1000
|
YIELD_LIMIT = 1000
|
||||||
|
@ -76,8 +89,8 @@ class SearchSentinel (object):
|
||||||
if i == 0:
|
if i == 0:
|
||||||
yield True
|
yield True
|
||||||
i = YIELD_LIMIT
|
i = YIELD_LIMIT
|
||||||
msg = model_get (tree_iter, col_id)
|
row = model[tree_iter]
|
||||||
if search_string in msg:
|
if match_func (row):
|
||||||
self.handle_match_found (model, tree_iter)
|
self.handle_match_found (model, tree_iter)
|
||||||
tree_iter = iter_next (tree_iter)
|
tree_iter = iter_next (tree_iter)
|
||||||
|
|
||||||
|
@ -289,7 +302,7 @@ class FindBarFeature (FeatureBase):
|
||||||
|
|
||||||
model = self.log_view.props.model
|
model = self.log_view.props.model
|
||||||
column = self.window.column_manager.find_item (name = "message")
|
column = self.window.column_manager.find_item (name = "message")
|
||||||
search = self.operation.search_string
|
match_func = self.operation.match_func
|
||||||
|
|
||||||
start_path, end_path = self.log_view.get_visible_range ()
|
start_path, end_path = self.log_view.get_visible_range ()
|
||||||
start_index, end_index = start_path[0], end_path[0]
|
start_index, end_index = start_path[0], end_path[0]
|
||||||
|
@ -297,9 +310,9 @@ class FindBarFeature (FeatureBase):
|
||||||
for line_index in new_matches:
|
for line_index in new_matches:
|
||||||
path = (line_index,)
|
path = (line_index,)
|
||||||
tree_iter = model.get_iter (path)
|
tree_iter = model.get_iter (path)
|
||||||
message = model.get_value (tree_iter, model.COL_MESSAGE)
|
row = model[tree_iter]
|
||||||
pos = message.find (search)
|
ranges = match_func (row)
|
||||||
column.highlight[line_index] = (pos, pos + len (search),)
|
column.highlight[line_index] = ranges[0]
|
||||||
if line_index >= start_index and line_index <= end_index:
|
if line_index >= start_index and line_index <= end_index:
|
||||||
model.row_changed (path, tree_iter)
|
model.row_changed (path, tree_iter)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue