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)
|
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)
|
||||||
|
@ -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):
|
||||||
|
@ -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 ''
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user