diff --git a/frontend/document/documentregistry.lua b/frontend/document/documentregistry.lua index 7310d73eb..6acc8fe9a 100644 --- a/frontend/document/documentregistry.lua +++ b/frontend/document/documentregistry.lua @@ -2,6 +2,7 @@ This is a registry for document providers ]]-- +local DocSettings = require("docsettings") local logger = require("logger") local lfs = require("libs/libkoreader-lfs") local util = require("util") @@ -29,8 +30,7 @@ function DocumentRegistry:addProvider(extension, mimetype, provider, weight) end function DocumentRegistry:getRandomFile(dir, opened, extension) - local DocSettings = require("docsettings") - if string.sub(dir, string.len(dir)) ~= "/" then + if dir:sub(-1) ~= "/" then dir = dir .. "/" end local files = {} @@ -38,8 +38,10 @@ function DocumentRegistry:getRandomFile(dir, opened, extension) local ok, iter, dir_obj = pcall(lfs.dir, dir) if ok then for entry in iter, dir_obj do - if lfs.attributes(dir .. entry, "mode") == "file" and self:hasProvider(dir .. entry) - and (opened == nil or DocSettings:hasSidecarFile(dir .. entry) == opened) + local file = dir .. entry + local file_opened = DocSettings:hasSidecarFile(file) and true or false + if lfs.attributes(file, "mode") == "file" and self:hasProvider(file) + and (opened == nil or file_opened == opened) and (extension == nil or extension[util.getFileNameSuffix(entry)]) then i = i + 1 files[i] = entry @@ -70,7 +72,6 @@ function DocumentRegistry:hasProvider(file, mimetype) if self.filetype_provider[filename_suffix] or filetype_provider[filename_suffix] then return true end - local DocSettings = require("docsettings") if DocSettings:hasSidecarFile(file) then return DocSettings:open(file):has("provider") end @@ -85,7 +86,6 @@ function DocumentRegistry:getProvider(file) if providers then -- provider for document - local DocSettings = require("docsettings") if DocSettings:hasSidecarFile(file) then local doc_settings_provider = DocSettings:open(file):readSetting("provider") if doc_settings_provider then @@ -176,9 +176,9 @@ function DocumentRegistry:setProvider(file, provider, all) -- per-document if not all then - local DocSettings = require("docsettings"):open(file) - DocSettings:saveSetting("provider", provider.provider) - DocSettings:flush() + local doc_settings = DocSettings:open(file) + doc_settings:saveSetting("provider", provider.provider) + doc_settings:flush() -- global else local filetype_provider = G_reader_settings:readSetting("provider") or {}