diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 0490565cd..e4f8f5c3a 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -291,8 +291,8 @@ function FileManager:init() { { text = _("Open with…"), - enabled = lfs.attributes(file, "mode") == "file" and DocumentRegistry:getProviders(file) ~= nil - and #(DocumentRegistry:getProviders(file)) > 1, + enabled = lfs.attributes(file, "mode") == "file" and (DocumentRegistry:getProviders(file) == nil + or #(DocumentRegistry:getProviders(file)) > 1), callback = function() UIManager:close(self.file_dialog) self:showSetProviderButtons(file, FileManager.instance, ReaderUI) diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index 8ea42af0a..ebbbd1ad8 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -447,7 +447,7 @@ function ReaderUI:showReader(file, provider) return end - if not DocumentRegistry:hasProvider(file) then + if not DocumentRegistry:hasProvider(file) and provider == nil then UIManager:show(InfoMessage:new{ text = T(_("File '%1' is not supported."), file) }) diff --git a/frontend/document/documentregistry.lua b/frontend/document/documentregistry.lua index 7ceff1eda..0f0e2f400 100644 --- a/frontend/document/documentregistry.lua +++ b/frontend/document/documentregistry.lua @@ -56,9 +56,17 @@ end function DocumentRegistry:hasProvider(file) local filename_suffix = string.lower(util.getFileNameSuffix(file)) - if self.filetype_provider[filename_suffix] then + local filetype_provider = G_reader_settings:readSetting("provider") or {} + if self.filetype_provider[filename_suffix] or filetype_provider[filename_suffix] then return true end + local DocSettings = require("docsettings") + if DocSettings:hasSidecarFile(file) then + local doc_settings_provider = DocSettings:open(file):readSetting("provider") + if doc_settings_provider then + return true + end + end return false end @@ -96,6 +104,12 @@ function DocumentRegistry:getProvider(file) -- highest weighted provider return providers[1].provider + else + for _, provider in ipairs(self.providers) do + if provider.extension == "txt" then + return provider.provider + end + end end end diff --git a/frontend/ui/widget/filechooser.lua b/frontend/ui/widget/filechooser.lua index 078008480..59c6dc2ad 100644 --- a/frontend/ui/widget/filechooser.lua +++ b/frontend/ui/widget/filechooser.lua @@ -394,15 +394,27 @@ function FileChooser:showSetProviderButtons(file, filemanager_instance, reader_u local buttons = {} local radio_buttons = {} + local filetype_provider = G_reader_settings:readSetting("provider") or {} local providers = DocumentRegistry:getProviders(file) - - for ___, provider in ipairs(providers) do - -- we have no need for extension, mimetype, weights, etc. here - provider = provider.provider + if providers ~= nil then + for ___, provider in ipairs(providers) do + -- we have no need for extension, mimetype, weights, etc. here + provider = provider.provider + table.insert(radio_buttons, { + { + text = provider.provider_name, + checked = DocumentRegistry:getProvider(file) == provider, + provider = provider, + }, + }) + end + else + local provider = DocumentRegistry:getProvider(file) table.insert(radio_buttons, { { - text = provider.provider_name, - checked = DocumentRegistry:getProvider(file) == provider, + -- @translators %1 is the provider name, such as Cool Reader Engine or MuPDF. + text = T(_("%1 ~Unsupported"), provider.provider_name), + checked = true, provider = provider, }, }) @@ -459,6 +471,19 @@ function FileChooser:showSetProviderButtons(file, filemanager_instance, reader_u }, }) + if filetype_provider[filename_suffix] ~= nil then + table.insert(buttons, { + { + text = _("Reset default"), + callback = function() + filetype_provider[filename_suffix] = nil + G_reader_settings:saveSetting("provider", filetype_provider) + UIManager:close(self.set_provider_dialog) + end, + }, + }) + end + self.set_provider_dialog = OpenWithDialog:new{ title = T(_("Open %1 with:"), filename_pure), radio_buttons = radio_buttons,