2
0
mirror of https://github.com/koreader/koreader synced 2024-10-31 21:20:20 +00:00

Prevent crash when opening stale history entry.

This fixes the issue #370 raised by dracodoc.
When the user removes or renames the book which was previously opened
and tries to open it again via (now stale) history entry we are passing
the filename of a non-existent file to the format-specific
:openDocument() method and the behaviour depends on the format. For PDF
and DjVu files it is okay --- they just return an error, but for the
crengine files (ebooks) we get a coredump.
Anyway, the proper solution is to not attempt to open a non-existent
file but give a more meaningful message (than, for example:
"ddjvu: **Unrecognized DjVu Me" for DjVu case) which informs the user
that the history entry is stale. If he has valuable data in it (such as
highlights, etc) he can save them, otherwise he can delete the history
entry there and then.
This commit is contained in:
Tigran Aivazian 2012-10-04 18:21:40 +01:00
parent 48fba48206
commit c13a1553f4

View File

@ -227,13 +227,17 @@ function FileHistory:addAllCommands()
function(self) function(self)
local file_entry = self.result[self.perpage*(self.page-1)+self.current] local file_entry = self.result[self.perpage*(self.page-1)+self.current]
file_full_path = file_entry.dir .. "/" .. file_entry.name file_full_path = file_entry.dir .. "/" .. file_entry.name
openFile(file_full_path) if FileExists(file_full_path) then
--reset height and item index if screen has been rotated openFile(file_full_path)
local item_no = self.perpage * (self.page - 1) + self.current --reset height and item index if screen has been rotated
self.perpage = math.floor(G_height / self.spacing) - 2 local item_no = self.perpage * (self.page - 1) + self.current
self.current = item_no % self.perpage self.perpage = math.floor(G_height / self.spacing) - 2
self.page = math.floor(item_no / self.perpage) + 1 self.current = item_no % self.perpage
self.pagedirty = true self.page = math.floor(item_no / self.perpage) + 1
self.pagedirty = true
else
InfoMessage:inform("File does not exist", 2000, 1, MSG_ERROR, "File does not exist")
end
end end
) )
self.commands:add(KEY_DEL, nil, "Del", self.commands:add(KEY_DEL, nil, "Del",