Clear completion cache when file is edited

(uses a debounce timer for performance)
This commit is contained in:
Kovid Goyal 2014-12-28 12:25:38 +05:30
parent c9081f49c7
commit da1f5e5448
4 changed files with 20 additions and 3 deletions

View File

@ -676,6 +676,9 @@ class Boss(QObject):
self.gui.action_save.setEnabled(True) self.gui.action_save.setEnabled(True)
def request_completion(self, name, completion_type, completion_data, query=None): def request_completion(self, name, completion_type, completion_data, query=None):
if completion_type is None:
completion_worker().clear_caches(completion_data)
return
request_id = (self.completion_request_count, name) request_id = (self.completion_request_count, name)
self.completion_request_count += 1 self.completion_request_count += 1
completion_worker().queue_completion(request_id, completion_type, completion_data, query) completion_worker().queue_completion(request_id, completion_type, completion_data, query)

View File

@ -22,12 +22,19 @@ from calibre.utils.matcher import Matcher
Request = namedtuple('Request', 'id type data query') Request = namedtuple('Request', 'id type data query')
names_cache = {} names_cache = {}
file_cache = {}
@control @control
def clear_caches(cache_type, data_conn): def clear_caches(cache_type, data_conn):
global names_cache global names_cache, file_cache
if cache_type is None or cache_type == 'names': if cache_type is None:
names_cache.clear() names_cache.clear()
file_cache.clear()
return
if cache_type == 'names':
names_cache.clear()
elif cache_type.startswith('file:'):
file_cache.pop(cache_type.partition(':')[2], None)
@data @data
def names_data(request_data): def names_data(request_data):

View File

@ -642,7 +642,7 @@ class Smarts(NullSmarts):
if m is None: if m is None:
return return
attr = m.group(1).lower().split(':')[-1] attr = m.group(1).lower().split(':')[-1]
doc_name = editor.highlighter.doc_name doc_name = editor.completion_doc_name
if doc_name and attr in {'href', 'src'}: if doc_name and attr in {'href', 'src'}:
# A link # A link
query = m.group(2) or m.group(3) or '' query = m.group(2) or m.group(3) or ''

View File

@ -141,6 +141,9 @@ class TextEdit(PlainTextEdit):
PlainTextEdit.__init__(self, parent) PlainTextEdit.__init__(self, parent)
self.completion_popup = CompletionPopup(self) self.completion_popup = CompletionPopup(self)
self.request_completion = self.completion_doc_name = None self.request_completion = self.completion_doc_name = None
self.clear_completion_cache_timer = t = QTimer(self)
t.setInterval(5000), t.timeout.connect(self.clear_completion_cache), t.setSingleShot(True)
self.textChanged.connect(t.start)
self.last_completion_request = -1 self.last_completion_request = -1
self.gutter_width = 0 self.gutter_width = 0
self.tw = 2 self.tw = 2
@ -803,6 +806,10 @@ class TextEdit(PlainTextEdit):
if result.request_id[0] >= self.last_completion_request: if result.request_id[0] >= self.last_completion_request:
self.completion_popup.handle_result(result) self.completion_popup.handle_result(result)
def clear_completion_cache(self):
if self.request_completion is not None and self.completion_doc_name:
self.request_completion(None, 'file:' + self.completion_doc_name)
def replace_possible_unicode_sequence(self): def replace_possible_unicode_sequence(self):
c = self.textCursor() c = self.textCursor()
has_selection = c.hasSelection() has_selection = c.hasSelection()