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.

83 lines
1.7 KiB

-- Version2.lua
-- @Author : DengSir (tdaddon@163.com)
-- @Link : https://dengsir.github.io
-- @Date : 9/21/2018, 12:43:33 PM
local ns = select(2, ...)
local Addon = ns.Addon
local AceSerializer = LibStub('AceSerializer-3.0')
local Base64 = LibStub('LibBase64-1.0')
local VERSION = 2
local Share = Addon:NewShareHandler(VERSION)
local template = [[
# tdBattlePetScript Share String
# Url: https://www.curseforge.com/wow/addons/tdbattlepetscript
# Version: %s
# Name: %s
# Data: %s
# Code Start
%s
# Code End
]]
function Share:Is(code)
local version = code:match('# Version: (%d+)')
return tonumber(version) == VERSION
end
function Share:Export(script)
local data = Base64.Encode(AceSerializer:Serialize{
plugin = script:GetPlugin():GetPluginName(),
key = script:GetKey(),
extra = script:GetPlugin():OnExport(script:GetKey())
})
return template:format(
VERSION,
script:GetName(),
data,
script:GetCode()
)
end
function Share:DecodeData(data)
local ok, data = pcall(Base64.Decode, data)
if not ok then
return
end
ok, data = AceSerializer:Deserialize(data)
if not ok then
return
end
return data
end
function Share:Import(code)
local name = code:match('# Name: (%S+)')
local data = code:match('# Data: (%S+)')
local code = code:match('# Code Start(.+)# Code End')
if not code then
return false, 'Not found code'
end
code = code:trim()
if code == '' then
return false, 'Not found code'
end
if data then
data = self:DecodeData(data)
end
if not data then
data = {}
end
data.db = {
code = code,
name = name,
}
return true, data
end