Dispatcher: add File browser actions 'Set display mode', 'Sort By' (#11921)

This commit is contained in:
hius07
2024-06-01 10:33:14 +03:00
committed by GitHub
parent b06272592d
commit 14519bc076
3 changed files with 94 additions and 17 deletions

View File

@@ -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

View File

@@ -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",

View File

@@ -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