Ensure TreeView cache entry is removed on delete

Address issue:

https://github.com/lite-xl/lite-xl/issues/689

Attempt to provide a more accurate fix to commit:

59f64088e1

For this latter what happens is that any change inside a directory
cause the corresponding entry to be folded in the TreeView.

The new change is more accurate because we remove only the stale
entry corresponding to the delete event and we do not reset the
cache of the parent directory using the modify event.
This commit is contained in:
Francesco Abbate 2021-12-20 11:03:49 +01:00
parent 405bd1c2bd
commit 37c00c877a
2 changed files with 16 additions and 2 deletions

View File

@ -1164,8 +1164,8 @@ end
-- no-op but can be overrided by plugins
function core.on_dirmonitor_modify()
end
function core.on_dirmonitor_modify() end
function core.on_dirmonitor_delete() end
function core.on_dir_change(watch_id, action, filepath)
@ -1174,6 +1174,7 @@ function core.on_dir_change(watch_id, action, filepath)
core.dir_rescan_add_job(dir, filepath)
if action == "delete" then
project_scan_remove_file(dir, filepath)
core.on_dirmonitor_delete(dir, filepath)
elseif action == "create" then
project_scan_add_file(dir, filepath)
core.on_dirmonitor_modify(dir, filepath);

View File

@ -42,6 +42,19 @@ function TreeView:new()
self.target_size = default_treeview_size
self.cache = {}
self.tooltip = { x = 0, y = 0, begin = 0, alpha = 0 }
self:add_core_hooks()
end
function TreeView:add_core_hooks()
-- When a file or directory is deleted we delete the corresponding cache entry
-- because if the entry is recreated we may use wrong information from cache.
local on_delete = core.on_dirmonitor_delete
core.on_dirmonitor_delete = function(dir, filepath)
local cache = self.cache[dir.name]
if cache then cache[filepath] = nil end
on_delete(dir, filepath)
end
end