[feat] Open unsupported documents as text (#5497)

pull/5528/head
yparitcher 5 years ago committed by Frans de Jonge
parent 0ecf42e995
commit 6c68df42ec

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

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

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

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

Loading…
Cancel
Save