mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
FileSearcher: consistent results window (#13298)
This commit is contained in:
@@ -272,6 +272,16 @@ function FileManager:setupLayout()
|
||||
file_manager.collections:genAddToCollectionButton(file, close_dialog_callback, refresh_callback),
|
||||
})
|
||||
end
|
||||
if Device:canExecuteScript(file) then
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genExecuteScriptButton(file, close_dialog_callback),
|
||||
})
|
||||
end
|
||||
if FileManagerConverter:isSupported(file) then
|
||||
table.insert(buttons, {
|
||||
FileManagerConverter:genConvertButton(file, close_dialog_callback, refresh_callback)
|
||||
})
|
||||
end
|
||||
table.insert(buttons, {
|
||||
{
|
||||
text = _("Open with…"),
|
||||
@@ -288,22 +298,6 @@ function FileManager:setupLayout()
|
||||
filemanagerutil.genBookDescriptionButton(file, book_props, close_dialog_callback),
|
||||
})
|
||||
end
|
||||
if Device:canExecuteScript(file) then
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genExecuteScriptButton(file, close_dialog_callback),
|
||||
})
|
||||
end
|
||||
if FileManagerConverter:isSupported(file) then
|
||||
table.insert(buttons, {
|
||||
{
|
||||
text = _("Convert"),
|
||||
callback = function()
|
||||
UIManager:close(self.file_dialog)
|
||||
FileManagerConverter:showConvertButtons(file, self)
|
||||
end,
|
||||
},
|
||||
})
|
||||
end
|
||||
else -- folder
|
||||
local folder = ffiUtil.realpath(file)
|
||||
table.insert(buttons, {
|
||||
@@ -450,14 +444,13 @@ function FileChooser:onBack()
|
||||
elseif back_to_exit == "disable" then
|
||||
return true
|
||||
elseif back_to_exit == "prompt" then
|
||||
UIManager:show(ConfirmBox:new{
|
||||
text = _("Exit KOReader?"),
|
||||
ok_text = _("Exit"),
|
||||
ok_callback = function()
|
||||
self:onClose()
|
||||
end
|
||||
})
|
||||
|
||||
UIManager:show(ConfirmBox:new{
|
||||
text = _("Exit KOReader?"),
|
||||
ok_text = _("Exit"),
|
||||
ok_callback = function()
|
||||
self:onClose()
|
||||
end,
|
||||
})
|
||||
return true
|
||||
end
|
||||
elseif back_in_filemanager == "parent_folder" then
|
||||
@@ -476,7 +469,8 @@ function FileManager:onSwipeFM(ges)
|
||||
return true
|
||||
end
|
||||
|
||||
function FileManager:addFileDialogButtons(row_id, row_func) -- FileManager, History, Collections file_dialog
|
||||
function FileManager:addFileDialogButtons(row_id, row_func)
|
||||
-- long-press file_dialog in FileManager, History, Collections, FileSearcher
|
||||
self.file_dialog_added_buttons = self.file_dialog_added_buttons or { index = {} }
|
||||
if self.file_dialog_added_buttons.index[row_id] == nil then
|
||||
table.insert(self.file_dialog_added_buttons, row_func)
|
||||
|
||||
@@ -28,6 +28,7 @@ local FileManagerCollection = WidgetContainer:extend{
|
||||
}
|
||||
|
||||
function FileManagerCollection:init()
|
||||
self.show_mark = G_reader_settings:nilOrTrue("collection_show_mark")
|
||||
self.doc_props_cache = {}
|
||||
self.updated_collections = {}
|
||||
self.ui.menu:registerToMainMenu(self)
|
||||
@@ -74,14 +75,15 @@ end
|
||||
|
||||
function FileManagerCollection:onShowColl(collection_name)
|
||||
collection_name = collection_name or ReadCollection.default_collection_name
|
||||
self.coll_menu = BookList:new{
|
||||
-- This may be hijacked by CoverBrowser plugin and needs to be known as booklist_menu.
|
||||
self.booklist_menu = BookList:new{
|
||||
name = "collections",
|
||||
path = collection_name,
|
||||
title_bar_left_icon = "appbar.menu",
|
||||
onLeftButtonTap = function() self:showCollDialog() end,
|
||||
onReturn = function()
|
||||
self.from_collection_name = self:getCollectionTitle(collection_name)
|
||||
self.coll_menu.close_callback()
|
||||
self.booklist_menu.close_callback()
|
||||
self:onShowCollList()
|
||||
end,
|
||||
onMenuChoice = self.onMenuChoice,
|
||||
@@ -90,23 +92,23 @@ function FileManagerCollection:onShowColl(collection_name)
|
||||
_manager = self,
|
||||
_recreate_func = function() self:onShowColl(collection_name) end,
|
||||
}
|
||||
table.insert(self.coll_menu.paths, true) -- enable onReturn button
|
||||
self.coll_menu.close_callback = function()
|
||||
table.insert(self.booklist_menu.paths, true) -- enable onReturn button
|
||||
self.booklist_menu.close_callback = function()
|
||||
self:refreshFileManager()
|
||||
UIManager:close(self.coll_menu)
|
||||
self.coll_menu = nil
|
||||
UIManager:close(self.booklist_menu)
|
||||
self.booklist_menu = nil
|
||||
self.match_table = nil
|
||||
end
|
||||
self:setCollate()
|
||||
self:updateItemTable()
|
||||
UIManager:show(self.coll_menu)
|
||||
UIManager:show(self.booklist_menu)
|
||||
return true
|
||||
end
|
||||
|
||||
function FileManagerCollection:updateItemTable(item_table, focused_file)
|
||||
if item_table == nil then
|
||||
item_table = {}
|
||||
for _, item in pairs(ReadCollection.coll[self.coll_menu.path]) do
|
||||
for _, item in pairs(ReadCollection.coll[self.booklist_menu.path]) do
|
||||
if self:isItemMatch(item) then
|
||||
local item_tmp = {
|
||||
file = item.file,
|
||||
@@ -126,7 +128,7 @@ function FileManagerCollection:updateItemTable(item_table, focused_file)
|
||||
end
|
||||
end
|
||||
local title, subtitle = self:getBookListTitle(item_table)
|
||||
self.coll_menu:switchItemTable(title, item_table, -1, focused_file and { file = focused_file }, subtitle)
|
||||
self.booklist_menu:switchItemTable(title, item_table, -1, focused_file and { file = focused_file }, subtitle)
|
||||
end
|
||||
|
||||
function FileManagerCollection:isItemMatch(item)
|
||||
@@ -149,7 +151,7 @@ function FileManagerCollection:isItemMatch(item)
|
||||
end
|
||||
|
||||
function FileManagerCollection:getBookListTitle(item_table)
|
||||
local collection_title = self:getCollectionTitle(self.coll_menu.path)
|
||||
local collection_title = self:getCollectionTitle(self.booklist_menu.path)
|
||||
local title = T("%1 (%2)", collection_title, #item_table)
|
||||
local subtitle = ""
|
||||
if self.match_table then
|
||||
@@ -197,7 +199,7 @@ function FileManagerCollection:onMenuHold(item)
|
||||
end
|
||||
local function close_dialog_menu_callback()
|
||||
UIManager:close(self.file_dialog)
|
||||
self._manager.coll_menu.close_callback()
|
||||
self.close_callback()
|
||||
end
|
||||
local function close_dialog_update_callback()
|
||||
UIManager:close(self.file_dialog)
|
||||
@@ -232,6 +234,11 @@ function FileManagerCollection:onMenuHold(item)
|
||||
filemanagerutil.genResetSettingsButton(doc_settings_or_file, close_dialog_update_callback, is_currently_opened),
|
||||
self._manager:genAddToCollectionButton(file, close_dialog_callback, close_dialog_update_callback),
|
||||
})
|
||||
if Device:canExecuteScript(file) then
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genExecuteScriptButton(file, close_dialog_menu_callback)
|
||||
})
|
||||
end
|
||||
table.insert(buttons, {
|
||||
{
|
||||
text = _("Delete"),
|
||||
@@ -259,12 +266,6 @@ function FileManagerCollection:onMenuHold(item)
|
||||
filemanagerutil.genBookDescriptionButton(file, book_props, close_dialog_callback),
|
||||
})
|
||||
|
||||
if Device:canExecuteScript(file) then
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genExecuteScriptButton(file, close_dialog_menu_callback)
|
||||
})
|
||||
end
|
||||
|
||||
if self._manager.file_dialog_added_buttons ~= nil then
|
||||
for _, row_func in ipairs(self._manager.file_dialog_added_buttons) do
|
||||
local row = row_func(file, true, book_props)
|
||||
@@ -285,12 +286,12 @@ end
|
||||
|
||||
function FileManagerCollection.getMenuInstance()
|
||||
local ui = require("apps/filemanager/filemanager").instance or require("apps/reader/readerui").instance
|
||||
return ui.collections.coll_menu
|
||||
return ui.collections.booklist_menu
|
||||
end
|
||||
|
||||
function FileManagerCollection:showCollDialog()
|
||||
local collection_name = self.coll_menu.path
|
||||
local coll_not_empty = #self.coll_menu.item_table > 0
|
||||
local collection_name = self.booklist_menu.path
|
||||
local coll_not_empty = #self.booklist_menu.item_table > 0
|
||||
local coll_dialog
|
||||
local function genFilterByStatusButton(button_status)
|
||||
return {
|
||||
@@ -310,7 +311,7 @@ function FileManagerCollection:showCollDialog()
|
||||
callback = function()
|
||||
UIManager:close(coll_dialog)
|
||||
local prop_values = {}
|
||||
for idx, item in ipairs(self.coll_menu.item_table) do
|
||||
for idx, item in ipairs(self.booklist_menu.item_table) do
|
||||
local doc_prop = self:getDocProps(item.file)[button_prop]
|
||||
if doc_prop == nil then
|
||||
doc_prop = { self.empty_prop }
|
||||
@@ -335,7 +336,7 @@ function FileManagerCollection:showCollDialog()
|
||||
text = _("Collections"),
|
||||
callback = function()
|
||||
UIManager:close(coll_dialog)
|
||||
self.coll_menu.close_callback()
|
||||
self.booklist_menu.close_callback()
|
||||
self:onShowCollList()
|
||||
end,
|
||||
}},
|
||||
@@ -410,7 +411,7 @@ function FileManagerCollection:showCollDialog()
|
||||
self.updated_collections[collection_name] = true
|
||||
ReadCollection:addItem(file, collection_name)
|
||||
self:updateItemTable(nil, file) -- show added item
|
||||
self.files_updated = true
|
||||
self.files_updated = self.show_mark
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -435,7 +436,7 @@ function FileManagerCollection:showCollDialog()
|
||||
ReadCollection:addItem(file, collection_name)
|
||||
end
|
||||
self:updateItemTable(nil, file)
|
||||
self.files_updated = true
|
||||
self.files_updated = self.show_mark
|
||||
end,
|
||||
}})
|
||||
end
|
||||
@@ -457,7 +458,7 @@ function FileManagerCollection:showPropValueList(prop, prop_values)
|
||||
util.tableSetValue(self, value, "match_table", "props", prop)
|
||||
local item_table = {}
|
||||
for _, idx in ipairs(item_idxs) do
|
||||
table.insert(item_table, self.coll_menu.item_table[idx])
|
||||
table.insert(item_table, self.booklist_menu.item_table[idx])
|
||||
end
|
||||
self:updateItemTable(item_table)
|
||||
end,
|
||||
@@ -478,7 +479,7 @@ function FileManagerCollection:showPropValueList(prop, prop_values)
|
||||
end
|
||||
|
||||
function FileManagerCollection:setCollate(collate_id, collate_reverse)
|
||||
local coll_settings = ReadCollection.coll_settings[self.coll_menu.path]
|
||||
local coll_settings = ReadCollection.coll_settings[self.booklist_menu.path]
|
||||
if collate_id == nil then
|
||||
collate_id = coll_settings.collate
|
||||
else
|
||||
@@ -506,7 +507,7 @@ function FileManagerCollection:setCollate(collate_id, collate_reverse)
|
||||
end
|
||||
|
||||
function FileManagerCollection:showArrangeBooksDialog()
|
||||
local collection_name = self.coll_menu.path
|
||||
local collection_name = self.booklist_menu.path
|
||||
local coll_settings = ReadCollection.coll_settings[collection_name]
|
||||
local curr_collate_id = coll_settings.collate
|
||||
local arrange_dialog
|
||||
@@ -558,9 +559,9 @@ function FileManagerCollection:showArrangeBooksDialog()
|
||||
UIManager:close(arrange_dialog)
|
||||
UIManager:show(SortWidget:new{
|
||||
title = _("Arrange books in collection"),
|
||||
item_table = self.coll_menu.item_table,
|
||||
item_table = self.booklist_menu.item_table,
|
||||
callback = function()
|
||||
ReadCollection:updateCollectionOrder(collection_name, self.coll_menu.item_table)
|
||||
ReadCollection:updateCollectionOrder(collection_name, self.booklist_menu.item_table)
|
||||
self.updated_collections[collection_name] = true
|
||||
self:setCollate(false, false)
|
||||
self:updateItemTable()
|
||||
@@ -587,15 +588,15 @@ function FileManagerCollection:addBooksFromFolder(include_subfolders)
|
||||
util.findFiles(folder, function(file)
|
||||
files_found[file] = DocumentRegistry:hasProvider(file) or nil
|
||||
end, include_subfolders)
|
||||
local count = ReadCollection:addItemsMultiple(files_found, { [self.coll_menu.path] = true })
|
||||
local count = ReadCollection:addItemsMultiple(files_found, { [self.booklist_menu.path] = true })
|
||||
local text
|
||||
if count == 0 then
|
||||
text = _("No books added to collection")
|
||||
else
|
||||
self.updated_collections[self.coll_menu.path] = true
|
||||
self.updated_collections[self.booklist_menu.path] = true
|
||||
text = T(N_("1 book added to collection", "%1 books added to collection", count), count)
|
||||
self:updateItemTable()
|
||||
self.files_updated = true
|
||||
self.files_updated = self.show_mark
|
||||
end
|
||||
UIManager:show(InfoMessage:new{ text = text })
|
||||
end,
|
||||
@@ -609,8 +610,8 @@ function FileManagerCollection:onBookMetadataChanged(prop_updated)
|
||||
file = prop_updated.filepath
|
||||
self.doc_props_cache[file] = prop_updated.doc_props
|
||||
end
|
||||
if self.coll_menu then
|
||||
self:updateItemTable(nil, file) -- keep showing the changed file
|
||||
if self.booklist_menu then
|
||||
self:updateItemTable(nil, file) -- keep showing the changed file after resorting
|
||||
end
|
||||
end
|
||||
|
||||
@@ -910,23 +911,21 @@ function FileManagerCollection:removeCollection(item)
|
||||
ReadCollection:removeCollection(item.name)
|
||||
table.remove(self.coll_list.item_table, item.idx)
|
||||
self:updateCollListItemTable()
|
||||
self.files_updated = true
|
||||
self.files_updated = self.show_mark
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function FileManagerCollection:sortCollections()
|
||||
local sort_widget
|
||||
sort_widget = SortWidget:new{
|
||||
UIManager:show(SortWidget:new{
|
||||
title = _("Arrange collections"),
|
||||
item_table = util.tableDeepCopy(self.coll_list.item_table),
|
||||
item_table = self.coll_list.item_table,
|
||||
callback = function()
|
||||
self.updated_collections = { true } -- all
|
||||
ReadCollection:updateCollectionListOrder(sort_widget.item_table)
|
||||
ReadCollection:updateCollectionListOrder(self.coll_list.item_table)
|
||||
self:updateCollListItemTable(true) -- init
|
||||
end,
|
||||
}
|
||||
UIManager:show(sort_widget)
|
||||
})
|
||||
end
|
||||
|
||||
function FileManagerCollection:onShowCollectionsSearchDialog(search_str, coll_name)
|
||||
@@ -1079,12 +1078,15 @@ function FileManagerCollection:searchCollections(coll_name)
|
||||
if a.coll_order ~= b.coll_order then
|
||||
return a.coll_order < b.coll_order
|
||||
end
|
||||
return a.item_order < b.item_order
|
||||
if a.item_order and b.item_order then
|
||||
return a.item_order < b.item_order
|
||||
end
|
||||
return ffiUtil.strcoll(a.text, b.text)
|
||||
end)
|
||||
local new_coll_name = T(_("Search results: %1"), self.search_str)
|
||||
if coll_name then
|
||||
new_coll_name = new_coll_name .. " " .. T(_"(in %1)", coll_name)
|
||||
self.coll_menu.close_callback()
|
||||
self.booklist_menu.close_callback()
|
||||
end
|
||||
self.updated_collections[new_coll_name] = true
|
||||
ReadCollection:removeCollection(new_coll_name)
|
||||
|
||||
@@ -68,7 +68,14 @@ function FileConverter:isSupported(file)
|
||||
return self.formats_from[util.getFileNameSuffix(file)] and true or false
|
||||
end
|
||||
|
||||
function FileConverter:showConvertButtons(file, ui)
|
||||
function FileConverter:showConvertButtons(file, caller_post_callback)
|
||||
local function writeData(data, target_file)
|
||||
UIManager:close(self.convert_dialog)
|
||||
util.writeToFile(data, target_file)
|
||||
if caller_post_callback then
|
||||
caller_post_callback()
|
||||
end
|
||||
end
|
||||
local __, filename_pure = util.splitFilePathName(file)
|
||||
local filename_suffix = util.getFileNameSuffix(file)
|
||||
local filetype_name = self.formats_from[filename_suffix].name
|
||||
@@ -87,14 +94,11 @@ function FileConverter:showConvertButtons(file, ui)
|
||||
text = _("Overwrite existing HTML file?"),
|
||||
ok_text = _("Overwrite"),
|
||||
ok_callback = function()
|
||||
util.writeToFile(html, filename_html)
|
||||
UIManager:close(self.convert_dialog)
|
||||
writeData(html, filename_html)
|
||||
end,
|
||||
})
|
||||
else
|
||||
util.writeToFile(html, filename_html)
|
||||
ui:refreshPath()
|
||||
UIManager:close(self.convert_dialog)
|
||||
writeData(html, filename_html)
|
||||
end
|
||||
end,
|
||||
},
|
||||
@@ -117,4 +121,16 @@ function FileConverter:cleanup()
|
||||
self.convert_dialog = nil
|
||||
end
|
||||
|
||||
function FileConverter:genConvertButton(file, caller_pre_callback, caller_post_callback)
|
||||
return {
|
||||
text = _("Convert"),
|
||||
callback = function()
|
||||
if caller_pre_callback then
|
||||
caller_pre_callback()
|
||||
end
|
||||
self:showConvertButtons(file, caller_post_callback)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
return FileConverter
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
local BD = require("ui/bidi")
|
||||
local BookList = require("ui/widget/booklist")
|
||||
local ButtonDialog = require("ui/widget/buttondialog")
|
||||
local CheckButton = require("ui/widget/checkbutton")
|
||||
@@ -5,6 +6,7 @@ local ConfirmBox = require("ui/widget/confirmbox")
|
||||
local Device = require("device")
|
||||
local DocumentRegistry = require("document/documentregistry")
|
||||
local FileChooser = require("ui/widget/filechooser")
|
||||
local FileManagerConverter = require("apps/filemanager/filemanagerconverter")
|
||||
local InfoMessage = require("ui/widget/infomessage")
|
||||
local InputContainer = require("ui/widget/container/inputcontainer")
|
||||
local InputDialog = require("ui/widget/inputdialog")
|
||||
@@ -25,6 +27,9 @@ local FileSearcher = InputContainer:extend{
|
||||
|
||||
function FileSearcher:init()
|
||||
self:registerKeyEvents()
|
||||
if self.ui.file_chooser then
|
||||
self.ui.menu:registerToMainMenu(self)
|
||||
end
|
||||
end
|
||||
|
||||
function FileSearcher:registerKeyEvents()
|
||||
@@ -34,6 +39,30 @@ function FileSearcher:registerKeyEvents()
|
||||
end
|
||||
end
|
||||
|
||||
function FileSearcher:addToMainMenu(menu_items)
|
||||
menu_items.file_search = {
|
||||
-- @translators Search for files by name.
|
||||
text = _("File search"),
|
||||
help_text = _([[Search a book by filename in the current or home folder and its subfolders.
|
||||
|
||||
Wildcards for one '?' or more '*' characters can be used.
|
||||
A search for '*' will show all files.
|
||||
|
||||
The sorting order is the same as in filemanager.
|
||||
|
||||
Tap a book in the search results to open it.]]),
|
||||
callback = function()
|
||||
self:onShowFileSearch()
|
||||
end,
|
||||
}
|
||||
menu_items.file_search_results = {
|
||||
text = _("Last file search results"),
|
||||
callback = function()
|
||||
self:onShowSearchResults()
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
function FileSearcher:onShowFileSearch(search_string)
|
||||
local search_dialog, check_button_case, check_button_subfolders, check_button_metadata
|
||||
local function _doSearch()
|
||||
@@ -65,7 +94,7 @@ function FileSearcher:onShowFileSearch(search_string)
|
||||
text = _("Home folder"),
|
||||
enabled = G_reader_settings:has("home_dir"),
|
||||
callback = function()
|
||||
self.path = G_reader_settings:readSetting("home_dir")
|
||||
FileSearcher.search_path = G_reader_settings:readSetting("home_dir")
|
||||
_doSearch()
|
||||
end,
|
||||
},
|
||||
@@ -73,7 +102,7 @@ function FileSearcher:onShowFileSearch(search_string)
|
||||
text = self.ui.file_chooser and _("Current folder") or _("Book folder"),
|
||||
is_enter_default = true,
|
||||
callback = function()
|
||||
self.path = self.ui.file_chooser and self.ui.file_chooser.path or self.ui:getLastDirFile()
|
||||
FileSearcher.search_path = self.ui.file_chooser and self.ui.file_chooser.path or self.ui:getLastDirFile()
|
||||
_doSearch()
|
||||
end,
|
||||
},
|
||||
@@ -106,7 +135,7 @@ function FileSearcher:onShowFileSearch(search_string)
|
||||
end
|
||||
|
||||
function FileSearcher:doSearch()
|
||||
local search_hash = self.path .. (FileSearcher.search_string or "") ..
|
||||
local search_hash = FileSearcher.search_path .. (FileSearcher.search_string or "") ..
|
||||
tostring(self.case_sensitive) .. tostring(self.include_subfolders) .. tostring(self.include_metadata)
|
||||
local not_cached = FileSearcher.search_hash ~= search_hash
|
||||
if not_cached then
|
||||
@@ -163,7 +192,7 @@ function FileSearcher:getList()
|
||||
end
|
||||
|
||||
local dirs, files = {}, {}
|
||||
local scan_dirs = {self.path}
|
||||
local scan_dirs = { FileSearcher.search_path }
|
||||
while #scan_dirs ~= 0 do
|
||||
local new_dirs = {}
|
||||
-- handle each dir
|
||||
@@ -244,47 +273,65 @@ function FileSearcher:showSearchResultsMessage(no_results)
|
||||
ok_text = _("Extract"),
|
||||
ok_callback = function()
|
||||
if not no_results then
|
||||
self.search_menu.close_callback()
|
||||
self.booklist_menu.close_callback()
|
||||
end
|
||||
self.ui.coverbrowser:extractBooksInDirectory(self.path)
|
||||
self.ui.coverbrowser:extractBooksInDirectory(FileSearcher.search_path)
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
function FileSearcher:refreshFileManager()
|
||||
if self.files_updated then
|
||||
if self.ui.file_chooser then
|
||||
self.ui.file_chooser:refreshPath()
|
||||
end
|
||||
self.files_updated = nil
|
||||
end
|
||||
end
|
||||
|
||||
function FileSearcher:onShowSearchResults(not_cached)
|
||||
if not not_cached and FileSearcher.search_results == nil then
|
||||
self:onShowFileSearch()
|
||||
return
|
||||
return true
|
||||
end
|
||||
|
||||
self.search_menu = BookList:new{
|
||||
-- This may be hijacked by CoverBrowser plugin and needs to be known as booklist_menu.
|
||||
self.booklist_menu = BookList:new{
|
||||
name = "filesearcher",
|
||||
subtitle = T(_("Query: %1"), FileSearcher.search_string),
|
||||
title_bar_left_icon = "appbar.menu",
|
||||
onLeftButtonTap = function() self:setSelectMode() end,
|
||||
onMenuSelect = self.onMenuSelect,
|
||||
onMenuHold = self.onMenuHold,
|
||||
handle_hold_on_hold_release = true,
|
||||
ui = self.ui,
|
||||
_manager = self,
|
||||
_recreate_func = function() self:onShowSearchResults(not_cached) end,
|
||||
}
|
||||
self.search_menu.close_callback = function()
|
||||
self.selected_files = nil
|
||||
UIManager:close(self.search_menu)
|
||||
if self.ui.file_chooser then
|
||||
self.ui.file_chooser:refreshPath()
|
||||
self.booklist_menu.close_callback = function()
|
||||
self:refreshFileManager()
|
||||
UIManager:close(self.booklist_menu)
|
||||
self.booklist_menu = nil
|
||||
if self.selected_files then
|
||||
self.selected_files = nil
|
||||
for _, item in ipairs(FileSearcher.search_results) do
|
||||
item.dim = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
self:updateMenu(FileSearcher.search_results)
|
||||
UIManager:show(self.search_menu)
|
||||
self:updateItemTable(FileSearcher.search_results)
|
||||
UIManager:show(self.booklist_menu)
|
||||
if not_cached and self.no_metadata_count ~= 0 then
|
||||
self:showSearchResultsMessage()
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function FileSearcher:updateMenu(item_table)
|
||||
item_table = item_table or self.search_menu.item_table
|
||||
self.search_menu:switchItemTable(T(_("Search results (%1)"), #item_table), item_table, -1)
|
||||
function FileSearcher:updateItemTable(item_table)
|
||||
if item_table == nil then
|
||||
item_table = self.booklist_menu.item_table
|
||||
end
|
||||
local title = T(_("Search results (%1)"), #item_table)
|
||||
self.booklist_menu:switchItemTable(title, item_table, -1)
|
||||
end
|
||||
|
||||
function FileSearcher:onMenuSelect(item)
|
||||
@@ -293,41 +340,90 @@ function FileSearcher:onMenuSelect(item)
|
||||
if item.is_file then
|
||||
item.dim = not item.dim and true or nil
|
||||
self._manager.selected_files[item.path] = item.dim
|
||||
self._manager:updateMenu()
|
||||
self._manager:updateItemTable()
|
||||
end
|
||||
else
|
||||
self._manager:showFileDialog(item)
|
||||
if item.is_file then
|
||||
if DocumentRegistry:hasProvider(item.path, nil, true) then
|
||||
self.close_callback()
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
FileManager.openFile(self.ui, item.path)
|
||||
end
|
||||
else
|
||||
self._manager.update_files = nil
|
||||
self.close_callback()
|
||||
if self.ui.file_chooser then
|
||||
local pathname = util.splitFilePathName(item.path)
|
||||
self.ui.file_chooser:changeToPath(pathname, item.path)
|
||||
else -- called from Reader
|
||||
self.ui:onClose()
|
||||
self.ui:showFileManager(item.path)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function FileSearcher:showFileDialog(item)
|
||||
function FileSearcher:onMenuHold(item)
|
||||
if self._manager.selected_files or lfs.attributes(item.path) == nil then return true end
|
||||
local file = item.path
|
||||
local bookinfo, dialog
|
||||
local is_file = item.is_file or false
|
||||
self.file_dialog = nil
|
||||
|
||||
local function close_dialog_callback()
|
||||
UIManager:close(dialog)
|
||||
UIManager:close(self.file_dialog)
|
||||
end
|
||||
local function close_dialog_menu_callback()
|
||||
UIManager:close(dialog)
|
||||
self.search_menu.close_callback()
|
||||
UIManager:close(self.file_dialog)
|
||||
self.close_callback()
|
||||
end
|
||||
local function update_item_callback()
|
||||
item.mandatory = FileChooser:getMenuItemMandatory(item, FileChooser:getCollate())
|
||||
self:updateMenu()
|
||||
local function close_dialog_update_callback()
|
||||
UIManager:close(self.file_dialog)
|
||||
self._manager:updateItemTable()
|
||||
self._manager.files_updated = true
|
||||
end
|
||||
local function close_menu_refresh_callback()
|
||||
self._manager.files_updated = true
|
||||
self.close_callback()
|
||||
end
|
||||
|
||||
local buttons = {}
|
||||
if item.is_file then
|
||||
local is_currently_opened = self.ui.document and self.ui.document.file == file
|
||||
local book_props, is_currently_opened
|
||||
if is_file then
|
||||
local has_provider = DocumentRegistry:hasProvider(file)
|
||||
local been_opened = BookList.hasBookBeenOpened(file)
|
||||
local doc_settings_or_file = is_currently_opened and self.ui.doc_settings
|
||||
or (been_opened and BookList.getDocSettings(file) or file)
|
||||
local doc_settings_or_file = file
|
||||
if has_provider or been_opened then
|
||||
bookinfo = self.ui.bookinfo:getDocProps(file, nil, true)
|
||||
table.insert(buttons, filemanagerutil.genStatusButtonsRow(doc_settings_or_file, close_dialog_callback))
|
||||
book_props = self.ui.coverbrowser and self.ui.coverbrowser:getBookInfo(file)
|
||||
is_currently_opened = file == (self.ui.document and self.ui.document.file)
|
||||
if is_currently_opened then
|
||||
doc_settings_or_file = self.ui.doc_settings
|
||||
if not book_props then
|
||||
book_props = self.ui.doc_props
|
||||
book_props.has_cover = true
|
||||
end
|
||||
elseif been_opened then
|
||||
doc_settings_or_file = BookList.getDocSettings(file)
|
||||
if not book_props then
|
||||
local props = doc_settings_or_file:readSetting("doc_props")
|
||||
book_props = self.ui.bookinfo.extendProps(props, file)
|
||||
book_props.has_cover = true
|
||||
end
|
||||
end
|
||||
table.insert(buttons, filemanagerutil.genStatusButtonsRow(doc_settings_or_file, close_dialog_update_callback))
|
||||
table.insert(buttons, {}) -- separator
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genResetSettingsButton(doc_settings_or_file, close_dialog_callback, is_currently_opened),
|
||||
self.ui.collections:genAddToCollectionButton(file, close_dialog_callback, update_item_callback),
|
||||
filemanagerutil.genResetSettingsButton(doc_settings_or_file, close_dialog_update_callback, is_currently_opened),
|
||||
self._manager.ui.collections:genAddToCollectionButton(file, close_dialog_callback, close_dialog_update_callback),
|
||||
})
|
||||
end
|
||||
if Device:canExecuteScript(file) then
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genExecuteScriptButton(file, close_dialog_menu_callback)
|
||||
})
|
||||
end
|
||||
if FileManagerConverter:isSupported(file) then
|
||||
table.insert(buttons, {
|
||||
FileManagerConverter:genConvertButton(file, close_dialog_callback, close_menu_refresh_callback)
|
||||
})
|
||||
end
|
||||
table.insert(buttons, {
|
||||
@@ -336,65 +432,60 @@ function FileSearcher:showFileDialog(item)
|
||||
enabled = not is_currently_opened,
|
||||
callback = function()
|
||||
local function post_delete_callback()
|
||||
UIManager:close(dialog)
|
||||
table.remove(FileSearcher.search_results, item.idx)
|
||||
table.remove(self.search_menu.item_table, item.idx)
|
||||
self:updateMenu()
|
||||
table.remove(self.item_table, item.idx)
|
||||
close_dialog_update_callback()
|
||||
end
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
FileManager:showDeleteFileDialog(file, post_delete_callback)
|
||||
end,
|
||||
},
|
||||
filemanagerutil.genBookInformationButton(doc_settings_or_file, bookinfo, close_dialog_callback),
|
||||
{
|
||||
text = _("Open with…"),
|
||||
callback = function()
|
||||
close_dialog_callback()
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
FileManager.showOpenWithDialog(self.ui, file)
|
||||
end,
|
||||
},
|
||||
})
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genShowFolderButton(file, close_dialog_menu_callback),
|
||||
filemanagerutil.genBookInformationButton(doc_settings_or_file, book_props, close_dialog_callback),
|
||||
})
|
||||
if has_provider then
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genBookCoverButton(file, book_props, close_dialog_callback),
|
||||
filemanagerutil.genBookDescriptionButton(file, book_props, close_dialog_callback),
|
||||
})
|
||||
end
|
||||
else -- folder
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genShowFolderButton(file, close_dialog_menu_callback),
|
||||
})
|
||||
end
|
||||
table.insert(buttons, {
|
||||
filemanagerutil.genShowFolderButton(file, close_dialog_menu_callback),
|
||||
{
|
||||
text = _("Open"),
|
||||
enabled = DocumentRegistry:hasProvider(file, nil, true), -- allow auxiliary providers
|
||||
callback = function()
|
||||
close_dialog_menu_callback()
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
FileManager.openFile(self.ui, file)
|
||||
end,
|
||||
},
|
||||
})
|
||||
local title = file
|
||||
if bookinfo then
|
||||
if bookinfo.title then
|
||||
title = title .. "\n\n" .. T(_("Title: %1"), bookinfo.title)
|
||||
end
|
||||
if bookinfo.authors then
|
||||
title = title .. "\n" .. T(_("Authors: %1"), bookinfo.authors:gsub("[\n\t]", "|"))
|
||||
|
||||
if self._manager.file_dialog_added_buttons ~= nil then
|
||||
for _, row_func in ipairs(self._manager.file_dialog_added_buttons) do
|
||||
local row = row_func(file, true, book_props)
|
||||
if row ~= nil then
|
||||
table.insert(buttons, row)
|
||||
end
|
||||
end
|
||||
end
|
||||
dialog = ButtonDialog:new{
|
||||
title = title .. "\n",
|
||||
|
||||
self.file_dialog = ButtonDialog:new{
|
||||
title = is_file and BD.filename(file) or BD.directory(file),
|
||||
title_align = "center",
|
||||
buttons = buttons,
|
||||
}
|
||||
UIManager:show(dialog)
|
||||
UIManager:show(self.file_dialog)
|
||||
return true
|
||||
end
|
||||
|
||||
function FileSearcher:onMenuHold(item)
|
||||
if self._manager.selected_files or lfs.attributes(item.path) == nil then return true end
|
||||
if item.is_file then
|
||||
if DocumentRegistry:hasProvider(item.path, nil, true) then
|
||||
self.close_callback()
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
FileManager.openFile(self.ui, item.path)
|
||||
end
|
||||
else
|
||||
self.close_callback()
|
||||
if self.ui.file_chooser then
|
||||
local pathname = util.splitFilePathName(item.path)
|
||||
self.ui.file_chooser:changeToPath(pathname, item.path)
|
||||
else -- called from Reader
|
||||
self.ui:onClose()
|
||||
self.ui:showFileManager(item.path)
|
||||
end
|
||||
end
|
||||
return true
|
||||
function FileSearcher.getMenuInstance()
|
||||
local ui = require("apps/filemanager/filemanager").instance or require("apps/reader/readerui").instance
|
||||
return ui.filesearcher.booklist_menu
|
||||
end
|
||||
|
||||
function FileSearcher:setSelectMode()
|
||||
@@ -402,12 +493,12 @@ function FileSearcher:setSelectMode()
|
||||
self:showSelectModeDialog()
|
||||
else
|
||||
self.selected_files = {}
|
||||
self.search_menu:setTitleBarLeftIcon("check")
|
||||
self.booklist_menu:setTitleBarLeftIcon("check")
|
||||
end
|
||||
end
|
||||
|
||||
function FileSearcher:showSelectModeDialog()
|
||||
local item_table = self.search_menu.item_table
|
||||
local item_table = self.booklist_menu.item_table
|
||||
local select_count = util.tableSize(self.selected_files)
|
||||
local actions_enabled = select_count > 0
|
||||
local title = actions_enabled and T(N_("1 file selected", "%1 files selected", select_count), select_count)
|
||||
@@ -426,7 +517,7 @@ function FileSearcher:showSelectModeDialog()
|
||||
for _, item in ipairs(item_table) do
|
||||
item.dim = nil
|
||||
end
|
||||
self:updateMenu()
|
||||
self:updateItemTable()
|
||||
end,
|
||||
},
|
||||
{
|
||||
@@ -439,7 +530,7 @@ function FileSearcher:showSelectModeDialog()
|
||||
self.selected_files[item.path] = true
|
||||
end
|
||||
end
|
||||
self:updateMenu()
|
||||
self:updateItemTable()
|
||||
end,
|
||||
},
|
||||
},
|
||||
@@ -449,13 +540,13 @@ function FileSearcher:showSelectModeDialog()
|
||||
callback = function()
|
||||
UIManager:close(select_dialog)
|
||||
self.selected_files = nil
|
||||
self.search_menu:setTitleBarLeftIcon("appbar.menu")
|
||||
self.booklist_menu:setTitleBarLeftIcon("appbar.menu")
|
||||
if actions_enabled then
|
||||
for _, item in ipairs(item_table) do
|
||||
item.dim = nil
|
||||
end
|
||||
end
|
||||
self:updateMenu()
|
||||
self:updateItemTable()
|
||||
end,
|
||||
},
|
||||
{
|
||||
@@ -464,14 +555,15 @@ function FileSearcher:showSelectModeDialog()
|
||||
callback = function()
|
||||
UIManager:close(select_dialog)
|
||||
local selected_files = self.selected_files
|
||||
self.search_menu.close_callback()
|
||||
self.files_updated = nil -- refresh fm later
|
||||
self.booklist_menu.close_callback()
|
||||
if self.ui.file_chooser then
|
||||
self.ui.selected_files = selected_files
|
||||
self.ui.title_bar:setRightIcon("check")
|
||||
self.ui.file_chooser:refreshPath()
|
||||
else -- called from Reader
|
||||
self.ui:onClose()
|
||||
self.ui:showFileManager(self.path .. "/", selected_files)
|
||||
self.ui:showFileManager(FileSearcher.search_path .. "/", selected_files)
|
||||
end
|
||||
end,
|
||||
},
|
||||
@@ -485,4 +577,16 @@ function FileSearcher:showSelectModeDialog()
|
||||
UIManager:show(select_dialog)
|
||||
end
|
||||
|
||||
function FileSearcher:onBookMetadataChanged()
|
||||
if self.booklist_menu then
|
||||
self.booklist_menu:updateItems()
|
||||
end
|
||||
end
|
||||
|
||||
function FileSearcher:onCloseWidget()
|
||||
if self.booklist_menu then
|
||||
self.booklist_menu.close_callback()
|
||||
end
|
||||
end
|
||||
|
||||
return FileSearcher
|
||||
|
||||
@@ -14,7 +14,7 @@ local _ = require("gettext")
|
||||
local T = require("ffi/util").template
|
||||
|
||||
local FileManagerHistory = WidgetContainer:extend{
|
||||
hist_menu_title = _("History"),
|
||||
title = _("History"),
|
||||
}
|
||||
|
||||
function FileManagerHistory:init()
|
||||
@@ -23,7 +23,7 @@ end
|
||||
|
||||
function FileManagerHistory:addToMainMenu(menu_items)
|
||||
menu_items.history = {
|
||||
text = self.hist_menu_title,
|
||||
text = self.title,
|
||||
callback = function()
|
||||
self:onShowHist()
|
||||
end,
|
||||
@@ -48,6 +48,52 @@ function FileManagerHistory:fetchStatuses(count)
|
||||
self.statuses_fetched = true
|
||||
end
|
||||
|
||||
function FileManagerHistory:refreshFileManager()
|
||||
if self.files_updated then
|
||||
if self.ui.file_chooser then
|
||||
self.ui.file_chooser:refreshPath()
|
||||
end
|
||||
self.files_updated = nil
|
||||
end
|
||||
end
|
||||
|
||||
function FileManagerHistory:onShowHist(search_info)
|
||||
-- This may be hijacked by CoverBrowser plugin and needs to be known as booklist_menu.
|
||||
self.booklist_menu = BookList:new{
|
||||
name = "history",
|
||||
title_bar_left_icon = "appbar.menu",
|
||||
onLeftButtonTap = function() self:showHistDialog() end,
|
||||
onMenuChoice = self.onMenuChoice,
|
||||
onMenuHold = self.onMenuHold,
|
||||
ui = self.ui,
|
||||
_manager = self,
|
||||
_recreate_func = function() self:onShowHist(search_info) end,
|
||||
}
|
||||
self.booklist_menu.close_callback = function()
|
||||
self:refreshFileManager()
|
||||
UIManager:close(self.booklist_menu)
|
||||
self.booklist_menu = nil
|
||||
self.statuses_fetched = nil
|
||||
G_reader_settings:saveSetting("history_filter", self.filter)
|
||||
end
|
||||
|
||||
if search_info then
|
||||
self.search_string = search_info.search_string
|
||||
self.case_sensitive = search_info.case_sensitive
|
||||
else
|
||||
self.search_string = nil
|
||||
self.selected_collections = nil
|
||||
end
|
||||
self.filter = G_reader_settings:readSetting("history_filter", "all")
|
||||
self.is_frozen = G_reader_settings:isTrue("history_freeze_finished_books")
|
||||
if self.filter ~= "all" or self.is_frozen then
|
||||
self:fetchStatuses(false)
|
||||
end
|
||||
self:updateItemTable()
|
||||
UIManager:show(self.booklist_menu)
|
||||
return true
|
||||
end
|
||||
|
||||
function FileManagerHistory:updateItemTable()
|
||||
self.count = { all = #require("readhistory").hist,
|
||||
reading = 0, abandoned = 0, complete = 0, deleted = 0, new = 0, }
|
||||
@@ -67,26 +113,8 @@ function FileManagerHistory:updateItemTable()
|
||||
self.count[v.status] = self.count[v.status] + 1
|
||||
end
|
||||
end
|
||||
local title = T("%1 (%2)", self.hist_menu_title, #item_table)
|
||||
local subtitle = ""
|
||||
if self.search_string then
|
||||
subtitle = T(_("Query: %1"), self.search_string)
|
||||
elseif self.selected_collections then
|
||||
local collections = {}
|
||||
for collection in pairs(self.selected_collections) do
|
||||
table.insert(collections, self.ui.collections:getCollectionTitle(collection))
|
||||
end
|
||||
if #collections == 1 then
|
||||
collections = collections[1]
|
||||
else
|
||||
table.sort(collections)
|
||||
collections = table.concat(collections, ", ")
|
||||
end
|
||||
subtitle = T(_("Collections: %1"), collections)
|
||||
elseif self.filter ~= "all" then
|
||||
subtitle = BookList.getBookStatusString(self.filter, true)
|
||||
end
|
||||
self.hist_menu:switchItemTable(title, item_table, -1, nil, subtitle)
|
||||
local title, subtitle = self:getBookListTitle(item_table)
|
||||
self.booklist_menu:switchItemTable(title, item_table, -1, nil, subtitle)
|
||||
end
|
||||
|
||||
function FileManagerHistory:isItemMatch(item)
|
||||
@@ -109,6 +137,29 @@ function FileManagerHistory:isItemMatch(item)
|
||||
return self.filter == "all" or item.status == self.filter
|
||||
end
|
||||
|
||||
function FileManagerHistory:getBookListTitle(item_table)
|
||||
local title = T(_("History (%1)"), #item_table)
|
||||
local subtitle = ""
|
||||
if self.search_string then
|
||||
subtitle = T(_("Query: %1"), self.search_string)
|
||||
elseif self.selected_collections then
|
||||
local collections = {}
|
||||
for collection in pairs(self.selected_collections) do
|
||||
table.insert(collections, self.ui.collections:getCollectionTitle(collection))
|
||||
end
|
||||
if #collections == 1 then
|
||||
collections = collections[1]
|
||||
else
|
||||
table.sort(collections)
|
||||
collections = table.concat(collections, ", ")
|
||||
end
|
||||
subtitle = T(_("Collections: %1"), collections)
|
||||
elseif self.filter ~= "all" then
|
||||
subtitle = BookList.getBookStatusString(self.filter, true)
|
||||
end
|
||||
return title, subtitle
|
||||
end
|
||||
|
||||
function FileManagerHistory:onSetDimensions(dimen)
|
||||
self.dimen = dimen
|
||||
end
|
||||
@@ -133,7 +184,7 @@ function FileManagerHistory:onMenuHold(item)
|
||||
end
|
||||
local function close_dialog_menu_callback()
|
||||
UIManager:close(self.file_dialog)
|
||||
self._manager.hist_menu.close_callback()
|
||||
self.close_callback()
|
||||
end
|
||||
local function close_dialog_update_callback()
|
||||
UIManager:close(self.file_dialog)
|
||||
@@ -230,47 +281,7 @@ end
|
||||
|
||||
function FileManagerHistory.getMenuInstance()
|
||||
local ui = require("apps/filemanager/filemanager").instance or require("apps/reader/readerui").instance
|
||||
return ui.history.hist_menu
|
||||
end
|
||||
|
||||
function FileManagerHistory:onShowHist(search_info)
|
||||
self.hist_menu = BookList:new{
|
||||
title_bar_left_icon = "appbar.menu",
|
||||
onLeftButtonTap = function() self:showHistDialog() end,
|
||||
onMenuChoice = self.onMenuChoice,
|
||||
onMenuHold = self.onMenuHold,
|
||||
ui = self.ui,
|
||||
_manager = self,
|
||||
_recreate_func = function() self:onShowHist(search_info) end,
|
||||
}
|
||||
self.hist_menu.close_callback = function()
|
||||
if self.files_updated then -- refresh Filemanager list of files
|
||||
if self.ui.file_chooser then
|
||||
self.ui.file_chooser:refreshPath()
|
||||
end
|
||||
self.files_updated = nil
|
||||
end
|
||||
self.statuses_fetched = nil
|
||||
UIManager:close(self.hist_menu)
|
||||
self.hist_menu = nil
|
||||
G_reader_settings:saveSetting("history_filter", self.filter)
|
||||
end
|
||||
|
||||
if search_info then
|
||||
self.search_string = search_info.search_string
|
||||
self.case_sensitive = search_info.case_sensitive
|
||||
else
|
||||
self.search_string = nil
|
||||
self.selected_collections = nil
|
||||
end
|
||||
self.filter = G_reader_settings:readSetting("history_filter", "all")
|
||||
self.is_frozen = G_reader_settings:isTrue("history_freeze_finished_books")
|
||||
if self.filter ~= "all" or self.is_frozen then
|
||||
self:fetchStatuses(false)
|
||||
end
|
||||
self:updateItemTable()
|
||||
UIManager:show(self.hist_menu, "flashui")
|
||||
return true
|
||||
return ui.history.booklist_menu
|
||||
end
|
||||
|
||||
function FileManagerHistory:showHistDialog()
|
||||
@@ -376,7 +387,7 @@ function FileManagerHistory:onSearchHistory()
|
||||
if search_string ~= "" then
|
||||
UIManager:close(search_dialog)
|
||||
self.search_string = self.case_sensitive and search_string or search_string:lower()
|
||||
if self.hist_menu then -- called from History
|
||||
if self.booklist_menu then -- called from History
|
||||
self:updateItemTable()
|
||||
else -- called by Dispatcher
|
||||
local search_info = {
|
||||
@@ -406,8 +417,8 @@ function FileManagerHistory:onSearchHistory()
|
||||
end
|
||||
|
||||
function FileManagerHistory:onBookMetadataChanged()
|
||||
if self.hist_menu then
|
||||
self.hist_menu:updateItems()
|
||||
if self.booklist_menu then
|
||||
self.booklist_menu:updateItems()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -388,6 +388,7 @@ To:
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:flipNilOrTrue("collection_show_mark")
|
||||
self.ui.collections.show_mark = G_reader_settings:nilOrTrue("collection_show_mark")
|
||||
FileChooser:refreshPath()
|
||||
end,
|
||||
},
|
||||
@@ -805,28 +806,6 @@ To:
|
||||
end,
|
||||
}
|
||||
|
||||
self.menu_items.file_search = {
|
||||
-- @translators Search for files by name.
|
||||
text = _("File search"),
|
||||
help_text = _([[Search a book by filename in the current or home folder and its subfolders.
|
||||
|
||||
Wildcards for one '?' or more '*' characters can be used.
|
||||
A search for '*' will show all files.
|
||||
|
||||
The sorting order is the same as in filemanager.
|
||||
|
||||
Tap a book in the search results to open it.]]),
|
||||
callback = function()
|
||||
self.ui.filesearcher:onShowFileSearch()
|
||||
end,
|
||||
}
|
||||
self.menu_items.file_search_results = {
|
||||
text = _("Last file search results"),
|
||||
callback = function()
|
||||
self.ui.filesearcher:onShowSearchResults()
|
||||
end,
|
||||
}
|
||||
|
||||
-- main menu tab
|
||||
self.menu_items.open_last_document = {
|
||||
text_func = function()
|
||||
|
||||
@@ -20,13 +20,22 @@ local _FileChooser__recalculateDimen_orig = FileChooser._recalculateDimen
|
||||
local _FileChooser_updateItems_orig = FileChooser.updateItems
|
||||
local _FileChooser_onCloseWidget_orig = FileChooser.onCloseWidget
|
||||
|
||||
local FileManagerHistory = require("apps/filemanager/filemanagerhistory")
|
||||
local _FileManagerHistory_updateItemTable_orig = FileManagerHistory.updateItemTable
|
||||
|
||||
local FileManagerCollection = require("apps/filemanager/filemanagercollection")
|
||||
local _FileManagerCollection_updateItemTable_orig = FileManagerCollection.updateItemTable
|
||||
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
local FileManagerHistory = require("apps/filemanager/filemanagerhistory")
|
||||
local FileManagerCollection = require("apps/filemanager/filemanagercollection")
|
||||
local FileManagerFileSearcher = require("apps/filemanager/filemanagerfilesearcher")
|
||||
|
||||
local _modified_widgets = {
|
||||
filemanager = FileManager,
|
||||
history = FileManagerHistory,
|
||||
collections = FileManagerCollection,
|
||||
filesearcher = FileManagerFileSearcher,
|
||||
}
|
||||
local _updateItemTable_orig_funcs = {
|
||||
history = FileManagerHistory.updateItemTable,
|
||||
collections = FileManagerCollection.updateItemTable,
|
||||
filesearcher = FileManagerFileSearcher.updateItemTable,
|
||||
}
|
||||
|
||||
-- Available display modes
|
||||
local DISPLAY_MODES = {
|
||||
@@ -37,12 +46,19 @@ local DISPLAY_MODES = {
|
||||
list_only_meta = true, -- metadata with no image
|
||||
list_image_filename = true, -- image with filename (no metadata)
|
||||
}
|
||||
local display_mode_db_names = {
|
||||
filemanager = "filemanager_display_mode",
|
||||
history = "history_display_mode",
|
||||
collections = "collection_display_mode",
|
||||
}
|
||||
|
||||
-- Store some states as locals, to be permanent across instantiations
|
||||
local init_done = false
|
||||
local filemanager_display_mode = false -- not initialized yet
|
||||
local history_display_mode = false -- not initialized yet
|
||||
local collection_display_mode = false -- not initialized yet
|
||||
local curr_display_modes = {
|
||||
filemanager = false, -- not initialized yet
|
||||
history = false, -- not initialized yet
|
||||
collections = false, -- not initialized yet
|
||||
}
|
||||
local series_mode = nil -- defaults to not display series
|
||||
|
||||
local CoverBrowser = WidgetContainer:extend{
|
||||
@@ -80,8 +96,8 @@ function CoverBrowser:init()
|
||||
end
|
||||
|
||||
self:setupFileManagerDisplayMode(BookInfoManager:getSetting("filemanager_display_mode"))
|
||||
self:setupHistoryDisplayMode(BookInfoManager:getSetting("history_display_mode"))
|
||||
self:setupCollectionDisplayMode(BookInfoManager:getSetting("collection_display_mode"))
|
||||
CoverBrowser.setupWidgetDisplayMode("history")
|
||||
CoverBrowser.setupWidgetDisplayMode("collections")
|
||||
series_mode = BookInfoManager:getSetting("series_mode")
|
||||
init_done = true
|
||||
BookInfoManager:closeDbConnection() -- will be re-opened if needed
|
||||
@@ -94,7 +110,7 @@ function CoverBrowser:addToMainMenu(menu_items)
|
||||
sub_item_table[i] = {
|
||||
text = text,
|
||||
checked_func = function()
|
||||
return mode == filemanager_display_mode
|
||||
return mode == curr_display_modes["filemanager"]
|
||||
end,
|
||||
callback = function()
|
||||
self:setDisplayMode(mode)
|
||||
@@ -103,19 +119,19 @@ function CoverBrowser:addToMainMenu(menu_items)
|
||||
history_sub_item_table[i] = {
|
||||
text = text,
|
||||
checked_func = function()
|
||||
return mode == history_display_mode
|
||||
return mode == curr_display_modes["history"]
|
||||
end,
|
||||
callback = function()
|
||||
self:setupHistoryDisplayMode(mode)
|
||||
CoverBrowser.setupWidgetDisplayMode("history", mode)
|
||||
end,
|
||||
}
|
||||
collection_sub_item_table[i] = {
|
||||
text = text,
|
||||
checked_func = function()
|
||||
return mode == collection_display_mode
|
||||
return mode == curr_display_modes["collections"]
|
||||
end,
|
||||
callback = function()
|
||||
self:setupCollectionDisplayMode(mode)
|
||||
CoverBrowser.setupWidgetDisplayMode("collections", mode)
|
||||
end,
|
||||
}
|
||||
end
|
||||
@@ -127,8 +143,8 @@ function CoverBrowser:addToMainMenu(menu_items)
|
||||
end,
|
||||
callback = function()
|
||||
if BookInfoManager:toggleSetting("unified_display_mode") then
|
||||
self:setupHistoryDisplayMode(filemanager_display_mode)
|
||||
self:setupCollectionDisplayMode(filemanager_display_mode)
|
||||
CoverBrowser.setupWidgetDisplayMode("history", curr_display_modes["filemanager"])
|
||||
CoverBrowser.setupWidgetDisplayMode("collections", curr_display_modes["filemanager"])
|
||||
end
|
||||
end,
|
||||
})
|
||||
@@ -487,7 +503,7 @@ function CoverBrowser:addToMainMenu(menu_items)
|
||||
end
|
||||
|
||||
function CoverBrowser:genExtractBookInfoButton(close_dialog_callback) -- for FileManager Plus dialog
|
||||
return filemanager_display_mode and {
|
||||
return curr_display_modes["filemanager"] and {
|
||||
{
|
||||
text = _("Extract and cache book information"),
|
||||
callback = function()
|
||||
@@ -515,7 +531,8 @@ function CoverBrowser.initGrid(menu, display_mode)
|
||||
menu.display_mode_type = display_mode and display_mode:gsub("_.*", "") -- "mosaic" or "list"
|
||||
end
|
||||
|
||||
function CoverBrowser.addFileDialogButtons(widget)
|
||||
function CoverBrowser.addFileDialogButtons(widget_id)
|
||||
local widget = _modified_widgets[widget_id]
|
||||
FileManager.addFileDialogButtons(widget, "coverbrowser_1", function(file, is_file, bookinfo)
|
||||
if is_file then
|
||||
return bookinfo and {
|
||||
@@ -526,6 +543,7 @@ function CoverBrowser.addFileDialogButtons(widget)
|
||||
BookInfoManager:setBookInfoProperties(file, {
|
||||
["ignore_cover"] = not bookinfo.ignore_cover and 'Y' or false,
|
||||
})
|
||||
widget.files_updated = true
|
||||
local menu = widget.getMenuInstance()
|
||||
UIManager:close(menu.file_dialog)
|
||||
menu:updateItems(1, true)
|
||||
@@ -538,6 +556,7 @@ function CoverBrowser.addFileDialogButtons(widget)
|
||||
BookInfoManager:setBookInfoProperties(file, {
|
||||
["ignore_meta"] = not bookinfo.ignore_meta and 'Y' or false,
|
||||
})
|
||||
widget.files_updated = true
|
||||
local menu = widget.getMenuInstance()
|
||||
UIManager:close(menu.file_dialog)
|
||||
menu:updateItems(1, true)
|
||||
@@ -552,9 +571,10 @@ function CoverBrowser.addFileDialogButtons(widget)
|
||||
{ -- Allow a new extraction (multiple interruptions, book replaced)...
|
||||
text = _("Refresh cached book information"),
|
||||
callback = function()
|
||||
BookInfoManager:deleteBookInfo(file)
|
||||
widget.files_updated = true
|
||||
local menu = widget.getMenuInstance()
|
||||
menu.resetBookInfoCache(file)
|
||||
BookInfoManager:deleteBookInfo(file)
|
||||
UIManager:close(menu.file_dialog)
|
||||
menu:updateItems(1, true)
|
||||
end,
|
||||
@@ -564,7 +584,8 @@ function CoverBrowser.addFileDialogButtons(widget)
|
||||
end)
|
||||
end
|
||||
|
||||
function CoverBrowser.removeFileDialogButtons(widget)
|
||||
function CoverBrowser.removeFileDialogButtons(widget_id)
|
||||
local widget = _modified_widgets[widget_id]
|
||||
FileManager.removeFileDialogButtons(widget, "coverbrowser_2")
|
||||
FileManager.removeFileDialogButtons(widget, "coverbrowser_1")
|
||||
end
|
||||
@@ -580,8 +601,8 @@ end
|
||||
function CoverBrowser:setDisplayMode(display_mode)
|
||||
self:setupFileManagerDisplayMode(display_mode)
|
||||
if BookInfoManager:getSetting("unified_display_mode") then
|
||||
self:setupHistoryDisplayMode(display_mode)
|
||||
self:setupCollectionDisplayMode(display_mode)
|
||||
CoverBrowser.setupWidgetDisplayMode("history", display_mode)
|
||||
CoverBrowser.setupWidgetDisplayMode("collections", display_mode)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -589,14 +610,14 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
if not DISPLAY_MODES[display_mode] then
|
||||
display_mode = nil -- unknown mode, fallback to classic
|
||||
end
|
||||
if init_done and display_mode == filemanager_display_mode then -- no change
|
||||
if init_done and display_mode == curr_display_modes["filemanager"] then -- no change
|
||||
return
|
||||
end
|
||||
if init_done then -- save new mode in db
|
||||
BookInfoManager:saveSetting("filemanager_display_mode", display_mode)
|
||||
BookInfoManager:saveSetting(display_mode_db_names["filemanager"], display_mode)
|
||||
end
|
||||
-- remember current mode in module variable
|
||||
filemanager_display_mode = display_mode
|
||||
curr_display_modes["filemanager"] = display_mode
|
||||
logger.dbg("CoverBrowser: setting FileManager display mode to:", display_mode or "classic")
|
||||
|
||||
-- init Mosaic and List grid dimensions (in Classic mode used in the settings menu)
|
||||
@@ -607,11 +628,13 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
end
|
||||
|
||||
if not display_mode then -- classic mode
|
||||
CoverBrowser.removeFileDialogButtons("filesearcher")
|
||||
_modified_widgets["filesearcher"].updateItemTable = _updateItemTable_orig_funcs["filesearcher"]
|
||||
-- Put back original methods
|
||||
FileChooser.updateItems = _FileChooser_updateItems_orig
|
||||
FileChooser.onCloseWidget = _FileChooser_onCloseWidget_orig
|
||||
FileChooser._recalculateDimen = _FileChooser__recalculateDimen_orig
|
||||
CoverBrowser.removeFileDialogButtons(FileManager)
|
||||
CoverBrowser.removeFileDialogButtons("filemanager")
|
||||
-- Also clean-up what we added, even if it does not bother original code
|
||||
FileChooser._updateItemsBuildUI = nil
|
||||
FileChooser._do_cover_images = nil
|
||||
@@ -622,12 +645,14 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
return
|
||||
end
|
||||
|
||||
CoverBrowser.addFileDialogButtons("filesearcher")
|
||||
_modified_widgets["filesearcher"].updateItemTable = CoverBrowser.getUpdateItemTableFunc(display_mode)
|
||||
-- In both mosaic and list modes, replace original methods with those from
|
||||
-- our generic CoverMenu
|
||||
local CoverMenu = require("covermenu")
|
||||
FileChooser.updateItems = CoverMenu.updateItems
|
||||
FileChooser.onCloseWidget = CoverMenu.onCloseWidget
|
||||
CoverBrowser.addFileDialogButtons(FileManager)
|
||||
CoverBrowser.addFileDialogButtons("filemanager")
|
||||
if FileChooser.display_mode_type == "mosaic" then
|
||||
-- Replace some other original methods with those from our MosaicMenu
|
||||
local MosaicMenu = require("mosaicmenu")
|
||||
@@ -635,7 +660,6 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
FileChooser._updateItemsBuildUI = MosaicMenu._updateItemsBuildUI
|
||||
-- Set MosaicMenu behaviour:
|
||||
FileChooser._do_cover_images = display_mode ~= "mosaic_text"
|
||||
FileChooser._do_hint_opened = true -- dogear at bottom
|
||||
-- Don't have "../" centered in empty directories
|
||||
FileChooser._do_center_partial_rows = false
|
||||
elseif FileChooser.display_mode_type == "list" then
|
||||
@@ -646,8 +670,8 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
-- Set ListMenu behaviour:
|
||||
FileChooser._do_cover_images = display_mode ~= "list_only_meta"
|
||||
FileChooser._do_filename_only = display_mode == "list_image_filename"
|
||||
FileChooser._do_hint_opened = true -- dogear at bottom
|
||||
end
|
||||
FileChooser._do_hint_opened = true -- dogear at bottom
|
||||
|
||||
if init_done then
|
||||
self:refreshFileManagerInstance()
|
||||
@@ -661,157 +685,84 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
end
|
||||
end
|
||||
|
||||
local function _FileManagerHistory_updateItemTable(self, ...)
|
||||
-- 'self' here is the single FileManagerHistory instance
|
||||
-- FileManagerHistory has just created a new instance of Menu as 'hist_menu'
|
||||
-- at each display of History. Soon after instantiation, this method
|
||||
-- is called. The first time it is called, we replace some methods.
|
||||
local display_mode = self.display_mode
|
||||
local hist_menu = self.hist_menu
|
||||
|
||||
if not hist_menu._coverbrowser_overridden then
|
||||
hist_menu._coverbrowser_overridden = true
|
||||
|
||||
-- In both mosaic and list modes, replace original methods with those from
|
||||
-- our generic CoverMenu
|
||||
local CoverMenu = require("covermenu")
|
||||
hist_menu.updateItems = CoverMenu.updateItems
|
||||
hist_menu.onCloseWidget = CoverMenu.onCloseWidget
|
||||
|
||||
CoverBrowser.initGrid(hist_menu, display_mode)
|
||||
if hist_menu.display_mode_type == "mosaic" then
|
||||
-- Replace some other original methods with those from our MosaicMenu
|
||||
local MosaicMenu = require("mosaicmenu")
|
||||
hist_menu._recalculateDimen = MosaicMenu._recalculateDimen
|
||||
hist_menu._updateItemsBuildUI = MosaicMenu._updateItemsBuildUI
|
||||
-- Set MosaicMenu behaviour:
|
||||
hist_menu._do_cover_images = display_mode ~= "mosaic_text"
|
||||
hist_menu._do_center_partial_rows = true -- nicer looking when few elements
|
||||
|
||||
elseif hist_menu.display_mode_type == "list" then
|
||||
-- Replace some other original methods with those from our ListMenu
|
||||
local ListMenu = require("listmenu")
|
||||
hist_menu._recalculateDimen = ListMenu._recalculateDimen
|
||||
hist_menu._updateItemsBuildUI = ListMenu._updateItemsBuildUI
|
||||
-- Set ListMenu behaviour:
|
||||
hist_menu._do_cover_images = display_mode ~= "list_only_meta"
|
||||
hist_menu._do_filename_only = display_mode == "list_image_filename"
|
||||
|
||||
end
|
||||
hist_menu._do_hint_opened = BookInfoManager:getSetting("history_hint_opened")
|
||||
end
|
||||
|
||||
-- And do now what the original does
|
||||
_FileManagerHistory_updateItemTable_orig(self, ...)
|
||||
end
|
||||
|
||||
function CoverBrowser:setupHistoryDisplayMode(display_mode)
|
||||
function CoverBrowser.setupWidgetDisplayMode(widget_id, display_mode)
|
||||
display_mode = display_mode or BookInfoManager:getSetting(display_mode_db_names[widget_id])
|
||||
if not DISPLAY_MODES[display_mode] then
|
||||
display_mode = nil -- unknown mode, fallback to classic
|
||||
end
|
||||
if init_done and display_mode == history_display_mode then -- no change
|
||||
if init_done and display_mode == curr_display_modes[widget_id] then -- no change
|
||||
return
|
||||
end
|
||||
if init_done then -- save new mode in db
|
||||
BookInfoManager:saveSetting("history_display_mode", display_mode)
|
||||
BookInfoManager:saveSetting(display_mode_db_names[widget_id], display_mode)
|
||||
end
|
||||
-- remember current mode in module variable
|
||||
history_display_mode = display_mode
|
||||
logger.dbg("CoverBrowser: setting History display mode to:", display_mode or "classic")
|
||||
curr_display_modes[widget_id] = display_mode
|
||||
logger.dbg("CoverBrowser: setting display mode:", widget_id, display_mode or "classic")
|
||||
|
||||
if not init_done and not display_mode then
|
||||
return -- starting in classic mode, nothing to patch
|
||||
end
|
||||
|
||||
-- We only need to replace one FileManagerHistory method
|
||||
if not display_mode then -- classic mode
|
||||
CoverBrowser.removeFileDialogButtons(FileManagerHistory)
|
||||
-- Put back original methods
|
||||
FileManagerHistory.updateItemTable = _FileManagerHistory_updateItemTable_orig
|
||||
FileManagerHistory.display_mode = nil
|
||||
else
|
||||
CoverBrowser.addFileDialogButtons(FileManagerHistory)
|
||||
-- Replace original method with the one defined above
|
||||
FileManagerHistory.updateItemTable = _FileManagerHistory_updateItemTable
|
||||
-- And let it know which display_mode we should use
|
||||
FileManagerHistory.display_mode = display_mode
|
||||
-- We only need to replace one method
|
||||
local widget = _modified_widgets[widget_id]
|
||||
if display_mode then
|
||||
CoverBrowser.addFileDialogButtons(widget_id)
|
||||
widget.updateItemTable = CoverBrowser.getUpdateItemTableFunc(display_mode)
|
||||
else -- classic mode
|
||||
CoverBrowser.removeFileDialogButtons(widget_id)
|
||||
widget.updateItemTable = _updateItemTable_orig_funcs[widget_id]
|
||||
end
|
||||
end
|
||||
|
||||
local function _FileManagerCollections_updateItemTable(self, ...)
|
||||
-- 'self' here is the single FileManagerCollections instance
|
||||
-- FileManagerCollections has just created a new instance of Menu as 'coll_menu'
|
||||
-- at each display of Collection/Favorites. Soon after instantiation, this method
|
||||
-- is called. The first time it is called, we replace some methods.
|
||||
local display_mode = self.display_mode
|
||||
local coll_menu = self.coll_menu
|
||||
function CoverBrowser.getUpdateItemTableFunc(display_mode)
|
||||
return function(this, ...)
|
||||
-- 'this' here is the single widget instance
|
||||
-- The widget has just created a new instance of BookList as 'booklist_menu'
|
||||
-- at each display of the widget. Soon after instantiation, this method
|
||||
-- is called. The first time it is called, we replace some methods.
|
||||
local booklist_menu = this.booklist_menu
|
||||
local widget_id = booklist_menu.name
|
||||
|
||||
if not coll_menu._coverbrowser_overridden then
|
||||
coll_menu._coverbrowser_overridden = true
|
||||
if not booklist_menu._coverbrowser_overridden then
|
||||
booklist_menu._coverbrowser_overridden = true
|
||||
|
||||
-- In both mosaic and list modes, replace original methods with those from
|
||||
-- our generic CoverMenu
|
||||
local CoverMenu = require("covermenu")
|
||||
coll_menu.updateItems = CoverMenu.updateItems
|
||||
coll_menu.onCloseWidget = CoverMenu.onCloseWidget
|
||||
-- In both mosaic and list modes, replace original methods with those from
|
||||
-- our generic CoverMenu
|
||||
local CoverMenu = require("covermenu")
|
||||
booklist_menu.updateItems = CoverMenu.updateItems
|
||||
booklist_menu.onCloseWidget = CoverMenu.onCloseWidget
|
||||
|
||||
CoverBrowser.initGrid(coll_menu, display_mode)
|
||||
if coll_menu.display_mode_type == "mosaic" then
|
||||
-- Replace some other original methods with those from our MosaicMenu
|
||||
local MosaicMenu = require("mosaicmenu")
|
||||
coll_menu._recalculateDimen = MosaicMenu._recalculateDimen
|
||||
coll_menu._updateItemsBuildUI = MosaicMenu._updateItemsBuildUI
|
||||
-- Set MosaicMenu behaviour:
|
||||
coll_menu._do_cover_images = display_mode ~= "mosaic_text"
|
||||
coll_menu._do_center_partial_rows = true -- nicer looking when few elements
|
||||
|
||||
elseif coll_menu.display_mode_type == "list" then
|
||||
-- Replace some other original methods with those from our ListMenu
|
||||
local ListMenu = require("listmenu")
|
||||
coll_menu._recalculateDimen = ListMenu._recalculateDimen
|
||||
coll_menu._updateItemsBuildUI = ListMenu._updateItemsBuildUI
|
||||
-- Set ListMenu behaviour:
|
||||
coll_menu._do_cover_images = display_mode ~= "list_only_meta"
|
||||
coll_menu._do_filename_only = display_mode == "list_image_filename"
|
||||
CoverBrowser.initGrid(booklist_menu, display_mode)
|
||||
if booklist_menu.display_mode_type == "mosaic" then
|
||||
-- Replace some other original methods with those from our MosaicMenu
|
||||
local MosaicMenu = require("mosaicmenu")
|
||||
booklist_menu._recalculateDimen = MosaicMenu._recalculateDimen
|
||||
booklist_menu._updateItemsBuildUI = MosaicMenu._updateItemsBuildUI
|
||||
-- Set MosaicMenu behaviour:
|
||||
booklist_menu._do_cover_images = display_mode ~= "mosaic_text"
|
||||
booklist_menu._do_center_partial_rows = true -- nicer looking when few elements
|
||||
elseif booklist_menu.display_mode_type == "list" then
|
||||
-- Replace some other original methods with those from our ListMenu
|
||||
local ListMenu = require("listmenu")
|
||||
booklist_menu._recalculateDimen = ListMenu._recalculateDimen
|
||||
booklist_menu._updateItemsBuildUI = ListMenu._updateItemsBuildUI
|
||||
-- Set ListMenu behaviour:
|
||||
booklist_menu._do_cover_images = display_mode ~= "list_only_meta"
|
||||
booklist_menu._do_filename_only = display_mode == "list_image_filename"
|
||||
end
|
||||
|
||||
if widget_id == "history" then
|
||||
booklist_menu._do_hint_opened = BookInfoManager:getSetting("history_hint_opened")
|
||||
elseif widget_id == "collections" then
|
||||
booklist_menu._do_hint_opened = BookInfoManager:getSetting("collections_hint_opened")
|
||||
else -- "filesearcher"
|
||||
booklist_menu._do_hint_opened = true
|
||||
end
|
||||
end
|
||||
coll_menu._do_hint_opened = BookInfoManager:getSetting("collections_hint_opened")
|
||||
end
|
||||
|
||||
-- And do now what the original does
|
||||
_FileManagerCollection_updateItemTable_orig(self, ...)
|
||||
end
|
||||
|
||||
function CoverBrowser:setupCollectionDisplayMode(display_mode)
|
||||
if not DISPLAY_MODES[display_mode] then
|
||||
display_mode = nil -- unknown mode, fallback to classic
|
||||
end
|
||||
if init_done and display_mode == collection_display_mode then -- no change
|
||||
return
|
||||
end
|
||||
if init_done then -- save new mode in db
|
||||
BookInfoManager:saveSetting("collection_display_mode", display_mode)
|
||||
end
|
||||
-- remember current mode in module variable
|
||||
collection_display_mode = display_mode
|
||||
logger.dbg("CoverBrowser: setting Collection display mode to:", display_mode or "classic")
|
||||
|
||||
if not init_done and not display_mode then
|
||||
return -- starting in classic mode, nothing to patch
|
||||
end
|
||||
|
||||
-- We only need to replace one FileManagerCollection method
|
||||
if not display_mode then -- classic mode
|
||||
CoverBrowser.removeFileDialogButtons(FileManagerCollection)
|
||||
-- Put back original methods
|
||||
FileManagerCollection.updateItemTable = _FileManagerCollection_updateItemTable_orig
|
||||
FileManagerCollection.display_mode = nil
|
||||
else
|
||||
CoverBrowser.addFileDialogButtons(FileManagerCollection)
|
||||
-- Replace original method with the one defined above
|
||||
FileManagerCollection.updateItemTable = _FileManagerCollections_updateItemTable
|
||||
-- And let it know which display_mode we should use
|
||||
FileManagerCollection.display_mode = display_mode
|
||||
-- And do now what the original does
|
||||
_updateItemTable_orig_funcs[widget_id](this, ...)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user