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
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
|
|
|