Add "Open random document" to Plus menu (#4103)

This commit is contained in:
Robert
2018-07-28 20:30:39 +02:00
committed by poire-z
parent 00a71a84ad
commit e5a33ac6d9
2 changed files with 62 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ local OpenWithDialog = require("ui/widget/openwithdialog")
local UIManager = require("ui/uimanager")
local gettext = require("gettext")
local logger = require("logger")
local lfs = require("libs/libkoreader-lfs")
local util = require("util")
local T = require("ffi/util").template
@@ -26,6 +27,33 @@ function DocumentRegistry:addProvider(extension, mimetype, provider, weight)
self.filetype_provider[extension] = true
end
function DocumentRegistry:getRandomFile(dir, opened, extension)
local DocSettings = require("docsettings")
if string.sub(dir, string.len(dir)) ~= "/" then
dir = dir .. "/"
end
local files = {}
local i = 0
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)
and (extension == nil or extension[util.getFileNameSuffix(entry)]) then
i = i + 1
files[i] = entry
end
end
if i == 0 then
return nil
end
else
return nil
end
math.randomseed(os.time())
return dir .. files[math.random(i)]
end
--- Returns true if file has provider.
-- @string file
-- @treturn boolean