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:
parent
9e7bdf49e9
commit
9155be7a22
|
@ -1158,8 +1158,8 @@ end
|
||||||
|
|
||||||
|
|
||||||
-- no-op but can be overrided by plugins
|
-- no-op but can be overrided by plugins
|
||||||
function core.on_dirmonitor_modify()
|
function core.on_dirmonitor_modify() end
|
||||||
end
|
function core.on_dirmonitor_delete() end
|
||||||
|
|
||||||
|
|
||||||
function core.on_dir_change(watch_id, action, filepath)
|
function core.on_dir_change(watch_id, action, filepath)
|
||||||
|
@ -1168,6 +1168,7 @@ function core.on_dir_change(watch_id, action, filepath)
|
||||||
core.dir_rescan_add_job(dir, filepath)
|
core.dir_rescan_add_job(dir, filepath)
|
||||||
if action == "delete" then
|
if action == "delete" then
|
||||||
project_scan_remove_file(dir, filepath)
|
project_scan_remove_file(dir, filepath)
|
||||||
|
core.on_dirmonitor_delete(dir, filepath)
|
||||||
elseif action == "create" then
|
elseif action == "create" then
|
||||||
project_scan_add_file(dir, filepath)
|
project_scan_add_file(dir, filepath)
|
||||||
core.on_dirmonitor_modify(dir, filepath);
|
core.on_dirmonitor_modify(dir, filepath);
|
||||||
|
|
|
@ -45,6 +45,19 @@ function TreeView:new()
|
||||||
|
|
||||||
self.item_icon_width = 0
|
self.item_icon_width = 0
|
||||||
self.item_text_spacing = 0
|
self.item_text_spacing = 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
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue