diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 54ad13f85..e5ee173e8 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -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 diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index 2121f9955..db6012e10 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -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", diff --git a/plugins/coverbrowser.koplugin/main.lua b/plugins/coverbrowser.koplugin/main.lua index ed4846865..994a168ba 100644 --- a/plugins/coverbrowser.koplugin/main.lua +++ b/plugins/coverbrowser.koplugin/main.lua @@ -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