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 committed by Guldoman
parent 9e7bdf49e9
commit 9155be7a22
No known key found for this signature in database
GPG Key ID: C08A498EC7F1AFDD
2 changed files with 16 additions and 2 deletions

View File

@ -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);

View File

@ -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