2
0
mirror of https://github.com/koreader/koreader synced 2024-11-16 06:12:56 +00:00
koreader/frontend/document/documentregistry.lua

70 lines
2.0 KiB
Lua
Raw Normal View History

local DEBUG = require("dbg")
2013-10-18 20:38:07 +00:00
--[[
This is a registry for document providers
]]--
local DocumentRegistry = {
registry = {},
providers = {},
2013-10-18 20:38:07 +00:00
}
function DocumentRegistry:addProvider(extension, mimetype, provider)
2014-03-13 13:52:43 +00:00
table.insert(self.providers, { extension = extension, mimetype = mimetype, provider = provider })
2013-10-18 20:38:07 +00:00
end
function DocumentRegistry:getProvider(file)
2014-03-13 13:52:43 +00:00
-- TODO: some implementation based on mime types?
for _, provider in ipairs(self.providers) do
local suffix = string.sub(file, -string.len(provider.extension) - 1)
if string.lower(suffix) == "."..provider.extension then
-- if extension == provider.extension then
2014-03-13 13:52:43 +00:00
return provider.provider
end
end
2013-10-18 20:38:07 +00:00
end
function DocumentRegistry:openDocument(file)
if not self.registry[file] then
local provider = self:getProvider(file)
if provider ~= nil then
local ok, doc = pcall(provider.new, provider, {file = file})
if ok then
self.registry[file] = {
doc = doc,
refs = 1,
}
else
DEBUG("cannot open document", file, doc)
end
end
else
self.registry[file].refs = self.registry[file].refs + 1
end
if self.registry[file] then
return self.registry[file].doc
end
end
function DocumentRegistry:closeDocument(file)
if self.registry[file] then
self.registry[file].refs = self.registry[file].refs - 1
if self.registry[file].refs == 0 then
self.registry[file] = nil
return 0
else
return self.registry[file].refs
end
else
error("Try to close unregistered file.")
2013-10-18 20:38:07 +00:00
end
end
-- load implementations:
require("document/credocument"):register(DocumentRegistry)
2013-10-18 20:38:07 +00:00
require("document/pdfdocument"):register(DocumentRegistry)
require("document/djvudocument"):register(DocumentRegistry)
require("document/picdocument"):register(DocumentRegistry)
2013-10-18 20:38:07 +00:00
return DocumentRegistry