fix(filemanager): delete document with settings

pull/1766/head
Qingping Hou 8 years ago
parent 722eaed4b2
commit d1ca8bc494

@ -1 +1 @@
Subproject commit 9a2503bacc3fe52f5946d8392439f946a5d8dae4
Subproject commit 9bad2e83870de728e00ce387136a4e0fa4827de4

@ -11,6 +11,7 @@ local FileChooser = require("ui/widget/filechooser")
local TextWidget = require("ui/widget/textwidget")
local Blitbuffer = require("ffi/blitbuffer")
local lfs = require("libs/libkoreader-lfs")
local docsettings = require("docsettings")
local UIManager = require("ui/uimanager")
local Screen = require("device").screen
local Geom = require("ui/geometry")
@ -277,18 +278,35 @@ function FileManager:pasteHere(file)
end
function FileManager:deleteFile(file)
local ok, err
local InfoMessage = require("ui/widget/infomessage")
DEBUG("File to remove", util.realpath(file))
local rm = util.execute(self.rm_bin, "-rf", util.realpath(file))
DEBUG("rm status", rm)
if rm == 0 then
local file_abs_path = util.realpath(file)
if file_abs_path == nil then
UIManager:show(InfoMessage:new{
text = _("Successfully deleted\n") .. file,
text = util.template(_("File %1 not found"), file),
})
return
end
local is_doc = DocumentRegistry:getProvider(file_abs_path)
ok, err = os.remove(file_abs_path)
if err == nil then
if is_doc ~= nil then
-- also delete history/settings for documents
local sidecar_dir = docsettings:getSidecarDir(file_abs_path)
if lfs.attributes(sidecar_dir, "mode") == "directory" then
util.purgeDir(sidecar_dir)
end
local legacy_history_file = docsettings:getHistoryPath(file)
ok, err = os.remove(legacy_history_file)
end
UIManager:show(InfoMessage:new{
text = util.template(_("Successfully deleted %1"), file),
timeout = 2,
})
else
UIManager:show(InfoMessage:new{
text = _("An error occurred while trying to delete\n") .. file,
text = util.template(_("An error occurred while trying to delete %1"), file),
})
end
end

@ -41,7 +41,7 @@ function FileSearcher:readDir()
local fullpath = d.."/"..f
local attributes = lfs.attributes(fullpath)
if attributes.mode == "directory" and f ~= "." and f~=".." then
table.insert(new_dirs, d.."/"..f)
table.insert(new_dirs, fullpath)
elseif attributes.mode == "file" and DocumentRegistry:getProvider(fullpath) then
table.insert(self.files, {name = f, path = fullpath, attr = attributes})
end

@ -1,7 +1,10 @@
require("commonrequire")
local FileManager = require("apps/filemanager/filemanager")
local lfs = require("libs/libkoreader-lfs")
local docsettings = require("docsettings")
local UIManager = require("ui/uimanager")
local Screen = require("device").screen
local util = require("ffi/util")
local DEBUG = require("dbg")
describe("FileManager module", function()
@ -15,4 +18,85 @@ describe("FileManager module", function()
UIManager:scheduleIn(1, function() UIManager:close(filemanager) end)
UIManager:run()
end)
it("should show error on non-existent file", function()
local filemanager = FileManager:new{
dimen = Screen:getSize(),
root_path = "../../test",
}
local old_show = UIManager.show
local tmp_fn = "/abc/123/test/foo.bar.baz.tmp.epub.pdf"
UIManager.show = function(self, w)
assert.Equals(w.text, "File "..tmp_fn.." not found")
end
assert.is_nil(lfs.attributes(tmp_fn))
filemanager:deleteFile(tmp_fn)
UIManager.show = old_show
end)
it("should not delete settings for non-document file", function()
local filemanager = FileManager:new{
dimen = Screen:getSize(),
root_path = "../../test",
}
local tmp_fn = "../../test/2col.test.tmp.sh"
util.copyFile("../../test/2col.pdf", tmp_fn)
local tmp_sidecar = docsettings:getSidecarDir(util.realpath(tmp_fn))
lfs.mkdir(tmp_sidecar)
local tmp_history = docsettings:getHistoryPath(tmp_fn)
local tmpfp = io.open(tmp_history, "w")
tmpfp:write("{}")
tmpfp:close()
local old_show = UIManager.show
-- make sure file exists
assert.is_not_nil(lfs.attributes(tmp_fn))
assert.is_not_nil(lfs.attributes(tmp_sidecar))
assert.is_not_nil(lfs.attributes(tmp_history))
UIManager.show = function(self, w)
assert.Equals(w.text, "Successfully deleted "..tmp_fn)
end
filemanager:deleteFile(tmp_fn)
UIManager.show = old_show
-- make sure history file exists
assert.is_nil(lfs.attributes(tmp_fn))
assert.is_not_nil(lfs.attributes(tmp_sidecar))
assert.is_not_nil(lfs.attributes(tmp_history))
os.remove(tmp_sidecar)
os.remove(tmp_history)
end)
it("should delete document with its settings", function()
local filemanager = FileManager:new{
dimen = Screen:getSize(),
root_path = "../../test",
}
local tmp_fn = "../../test/2col.test.tmp.pdf"
util.copyFile("../../test/2col.pdf", tmp_fn)
local tmp_sidecar = docsettings:getSidecarDir(util.realpath(tmp_fn))
lfs.mkdir(tmp_sidecar)
local tmp_history = docsettings:getHistoryPath(tmp_fn)
local tmpfp = io.open(tmp_history, "w")
tmpfp:write("{}")
tmpfp:close()
local old_show = UIManager.show
-- make sure file exists
assert.is_not_nil(lfs.attributes(tmp_fn))
assert.is_not_nil(lfs.attributes(tmp_sidecar))
assert.is_not_nil(lfs.attributes(tmp_history))
UIManager.show = function(self, w)
assert.Equals(w.text, "Successfully deleted "..tmp_fn)
end
filemanager:deleteFile(tmp_fn)
UIManager.show = old_show
assert.is_nil(lfs.attributes(tmp_fn))
assert.is_nil(lfs.attributes(tmp_sidecar))
assert.is_nil(lfs.attributes(tmp_history))
end)
end)

Loading…
Cancel
Save