mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Dispatcher: add File browser actions 'Set display mode', 'Sort By' (#11921)
This commit is contained in:
@@ -1524,4 +1524,67 @@ function FileManager:openFile(file, provider, doc_caller_callback, aux_caller_ca
|
||||
end
|
||||
end
|
||||
|
||||
-- Dispatcher helpers
|
||||
|
||||
function FileManager.getDisplayModeActions()
|
||||
local action_names, action_texts = { "classic" }, { _("Classic (filename only)") }
|
||||
local ui = FileManager.instance or require("apps/reader/readerui").instance
|
||||
if ui.coverbrowser then
|
||||
for _, v in ipairs(ui.coverbrowser.modes) do
|
||||
local action_text, action_name = unpack(v)
|
||||
if action_name then -- skip Classic
|
||||
table.insert(action_names, action_name)
|
||||
table.insert(action_texts, action_text)
|
||||
end
|
||||
end
|
||||
end
|
||||
return action_names, action_texts
|
||||
end
|
||||
|
||||
function FileManager:onSetDisplayMode(mode)
|
||||
if self.coverbrowser then
|
||||
mode = mode ~= "classic" and mode or nil
|
||||
self.coverbrowser:setDisplayMode(mode)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function FileManager.getSortByActions()
|
||||
local collates = {}
|
||||
for k, v in pairs(FileChooser.collates) do
|
||||
table.insert(collates, {
|
||||
name = k,
|
||||
text = v.text,
|
||||
menu_order = v.menu_order,
|
||||
})
|
||||
end
|
||||
table.sort(collates, function(a, b) return a.menu_order < b.menu_order end)
|
||||
|
||||
local action_names, action_texts = {}, {}
|
||||
for _, v in ipairs(collates) do
|
||||
table.insert(action_names, v.name)
|
||||
table.insert(action_texts, v.text)
|
||||
end
|
||||
return action_names, action_texts
|
||||
end
|
||||
|
||||
function FileManager:onSetSortBy(mode)
|
||||
G_reader_settings:saveSetting("collate", mode)
|
||||
self.file_chooser:clearSortingCache()
|
||||
self.file_chooser:refreshPath()
|
||||
return true
|
||||
end
|
||||
|
||||
function FileManager:onSetReverseSorting(toggle)
|
||||
G_reader_settings:saveSetting("reverse_collate", toggle or nil)
|
||||
self.file_chooser:refreshPath()
|
||||
return true
|
||||
end
|
||||
|
||||
function FileManager:onSetMixedSorting(toggle)
|
||||
G_reader_settings:saveSetting("collate_mixed", toggle or nil)
|
||||
self.file_chooser:refreshPath()
|
||||
return true
|
||||
end
|
||||
|
||||
return FileManager
|
||||
|
||||
@@ -32,6 +32,7 @@ local CreOptions = require("ui/data/creoptions")
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
local Device = require("device")
|
||||
local Event = require("ui/event")
|
||||
local FileManager = require("apps/filemanager/filemanager")
|
||||
local Notification = require("ui/widget/notification")
|
||||
local ReaderHighlight = require("apps/reader/modules/readerhighlight")
|
||||
local ReaderZooming = require("apps/reader/modules/readerzooming")
|
||||
@@ -121,12 +122,17 @@ local settingsList = {
|
||||
----
|
||||
|
||||
-- File browser
|
||||
set_display_mode = {category="string", event="SetDisplayMode", title=_("Set display mode"), args_func=FileManager.getDisplayModeActions, filemanager=true},
|
||||
set_sort_by = {category="string", event="SetSortBy", title=_("Sort by"), args_func=FileManager.getSortByActions, filemanager=true},
|
||||
set_reverse_sorting = {category="string", event="SetReverseSorting", title=_("Reverse sorting"), args={true, false}, toggle={_("on"), _("off")}, filemanager=true},
|
||||
set_mixed_sorting = {category="string", event="SetMixedSorting", title=_("Folders and files mixed"), args={true, false}, toggle={_("on"), _("off")}, filemanager=true, separator=true},
|
||||
----
|
||||
folder_up = {category="none", event="FolderUp", title=_("Folder up"), filemanager=true},
|
||||
show_plus_menu = {category="none", event="ShowPlusMenu", title=_("Show plus menu"), filemanager=true},
|
||||
toggle_select_mode = {category="none", event="ToggleSelectMode", title=_("Toggle select mode"), filemanager=true},
|
||||
refresh_content = {category="none", event="RefreshContent", title=_("Refresh content"), filemanager=true},
|
||||
folder_shortcuts = {category="none", event="ShowFolderShortcutsDialog", title=_("Folder shortcuts"), filemanager=true},
|
||||
file_search = {category="none", event="ShowFileSearch", title=_("File search"), filemanager=true, separator=true},
|
||||
file_search = {category="none", event="ShowFileSearch", title=_("File search"), filemanager=true},
|
||||
----
|
||||
-- go_to
|
||||
-- back
|
||||
@@ -343,6 +349,11 @@ local dispatcher_menu_order = {
|
||||
----
|
||||
|
||||
-- File browser
|
||||
"set_display_mode",
|
||||
"set_sort_by",
|
||||
"set_reverse_sorting",
|
||||
"set_mixed_sorting",
|
||||
----
|
||||
"folder_up",
|
||||
"show_plus_menu",
|
||||
"toggle_select_mode",
|
||||
|
||||
@@ -48,6 +48,14 @@ local series_mode = nil -- defaults to not display series
|
||||
|
||||
local CoverBrowser = WidgetContainer:extend{
|
||||
name = "coverbrowser",
|
||||
modes = {
|
||||
{ _("Classic (filename only)") },
|
||||
{ _("Mosaic with cover images"), "mosaic_image" },
|
||||
{ _("Mosaic with text covers"), "mosaic_text" },
|
||||
{ _("Detailed list with cover images and metadata"), "list_image_meta" },
|
||||
{ _("Detailed list with metadata, no images"), "list_only_meta" },
|
||||
{ _("Detailed list with cover images and filenames"), "list_image_filename" },
|
||||
},
|
||||
}
|
||||
|
||||
function CoverBrowser:init()
|
||||
@@ -81,16 +89,8 @@ function CoverBrowser:init()
|
||||
end
|
||||
|
||||
function CoverBrowser:addToMainMenu(menu_items)
|
||||
local modes = {
|
||||
{ _("Classic (filename only)") },
|
||||
{ _("Mosaic with cover images"), "mosaic_image" },
|
||||
{ _("Mosaic with text covers"), "mosaic_text" },
|
||||
{ _("Detailed list with cover images and metadata"), "list_image_meta" },
|
||||
{ _("Detailed list with metadata, no images"), "list_only_meta" },
|
||||
{ _("Detailed list with cover images and filenames"), "list_image_filename" },
|
||||
}
|
||||
local sub_item_table, history_sub_item_table, collection_sub_item_table = {}, {}, {}
|
||||
for i, v in ipairs(modes) do
|
||||
for i, v in ipairs(self.modes) do
|
||||
local text, mode = unpack(v)
|
||||
sub_item_table[i] = {
|
||||
text = text,
|
||||
@@ -98,11 +98,7 @@ function CoverBrowser:addToMainMenu(menu_items)
|
||||
return mode == filemanager_display_mode
|
||||
end,
|
||||
callback = function()
|
||||
self:setupFileManagerDisplayMode(mode)
|
||||
if BookInfoManager:getSetting("unified_display_mode") then
|
||||
self:setupHistoryDisplayMode(mode)
|
||||
self:setupCollectionDisplayMode(mode)
|
||||
end
|
||||
self:setDisplayMode(mode)
|
||||
end,
|
||||
}
|
||||
history_sub_item_table[i] = {
|
||||
@@ -124,7 +120,7 @@ function CoverBrowser:addToMainMenu(menu_items)
|
||||
end,
|
||||
}
|
||||
end
|
||||
sub_item_table[#modes].separator = true
|
||||
sub_item_table[#self.modes].separator = true
|
||||
table.insert(sub_item_table, {
|
||||
text = _("Use this mode everywhere"),
|
||||
checked_func = function()
|
||||
@@ -540,6 +536,14 @@ function CoverBrowser:refreshFileManagerInstance(cleanup, post_init)
|
||||
end
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
||||
function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
if not DISPLAY_MODES[display_mode] then
|
||||
display_mode = nil -- unknow mode, fallback to classic
|
||||
@@ -750,7 +754,6 @@ local function _FileManagerCollections_updateItemTable(self)
|
||||
_FileManagerCollection_updateItemTable_orig(self)
|
||||
end
|
||||
|
||||
|
||||
function CoverBrowser:setupCollectionDisplayMode(display_mode)
|
||||
if not DISPLAY_MODES[display_mode] then
|
||||
display_mode = nil -- unknow mode, fallback to classic
|
||||
|
||||
Reference in New Issue
Block a user