diff --git a/frontend/apps/filemanager/filemanagerhistory.lua b/frontend/apps/filemanager/filemanagerhistory.lua index 612cc44c7..eba8869a0 100644 --- a/frontend/apps/filemanager/filemanagerhistory.lua +++ b/frontend/apps/filemanager/filemanagerhistory.lua @@ -128,6 +128,17 @@ function FileManagerHistory:onMenuHold(item) end, }, }, + {}, + { + { + text = _("Clear history of deleted files"), + callback = function() + require("readhistory"):clearMissing() + self._manager:updateItemTable() + UIManager:close(self.histfile_dialog) + end, + }, + }, }, } UIManager:show(self.histfile_dialog) diff --git a/frontend/readhistory.lua b/frontend/readhistory.lua index baba54bd4..2d75ef379 100644 --- a/frontend/readhistory.lua +++ b/frontend/readhistory.lua @@ -47,11 +47,6 @@ function ReadHistory:_indexing(start) end function ReadHistory:_sort() - for i = #self.hist, 1, -1 do - if self.hist[i].file == nil or lfs.attributes(self.hist[i].file, "mode") ~= "file" then - table.remove(self.hist, i) - end - end table.sort(self.hist, fileFirstOrdering) -- TODO(zijiehe): Use binary insert instead of a loop to deduplicate. for i = #self.hist, 2, -1 do @@ -122,6 +117,14 @@ function ReadHistory:_init() self:_reduce() end +function ReadHistory:clearMissing() + for i = #self.hist, 1, -1 do + if self.hist[i].file == nil or lfs.attributes(self.hist[i].file, "mode") ~= "file" then + table.remove(self.hist, i) + end + end +end + function ReadHistory:removeItem(item) table.remove(self.hist, item.index) os.remove(DocSettings:getHistoryPath(item.file))