mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Clear completion cache when file is edited
(uses a debounce timer for performance)
This commit is contained in:
parent
c9081f49c7
commit
da1f5e5448
@ -676,6 +676,9 @@ class Boss(QObject):
|
||||
self.gui.action_save.setEnabled(True)
|
||||
|
||||
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)
|
||||
self.completion_request_count += 1
|
||||
completion_worker().queue_completion(request_id, completion_type, completion_data, query)
|
||||
|
@ -22,12 +22,19 @@ from calibre.utils.matcher import Matcher
|
||||
Request = namedtuple('Request', 'id type data query')
|
||||
|
||||
names_cache = {}
|
||||
file_cache = {}
|
||||
|
||||
@control
|
||||
def clear_caches(cache_type, data_conn):
|
||||
global names_cache
|
||||
if cache_type is None or cache_type == 'names':
|
||||
global names_cache, file_cache
|
||||
if cache_type is None:
|
||||
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
|
||||
def names_data(request_data):
|
||||
|
@ -642,7 +642,7 @@ class Smarts(NullSmarts):
|
||||
if m is None:
|
||||
return
|
||||
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'}:
|
||||
# A link
|
||||
query = m.group(2) or m.group(3) or ''
|
||||
|
@ -141,6 +141,9 @@ class TextEdit(PlainTextEdit):
|
||||
PlainTextEdit.__init__(self, parent)
|
||||
self.completion_popup = CompletionPopup(self)
|
||||
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.gutter_width = 0
|
||||
self.tw = 2
|
||||
@ -803,6 +806,10 @@ class TextEdit(PlainTextEdit):
|
||||
if result.request_id[0] >= self.last_completion_request:
|
||||
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):
|
||||
c = self.textCursor()
|
||||
has_selection = c.hasSelection()
|
||||
|
Loading…
x
Reference in New Issue
Block a user