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

174 lines
5.6 KiB
Lua
Raw Normal View History

2013-10-18 20:38:07 +00:00
local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer")
local ButtonDialog = require("ui/widget/buttondialog")
2013-10-18 20:38:07 +00:00
local UIManager = require("ui/uimanager")
2014-08-14 11:49:42 +00:00
local Menu = require("ui/widget/menu")
local Screen = require("device").screen
2013-10-18 20:38:07 +00:00
local _ = require("gettext")
local KeyValuePage = require("ui/widget/keyvaluepage")
local DocSettings = require("docsettings")
local InfoMessage = require("ui/widget/infomessage")
local T = require("ffi/util").template
local RenderText = require("ui/rendertext")
local Font = require("ui/font")
2013-10-18 20:38:07 +00:00
local FileManagerHistory = InputContainer:extend{
2014-03-13 13:52:43 +00:00
hist_menu_title = _("History"),
2013-08-14 09:29:05 +00:00
}
function FileManagerHistory:init()
2014-03-13 13:52:43 +00:00
self.ui.menu:registerToMainMenu(self)
2013-08-14 09:29:05 +00:00
end
function FileManagerHistory:addToMainMenu(menu_items)
-- insert table to main tab of filemanager menu
menu_items.history = {
2016-02-17 07:10:23 +00:00
text = self.hist_menu_title,
callback = function()
self:onShowHist()
end,
}
2016-02-17 07:10:23 +00:00
end
function FileManagerHistory:updateItemTable()
2017-02-01 14:24:21 +00:00
self.hist_menu:switchItemTable(self.hist_menu_title,
require("readhistory").hist)
2016-02-17 07:10:23 +00:00
end
2013-08-14 09:29:05 +00:00
function FileManagerHistory:onSetDimensions(dimen)
2014-03-13 13:52:43 +00:00
self.dimen = dimen
2013-08-14 09:29:05 +00:00
end
function FileManagerHistory:buildBookInformationTable(book_props)
if book_props == nil then
return false
end
if book_props.authors == "" or book_props.authors == nil then
book_props.authors = _("N/A")
end
if book_props.title == "" or book_props.title == nil then
book_props.title = _("N/A")
end
if book_props.series == "" or book_props.series == nil then
book_props.series = _("N/A")
end
if book_props.pages == "" or book_props.pages == nil then
book_props.pages = _("N/A")
end
if book_props.language == "" or book_props.language == nil then
book_props.language = _("N/A")
end
return {
{ T(_("Title: %1"), book_props.title), "" },
{ T(_("Authors: %1"), book_props.authors), "" },
{ T(_("Series: %1"), book_props.series), "" },
{ T(_("Pages: %1"), book_props.pages), "" },
{ T(_("Language: %1"), string.upper(book_props.language)), "" },
}
end
function FileManagerHistory:bookInformation(file)
local file_mode = lfs.attributes(file, "mode")
if file_mode ~= "file" then return false end
local book_stats = DocSettings:open(file):readSetting('stats')
if book_stats == nil then return false end
return self:buildBookInformationTable(book_stats)
end
function FileManagerHistory:onMenuHold(item)
local font_size = Font:getFace("tfont")
local text_remove_hist = _("Remove \"%1\" from history")
local text_remove_without_item = T(text_remove_hist, "")
local text_remove_hist_width = (RenderText:sizeUtf8Text(
0, self.width, font_size, text_remove_without_item).x )
local text_item_width = (RenderText:sizeUtf8Text(
0, self.width , font_size, item.text).x )
local item_trun
if self.width < text_remove_hist_width + text_item_width then
item_trun = RenderText:truncateTextByWidth(item.text, font_size, 1.2 * self.width - text_remove_hist_width)
else
item_trun = item.text
end
local text_remove = T(text_remove_hist, item_trun)
2014-03-13 13:52:43 +00:00
self.histfile_dialog = ButtonDialog:new{
buttons = {
{
{
text = text_remove,
2014-03-13 13:52:43 +00:00
callback = function()
require("readhistory"):removeItem(item)
2014-03-13 13:52:43 +00:00
self._manager:updateItemTable()
UIManager:close(self.histfile_dialog)
end,
},
},
{
{
text = _("Book information"),
callback = function()
local book_info_metadata = FileManagerHistory:bookInformation(item.file)
if book_info_metadata then
UIManager:show(KeyValuePage:new{
title = _("Book information"),
kv_pairs = book_info_metadata,
})
else
UIManager:show(InfoMessage:new{
text = _("Cannot fetch information for a selected book"),
})
end
UIManager:close(self.histfile_dialog)
end,
},
},
{},
{
{
text = _("Clear history of deleted files"),
callback = function()
require("readhistory"):clearMissing()
self._manager:updateItemTable()
UIManager:close(self.histfile_dialog)
end,
},
},
2014-03-13 13:52:43 +00:00
},
}
UIManager:show(self.histfile_dialog)
return true
end
2013-08-14 09:29:05 +00:00
function FileManagerHistory:onShowHist()
2014-03-13 13:52:43 +00:00
local menu_container = CenterContainer:new{
dimen = Screen:getSize(),
}
2013-08-14 09:29:05 +00:00
2014-03-13 13:52:43 +00:00
self.hist_menu = Menu:new{
ui = self.ui,
width = Screen:getWidth()-50,
height = Screen:getHeight()-50,
show_parent = menu_container,
onMenuHold = self.onMenuHold,
_manager = self,
}
self:updateItemTable()
2013-08-14 09:29:05 +00:00
2014-03-13 13:52:43 +00:00
table.insert(menu_container, self.hist_menu)
2013-08-14 09:29:05 +00:00
2014-03-13 13:52:43 +00:00
self.hist_menu.close_callback = function()
UIManager:close(menu_container)
end
2013-08-14 09:29:05 +00:00
2014-03-13 13:52:43 +00:00
UIManager:show(menu_container)
return true
2013-08-14 09:29:05 +00:00
end
return FileManagerHistory