You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
48 lines
1.1 KiB
-- Share.lua
|
|
-- @Author : DengSir (tdaddon@163.com)
|
|
-- @Link : https://dengsir.github.io
|
|
-- @Date : 9/21/2018, 9:50:36 AM
|
|
|
|
local ns = select(2, ...)
|
|
local Addon = ns.Addon
|
|
local Director = ns.Director
|
|
|
|
local SharePrototype = {
|
|
Export = nop,
|
|
Import = nop,
|
|
Is = nop,
|
|
}
|
|
|
|
local handlers = {}
|
|
|
|
function Addon:NewShareHandler(version)
|
|
local handler = CopyTable(SharePrototype)
|
|
handler.version = version
|
|
|
|
tinsert(handlers, handler)
|
|
sort(handlers, function(a, b)
|
|
return a.version > b.version
|
|
end)
|
|
|
|
return handler
|
|
end
|
|
|
|
function Addon:Export(script)
|
|
return handlers[1]:Export(script)
|
|
end
|
|
|
|
function Addon:Import(code)
|
|
for _, handler in ipairs(handlers) do
|
|
if handler:Is(code) then
|
|
local ok, data = handler:Import(code)
|
|
if not ok or not data or not data.db or not data.db.code then
|
|
return false
|
|
end
|
|
|
|
if not Director:BuildScript(data.db.code) then
|
|
return false
|
|
end
|
|
return true, data
|
|
end
|
|
end
|
|
end
|
|
|