Get searches working at python level

This commit is contained in:
Kovid Goyal 2020-01-20 22:20:44 +05:30
parent 61a90e70e7
commit 2650949d26
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -60,7 +60,7 @@ class SearchResult(object):
def __init__(self, search_query, before, text, after, name, spine_idx, index): def __init__(self, search_query, before, text, after, name, spine_idx, index):
self.search_query = search_query self.search_query = search_query
self.before, self.text, self.after = before, text, after self.before, self.text, self.after = before, text, after
self.spine_idx, self.index = self.spine_idx, index self.spine_idx, self.index = spine_idx, index
self.file_name = name self.file_name = name
@ -72,7 +72,7 @@ def searchable_text_for_name(name):
for child in serialized_data['tree']['c']: for child in serialized_data['tree']['c']:
if child.get('n') == 'body': if child.get('n') == 'body':
stack.append(child) stack.append(child)
ignore_text = {'script':True, 'style':True, 'title':True} ignore_text = {'script', 'style', 'title'}
while stack: while stack:
node = stack.pop() node = stack.pop()
if isinstance(node, unicode_type): if isinstance(node, unicode_type):
@ -83,7 +83,7 @@ def searchable_text_for_name(name):
text = g('x') text = g('x')
tail = g('l') tail = g('l')
children = g('c') children = g('c')
if name and not ignore_text[name] and text: if name and text and name not in ignore_text:
ans.append(text) ans.append(text)
if tail: if tail:
stack.append(tail) stack.append(tail)
@ -165,22 +165,24 @@ class SearchInput(QWidget):
h.addWidget(cs) h.addWidget(cs)
def history_saved(self, new_text, history): def history_saved(self, new_text, history):
sss = vprefs.get('saved-search-settings') or {} if new_text:
sss[new_text] = {'case_sensitive': self.case_sensitive.isChecked(), 'mode': self.query_type.currentData()} sss = vprefs.get('saved-search-settings') or {}
history = frozenset(history) sss[new_text] = {'case_sensitive': self.case_sensitive.isChecked(), 'mode': self.query_type.currentData()}
sss = {k: v for k, v in iteritems(sss) if k in history} history = frozenset(history)
vprefs['saved-search-settings'] = sss sss = {k: v for k, v in iteritems(sss) if k in history}
vprefs['saved-search-settings'] = sss
def saved_search_selected(self): def saved_search_selected(self):
text = self.search_box.currentText().strip() text = self.search_box.currentText().strip()
s = (vprefs.get('saved-search-settings') or {}).get(text) if text:
if s: s = (vprefs.get('saved-search-settings') or {}).get(text)
if 'case_sensitive' in s: if s:
self.case_sensitive.setChecked(s['case_sensitive']) if 'case_sensitive' in s:
if 'mode' in s: self.case_sensitive.setChecked(s['case_sensitive'])
idx = self.query_type.findData(s['mode']) if 'mode' in s:
if idx > -1: idx = self.query_type.findData(s['mode'])
self.query_type.setCurrentIndex(idx) if idx > -1:
self.query_type.setCurrentIndex(idx)
def search_query(self, backwards=False): def search_query(self, backwards=False):
text = self.search_box.currentText().strip() text = self.search_box.currentText().strip()
@ -214,6 +216,7 @@ class Results(QListWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
QListWidget.__init__(self, parent) QListWidget.__init__(self, parent)
self.setFocusPolicy(Qt.NoFocus)
class SearchPanel(QWidget): class SearchPanel(QWidget):
@ -232,9 +235,7 @@ class SearchPanel(QWidget):
si.do_search.connect(self.search_requested) si.do_search.connect(self.search_requested)
l.addWidget(si) l.addWidget(si)
self.results = r = Results(self) self.results = r = Results(self)
l.addWidget(r) l.addWidget(r, 100)
l.addStretch(10)
def focus_input(self): def focus_input(self):
self.search_input.focus_input() self.search_input.focus_input()
@ -263,6 +264,8 @@ class SearchPanel(QWidget):
idx_map = {name: i for i, name in enumerate(spine)} idx_map = {name: i for i, name in enumerate(spine)}
spine_idx = idx_map.get(current_name, -1) spine_idx = idx_map.get(current_name, -1)
except Exception: except Exception:
import traceback
traceback.print_exc()
spine_idx = -1 spine_idx = -1
if spine_idx < 0: if spine_idx < 0:
self.results_found.emit(SearchFinished(search_query)) self.results_found.emit(SearchFinished(search_query))
@ -277,7 +280,8 @@ class SearchPanel(QWidget):
counter[text] += 1 counter[text] += 1
self.results_found.emit(SearchResult(search_query, before, text, after, name, spine_idx, counter[text])) self.results_found.emit(SearchResult(search_query, before, text, after, name, spine_idx, counter[text]))
except Exception: except Exception:
pass import traceback
traceback.print_exc()
self.results_found.emit(SearchFinished(search_query)) self.results_found.emit(SearchFinished(search_query))
def on_result_found(self, result): def on_result_found(self, result):