diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 01b1ac763..0319064a7 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -129,6 +129,7 @@ function FileManager:init() local g_show_hidden = G_reader_settings:readSetting("show_hidden") local show_hidden = g_show_hidden == nil and DSHOWHIDDENFILES or g_show_hidden + local show_unsupported = G_reader_settings:readSetting("show_unsupported") local file_chooser = FileChooser:new{ -- remember to adjust the height when new item is added to the group path = self.root_path, @@ -143,6 +144,7 @@ function FileManager:init() is_borderless = true, has_close_button = true, perpage = G_reader_settings:readSetting("items_per_page"), + show_unsupported = show_unsupported, file_filter = function(filename) if DocumentRegistry:hasProvider(filename) then return true @@ -274,7 +276,7 @@ function FileManager:init() { { text = _("Open with…"), - enabled = lfs.attributes(file, "mode") == "file" + enabled = lfs.attributes(file, "mode") == "file" and DocumentRegistry:getProviders(file) ~= nil and #(DocumentRegistry:getProviders(file)) > 1, callback = function() UIManager:close(self.file_dialog) @@ -525,6 +527,11 @@ function FileManager:toggleHiddenFiles() G_reader_settings:saveSetting("show_hidden", self.file_chooser.show_hidden) end +function FileManager:toggleUnsupportedFiles() + self.file_chooser:toggleUnsupportedFiles() + G_reader_settings:saveSetting("show_unsupported", self.file_chooser.show_unsupported) +end + function FileManager:setCollate(collate) self.file_chooser:setCollate(collate) G_reader_settings:saveSetting("collate", self.file_chooser.collate) diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 478844d2b..5297847ad 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -121,6 +121,11 @@ function FileManagerMenu:setUpdateItemTable() checked_func = function() return self.ui.file_chooser.show_hidden end, callback = function() self.ui:toggleHiddenFiles() end } + self.menu_items.show_unsupported_files = { + text = _("Show unsupported files"), + checked_func = function() return self.ui.file_chooser.show_unsupported end, + callback = function() self.ui:toggleUnsupportedFiles() end + } self.menu_items.items_per_page = { text = _("Items per page"), help_text = _([[This sets the number of items per page in: diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index 783427a40..901114de6 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -416,11 +416,16 @@ function ReaderUI:getLastDirFile() return last_dir, last_file end -function ReaderUI:showFileManager() +function ReaderUI:showFileManager(file) local FileManager = require("apps/filemanager/filemanager") - local last_dir, last_file = self:getLastDirFile() - + local last_dir, last_file + if file then + last_dir, last_file = util.splitFilePathName(file) + last_dir = last_dir:match("(.*)/") + else + last_dir, last_file = self:getLastDirFile() + end if FileManager.instance then FileManager.instance:reinit(last_dir, last_file) else @@ -430,7 +435,6 @@ end function ReaderUI:showReader(file, provider) logger.dbg("show reader ui") - require("readhistory"):addItem(file) if lfs.attributes(file, "mode") ~= "file" then UIManager:show(InfoMessage:new{ @@ -439,6 +443,13 @@ function ReaderUI:showReader(file, provider) return end + if not DocumentRegistry:hasProvider(file) then + UIManager:show(InfoMessage:new{ + text = T(_("File '%1' is not supported."), file) + }) + self:showFileManager(file) + return + end -- prevent crash due to incompatible bookmarks -- @TODO split bookmarks from metadata and do per-engine in conversion provider = provider or DocumentRegistry:getProvider(file) @@ -516,7 +527,7 @@ function ReaderUI:doShowReader(file, provider) end end end - + require("readhistory"):addItem(file) G_reader_settings:saveSetting("lastfile", file) local reader = ReaderUI:new{ dimen = Screen:getSize(), diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index ed6e9e05a..0e88589ba 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -12,6 +12,7 @@ local order = { filemanager_settings = { "filemanager_display_mode", "show_hidden_files", + "show_unsupported_files", "items_per_page", "----------------------------", "sort_by", diff --git a/frontend/ui/widget/filechooser.lua b/frontend/ui/widget/filechooser.lua index 225ac3c93..c42c5aa93 100644 --- a/frontend/ui/widget/filechooser.lua +++ b/frontend/ui/widget/filechooser.lua @@ -71,7 +71,7 @@ function FileChooser:init() attr = attributes}) end elseif attributes.mode == "file" then - if self.file_filter == nil or self.file_filter(filename) then + if self.file_filter == nil or self.file_filter(filename) or self.show_unsupported then local percent_finished = 0 if self.collate == "percent_unopened_first" or self.collate == "percent_unopened_last" then if DocSettings:hasSidecarFile(filename) then @@ -331,6 +331,11 @@ function FileChooser:toggleHiddenFiles() self:refreshPath() end +function FileChooser:toggleUnsupportedFiles() + self.show_unsupported = not self.show_unsupported + self:refreshPath() +end + function FileChooser:setCollate(collate) self.collate = collate self:refreshPath()