You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koreader/frontend/apps/cloudstorage/ftpapi.lua

71 lines
1.8 KiB
Lua

local ftp = require("socket.ftp")
local ltn12 = require("ltn12")
local url = require("socket.url")
local DocumentRegistry = require("document/documentregistry")
local FtpApi = {
}
function FtpApi:nlst(u)
local t = {}
local p = url.parse(u)
p.command = "nlst"
p.sink = ltn12.sink.table(t)
local r, e = ftp.get(p)
return r and table.concat(t), e
end
function FtpApi:listFolder(address_path)
local ftp_list = {}
local ftp_file = {}
local type
local extension
local file_name
local ls_ftp = self:nlst(address_path)
if ls_ftp == nil then return false end
for item in (ls_ftp..'\n'):gmatch'(.-)\r?\n' do
if item ~= '' then
file_name = item:match("([^/]+)$")
extension = item:match("^.+(%..+)$")
item = "/" .. item
if not extension then
type = "folder"
table.insert(ftp_list, {
text = file_name .. "/",
url = item,
type = type,
})
--show only file with supported formats
elseif extension and DocumentRegistry:getProvider(item) then
type = "file"
table.insert(ftp_file, {
text = file_name,
url = item,
type = type,
})
end
end
end
--sort
table.sort(ftp_list, function(v1,v2)
return v1.text < v2.text
end)
table.sort(ftp_file, function(v1,v2)
return v1.text < v2.text
end)
for _, files in ipairs(ftp_file) do
table.insert(ftp_list, {
text = files.text,
url = files.url,
type = files.type
})
end
return ftp_list
end
function FtpApi:downloadFile(file_path)
return ftp.get(file_path ..";type=i")
end
return FtpApi